Skip to content

Commit

Permalink
fix(git): added extra error context for a revision that doesn't exist
Browse files Browse the repository at this point in the history
See issue #14621
  • Loading branch information
dacianpascu06 committed Nov 17, 2024
1 parent 352ecdc commit 366440d
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 4 deletions.
40 changes: 36 additions & 4 deletions src/cargo/sources/git/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -944,9 +944,15 @@ pub fn fetch(

let shallow = remote_kind.to_shallow_setting(repo.is_shallow(), gctx);

// Flag to keep track if the rev is a full commit hash
let mut fast_path_rev: bool = false;

let oid_to_fetch = match github_fast_path(repo, remote_url, reference, gctx) {
Ok(FastPathRev::UpToDate) => return Ok(()),
Ok(FastPathRev::NeedsFetch(rev)) => Some(rev),
Ok(FastPathRev::NeedsFetch(rev)) => {
fast_path_rev = true;
Some(rev)
}
Ok(FastPathRev::Indeterminate) => None,
Err(e) => {
debug!("failed to check github {:?}", e);
Expand All @@ -958,6 +964,8 @@ pub fn fetch(

clean_repo_temp_files(repo);

let mut revision: String = String::new();

// Translate the reference desired here into an actual list of refspecs
// which need to get fetched. Additionally record if we're fetching tags.
let mut refspecs = Vec::new();
Expand All @@ -981,6 +989,7 @@ pub fn fetch(
}

GitReference::Rev(rev) => {
revision = rev.to_string();
if rev.starts_with("refs/") {
refspecs.push(format!("+{0}:{0}", rev));
} else if let Some(oid_to_fetch) = oid_to_fetch {
Expand All @@ -1007,13 +1016,36 @@ pub fn fetch(
}

if let Some(true) = gctx.net_config()?.git_fetch_with_cli {
return fetch_with_cli(repo, remote_url, &refspecs, tags, gctx);
match fetch_with_cli(repo, remote_url, &refspecs, tags, gctx) {
Ok(result) => return Ok(result),
Err(e) => {
return Err(e).context(format!("Revision {:?} not found", revision));
}
};
}

if gctx.cli_unstable().gitoxide.map_or(false, |git| git.fetch) {
return fetch_with_gitoxide(repo, remote_url, refspecs, tags, shallow, gctx);
match fetch_with_gitoxide(repo, remote_url, refspecs, tags, shallow, gctx) {
Ok(result) => return Ok(result),
Err(e) => {
if fast_path_rev == true {
return Err(e).context(format!("Revision {:?} not found", revision));
} else {
return Err(e);
}
}
};
} else {
return fetch_with_libgit2(repo, remote_url, refspecs, tags, shallow, gctx);
match fetch_with_libgit2(repo, remote_url, refspecs, tags, shallow, gctx) {
Ok(result) => return Ok(result),
Err(e) => {
if fast_path_rev == true {
return Err(e).context(format!("Revision {:?} not found", revision));
} else {
return Err(e);
}
}
};
}
}

Expand Down
6 changes: 6 additions & 0 deletions tests/testsuite/git.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4086,6 +4086,9 @@ Caused by:
Caused by:
failed to clone into: [ROOT]/home/.cargo/git/db/bitflags-[HASH]
Caused by:
Revision "11111b376b93484341c68fbca3ca110ae5cd2790" not found
Caused by:
process didn't exit successfully: `git fetch --no-tags --force --update-head-ok 'https://github.com/rust-lang/bitflags.git' '+11111b376b93484341c68fbca3ca110ae5cd2790:refs/commit/11111b376b93484341c68fbca3ca110ae5cd2790'` ([EXIT_STATUS]: 128)
Expand Down Expand Up @@ -4128,6 +4131,9 @@ Caused by:
Caused by:
failed to clone into: [ROOT]/home/.cargo/git/db/bitflags-[HASH]
Caused by:
Revision "11111b376b93484341c68fbca3ca110ae5cd2790" not found
Caused by:
network failure seems to have happened
if a proxy or similar is necessary `net.git-fetch-with-cli` may help here
Expand Down

0 comments on commit 366440d

Please sign in to comment.