mirror of
https://github.com/martinvonz/jj.git
synced 2025-02-07 21:27:06 +00:00
lib git.rs
: remove workaround for a now-fixed libgit2 bug
https://github.com/libgit2/libgit2/issues/3178 is now fixed.
This commit is contained in:
parent
a500fe36b5
commit
62b14e1fa2
1 changed files with 6 additions and 25 deletions
|
@ -1275,50 +1275,31 @@ pub fn push_updates(
|
||||||
updates: &[GitRefUpdate],
|
updates: &[GitRefUpdate],
|
||||||
callbacks: RemoteCallbacks<'_>,
|
callbacks: RemoteCallbacks<'_>,
|
||||||
) -> Result<(), GitPushError> {
|
) -> Result<(), GitPushError> {
|
||||||
let mut temp_refs = vec![];
|
|
||||||
let mut qualified_remote_refs = vec![];
|
let mut qualified_remote_refs = vec![];
|
||||||
let mut refspecs = vec![];
|
let mut refspecs = vec![];
|
||||||
for update in updates {
|
for update in updates {
|
||||||
qualified_remote_refs.push(update.qualified_name.as_str());
|
qualified_remote_refs.push(update.qualified_name.as_str());
|
||||||
if let Some(new_target) = &update.new_target {
|
if let Some(new_target) = &update.new_target {
|
||||||
// Create a temporary ref to work around https://github.com/libgit2/libgit2/issues/3178
|
|
||||||
let temp_ref_name = format!("refs/jj/git-push/{}", new_target.hex());
|
|
||||||
temp_refs.push(git_repo.reference(
|
|
||||||
&temp_ref_name,
|
|
||||||
git2::Oid::from_bytes(new_target.as_bytes()).unwrap(),
|
|
||||||
true,
|
|
||||||
"temporary reference for git push",
|
|
||||||
)?);
|
|
||||||
refspecs.push(format!(
|
refspecs.push(format!(
|
||||||
"{}{}:{}",
|
"{}{}:{}",
|
||||||
(if update.force { "+" } else { "" }),
|
(if update.force { "+" } else { "" }),
|
||||||
temp_ref_name,
|
git2::Oid::from_bytes(new_target.as_bytes()).unwrap(),
|
||||||
update.qualified_name
|
update.qualified_name
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
refspecs.push(format!(":{}", update.qualified_name));
|
refspecs.push(format!(":{}", update.qualified_name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let result = push_refs(
|
// TODO(ilyagr): this function will be reused to implement force-with-lease, so
|
||||||
|
// don't inline for now. If it's after 2024-06-01 or so, ilyagr may have
|
||||||
|
// forgotten to delete this comment.
|
||||||
|
push_refs(
|
||||||
git_repo,
|
git_repo,
|
||||||
remote_name,
|
remote_name,
|
||||||
&qualified_remote_refs,
|
&qualified_remote_refs,
|
||||||
&refspecs,
|
&refspecs,
|
||||||
callbacks,
|
callbacks,
|
||||||
);
|
)
|
||||||
for mut temp_ref in temp_refs {
|
|
||||||
// TODO: Figure out how to do the equivalent of absl::Cleanup for
|
|
||||||
// temp_ref.delete().
|
|
||||||
if let Err(err) = temp_ref.delete() {
|
|
||||||
// Propagate error only if we don't already have an error to return and it's not
|
|
||||||
// NotFound (there may be duplicates if the list if multiple branches moved to
|
|
||||||
// the same commit).
|
|
||||||
if result.is_ok() && err.code() != git2::ErrorCode::NotFound {
|
|
||||||
return Err(GitPushError::InternalGitError(err));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
result
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn push_refs(
|
fn push_refs(
|
||||||
|
|
Loading…
Reference in a new issue