fetch: honor the user-provided refspecs when pruning refs
If the user gave us refspecs on the command line, we should use those when deciding whether to prune a ref instead of relying on the refspecs in the config. Previously, running git fetch --prune origin refs/heads/master:refs/remotes/origin/master would delete every other ref under the origin namespace because we were using the refspec to filter the available refs but using the configured refspec to figure out if a ref had been deleted on the remote. This is clearly the wrong thing to do. Change prune_refs and get_stale_heads to simply accept a list of references and a list of refspecs. The caller of either function needs to decide what refspecs should be used to decide whether a ref is stale. Signed-off-by: Carlos Martín Nieto <cmn@elego.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
c500352e0d
commit
ed43de6ec3
@ -349,7 +349,8 @@ static int get_ref_states(const struct ref *remote_refs, struct ref_states *stat
|
||||
else
|
||||
string_list_append(&states->tracked, abbrev_branch(ref->name));
|
||||
}
|
||||
stale_refs = get_stale_heads(states->remote, fetch_map);
|
||||
stale_refs = get_stale_heads(states->remote->fetch,
|
||||
states->remote->fetch_refspec_nr, fetch_map);
|
||||
for (ref = stale_refs; ref; ref = ref->next) {
|
||||
struct string_list_item *item =
|
||||
string_list_append(&states->stale, abbrev_branch(ref->name));
|
||||
|
Reference in New Issue
Block a user