Commit 2f6f6ebc by Vicent Marti

Merge pull request #2392 from libgit2/cmn/remote-delete

remote: build up the list of refs to remove
parents 9bc2813b 8a9419aa
...@@ -1809,24 +1809,50 @@ static int remove_branch_config_related_entries( ...@@ -1809,24 +1809,50 @@ static int remove_branch_config_related_entries(
return error; return error;
} }
static int remove_refs(git_repository *repo, const char *glob) static int remove_refs(git_repository *repo, const git_refspec *spec)
{ {
git_reference_iterator *iter; git_reference_iterator *iter = NULL;
git_vector refs;
const char *name; const char *name;
char *dup;
int error; int error;
size_t i;
if ((error = git_reference_iterator_glob_new(&iter, repo, glob)) < 0) if ((error = git_vector_init(&refs, 8, NULL)) < 0)
return error; return error;
if ((error = git_reference_iterator_new(&iter, repo)) < 0)
goto cleanup;
while ((error = git_reference_next_name(&name, iter)) == 0) { while ((error = git_reference_next_name(&name, iter)) == 0) {
if ((error = git_reference_remove(repo, name)) < 0) if (!git_refspec_dst_matches(spec, name))
break; continue;
dup = git__strdup(name);
if (!dup) {
error = -1;
goto cleanup;
} }
git_reference_iterator_free(iter);
if ((error = git_vector_insert(&refs, dup)) < 0)
goto cleanup;
}
if (error == GIT_ITEROVER) if (error == GIT_ITEROVER)
error = 0; error = 0;
if (error < 0)
goto cleanup;
git_vector_foreach(&refs, i, name) {
if ((error = git_reference_remove(repo, name)) < 0)
break;
}
cleanup:
git_reference_iterator_free(iter);
git_vector_foreach(&refs, i, dup) {
git__free(dup);
}
git_vector_free(&refs);
return error; return error;
} }
...@@ -1848,7 +1874,7 @@ static int remove_remote_tracking(git_repository *repo, const char *remote_name) ...@@ -1848,7 +1874,7 @@ static int remove_remote_tracking(git_repository *repo, const char *remote_name)
if (refspec == NULL) if (refspec == NULL)
continue; continue;
if ((error = remove_refs(repo, git_refspec_dst(refspec))) < 0) if ((error = remove_refs(repo, refspec)) < 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