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 :)