Add desktop HTTPS Git synchronization

This commit is contained in:
2026-08-10 19:53:00 +02:00
parent 8879df142d
commit 95bb10b4a1
6 changed files with 897 additions and 3 deletions

View File

@@ -341,6 +341,34 @@ fn injected_smart_http_push_sends_a_complete_pack_and_credentials() -> TestResul
Ok(())
}
#[test]
fn controlled_sync_pulls_then_pushes_with_one_progress_and_cancellation_contract() -> TestResult {
let temporary = tempfile::tempdir()?;
let config = remote_config(&temporary)?;
let remote = &config.git_remotes()[0];
let store = Repository::open(config.vault())?;
let mut git = GitRepository::init(&store, identity())?;
git.add_remote("origin", remote.url().as_str())?;
let head = git.log(Some(1))?[0].id().to_owned();
set_remote_tracking(config.vault(), &head)?;
let phases = Arc::new(Mutex::new(Vec::new()));
let recorded = Arc::clone(&phases);
let control = GitOperationControl::new(move |phase| {
recorded.lock().expect("progress").push(phase);
});
let push = RecordingTransport::default();
let (pull, pushed) =
git.sync_with_transports_controlled(remote, &Credentials, &NoopFetch, &push, &control)?;
assert_eq!(pull, PullOutcome::UpToDate);
assert_eq!(pushed.new_id(), head);
let phases = phases.lock().expect("progress");
assert!(phases.contains(&GitProgressPhase::Receiving));
assert!(phases.contains(&GitProgressPhase::Integrating));
assert!(phases.contains(&GitProgressPhase::Sending));
assert!(!push.request.lock().expect("push request").is_empty());
Ok(())
}
#[test]
fn push_propagates_authentication_and_rejects_non_fast_forward_before_upload() -> TestResult {
let temporary = tempfile::tempdir()?;