Commit a52ab4b8 by Carlos Martín Nieto

remote: tighten up reference renaming

Tighten up which references we consider for renaming so we don't try to
rename unrelated ones and end up with unexplained references.

If there is a reference on the target namespace, git overwrites it, so
let's do the same.
parent fe3b9d07
...@@ -1380,7 +1380,7 @@ static int rename_one_remote_reference( ...@@ -1380,7 +1380,7 @@ static int rename_one_remote_reference(
goto cleanup; goto cleanup;
error = git_reference_rename( error = git_reference_rename(
NULL, reference, git_buf_cstr(&new_name), 0, NULL, reference, git_buf_cstr(&new_name), 1,
NULL, git_buf_cstr(&log_message)); NULL, git_buf_cstr(&log_message));
git_reference_free(reference); git_reference_free(reference);
...@@ -1396,18 +1396,20 @@ static int rename_remote_references( ...@@ -1396,18 +1396,20 @@ static int rename_remote_references(
const char *new_name) const char *new_name)
{ {
int error; int error;
git_buf buf = GIT_BUF_INIT;
git_reference *ref; git_reference *ref;
git_reference_iterator *iter; git_reference_iterator *iter;
if ((error = git_reference_iterator_new(&iter, repo)) < 0) if ((error = git_buf_printf(&buf, GIT_REFS_REMOTES_DIR "%s/*", old_name)) < 0)
return error; return error;
while ((error = git_reference_next(&ref, iter)) == 0) { error = git_reference_iterator_glob_new(&iter, repo, git_buf_cstr(&buf));
if (git__prefixcmp(ref->name, GIT_REFS_REMOTES_DIR)) { git_buf_free(&buf);
git_reference_free(ref);
continue;
}
if (error < 0)
return error;
while ((error = git_reference_next(&ref, iter)) == 0) {
if ((error = rename_one_remote_reference(ref, old_name, new_name)) < 0) if ((error = rename_one_remote_reference(ref, old_name, new_name)) < 0)
break; break;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment