Git clone with depth 1 fails with code -20 · Issue #1084 · rust-lang/git2-rs (original) (raw)

Hi,

I have the following implementation:

fn new(
    directory: TempDir,
    ssh_key: &'static std::path::Path,
    git_url: &'static str,
) -> Result<GitRepo<Master>, Box<dyn Error>> {
    tracing::info!("creating new repository from url {git_url}");
    let callbacks = GitRepo::<New>::callbacks(ssh_key);

    let mut fo = git2::FetchOptions::new();
    fo.depth(1);
    fo.remote_callbacks(callbacks);

    let mut builder = git2::build::RepoBuilder::new();
    builder.fetch_options(fo);

    // Clone the project.
    let repository = builder.clone(git_url, Path::new(directory.path()))?;

    // We need to do some extra juggling for the first action in the chain
    let next = Rc::new(New {});
    let repo = GitRepo {
        git_url,
        branch_name: "master".into(),
        directory,
        history: vec![next.clone()],
        state: next,
        change_state: ChangeState::Clean,
        ssh_key,
    };

    Ok(repo.next(Master {
        repository: Rc::new(repository),
    }))
}

callbacks(ssh_key) looks like this:

    fn callbacks(ssh_key: &std::path::Path) -> RemoteCallbacks<'_> {
        let mut callbacks = RemoteCallbacks::new();
        callbacks.credentials(|_url, username_from_url, _allowed_types| {
            Cred::ssh_key(
                username_from_url.ok_or_else(|| git2::Error::from_str("no username from url"))?,
                None,
                ssh_key,
                None,
            )
        });
        callbacks
    }

This fails with an error that I cannot understand:

called Result::unwrap() on an Err value: Error { code: -20, klass: 23, message: "fatal: git upload-pack: expected SHA1 list, got 'want 5838d8cfd803c85c8f7534cb6d7108284c3f52f8 multi_ack_detailed side-band-64k include-tag thin-pack ofs-delta shallow '\n38d8cfd803c85c8f7534cb6d7108284c3f52f80000" } stack backtrace: 0: 0x6440510e2c05 - std::backtrace_rs::backtrace::libunwind::trace::h649ab3318d3445c5 at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/../../backtrace/src/backtrace/libunwind.rs:116:5 1: 0x6440510e2c05 - std::backtrace_rs::backtrace::trace_unsynchronized::hf4bb60c3387150c3 at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5 2: 0x6440510e2c05 - std::sys::backtrace::_print_fmt::hd9186c800e44bd00 at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/sys/backtrace.rs:65:5 3: 0x6440510e2c05 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h1b9dad2a88e955ff at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/sys/backtrace.rs:40:26 4: 0x64405110ed7b - core::fmt::rt::Argument::fmt::h351a7824f737a6a0 at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/core/src/fmt/rt.rs:173:76 5: 0x64405110ed7b - core::fmt::write::h4b5a1270214bc4a7 at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/core/src/fmt/mod.rs:1182:21 6: 0x6440510df4ff - std::io::Write::write_fmt::hd04af345a50c312d at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/io/mod.rs:1827:15 7: 0x6440510e3f01 - std::sys::backtrace::BacktraceLock::print::h68d41b51481bce5c at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/sys/backtrace.rs:43:9 8: 0x6440510e3f01 - std::panicking::default_hook::{{closure}}::h96ab15e9936be7ed at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panicking.rs:269:22 9: 0x6440510e3bdc - std::panicking::default_hook::h3cacb9c27561ad33 at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panicking.rs:296:9 10: 0x6440510e45d1 - std::panicking::rust_panic_with_hook::hfe205f6954b2c97b at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panicking.rs:800:13 11: 0x6440510e4437 - std::panicking::begin_panic_handler::{{closure}}::h6cb44b3a50f28c44 at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panicking.rs:674:13 12: 0x6440510e30c9 - std::sys::backtrace::__rust_end_short_backtrace::hf1c1f2a92799bb0e at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/sys/backtrace.rs:168:18 13: 0x6440510e40c4 - rust_begin_unwind at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panicking.rs:665:5 14: 0x64405110cc03 - core::panicking::panic_fmt::h3d8fc78294164da7 at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/core/src/panicking.rs:74:14 15: 0x64405110d1b6 - core::result::unwrap_failed::hfa79a499befff387 at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/core/src/result.rs:1679:5 16: 0x64405098a26c - core::result::Result<T,E>::unwrap::h2424667e005c4eed at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/core/src/result.rs:1102:23 17: 0x64405098a26c - rust_project::commands::command::generate::h8a2cde831a67b31f at /home/usr/work/rust_project/src/commands/command.rs:52:26 18: 0x6440509b1656 - rust_project::main::h928420af63cfcd85 at /home/usr/work/rust_project/src/main.rs:41:38 19: 0x6440509809eb - core::ops::function::FnOnce::call_once::h43100a012b707c39 at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/core/src/ops/function.rs:250:5 20: 0x644050990fae - std::sys::backtrace::__rust_begin_short_backtrace::hdc6958d1e0fa5652 at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/sys/backtrace.rs:152:18 21: 0x6440509977a1 - std::rt::lang_start::{{closure}}::he013aeb9b95039af at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/rt.rs:162:18 22: 0x6440510d6960 - core::ops::function::impls::<impl core::ops::function::FnOnce for &F>::call_once::h2feec6363bd28ad6 at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/core/src/ops/function.rs:284:13 23: 0x6440510d6960 - std::panicking::try::do_call::h71b24ad3a8e797d5 at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panicking.rs:557:40 24: 0x6440510d6960 - std::panicking::try::h8412d1bfb4bcbcc1 at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panicking.rs:521:19 25: 0x6440510d6960 - std::panic::catch_unwind::h2053d3ee5bd8db53 at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panic.rs:350:14 26: 0x6440510d6960 - std::rt::lang_start_internal::{{closure}}::h82eb98fe4f8e75b8 at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/rt.rs:141:48 27: 0x6440510d6960 - std::panicking::try::do_call::h793dba66a0bbd3de at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panicking.rs:557:40 28: 0x6440510d6960 - std::panicking::try::he09b629b3ba06846 at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panicking.rs:521:19 29: 0x6440510d6960 - std::panic::catch_unwind::h7964c913fc871155 at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panic.rs:350:14 30: 0x6440510d6960 - std::rt::lang_start_internal::h5e7c81cecd7f0954 at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/rt.rs:141:20 31: 0x64405099777a - std::rt::lang_start::hbbc730c624e4783e at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/rt.rs:161:17 32: 0x6440509b20ce - main 33: 0x7da3c4629d90 - __libc_start_call_main at ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16 34: 0x7da3c4629e40 - __libc_start_main_impl at ./csu/../csu/libc-start.c:392:3 35: 0x64405097b9a5 - _start 36: 0x0 -

Running it with depth(0) works, but is very slow due to the large history of the repo I'm cloning. If I can do more to help figure this out (if it's a bug in git2-rs) or if I should look elsewhere, just let me know :)