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:
Carlos Martín Nieto
2011-10-15 07:04:25 +02:00
committed by Junio C Hamano
parent c500352e0d
commit ed43de6ec3
5 changed files with 36 additions and 20 deletions

View File

@ -164,6 +164,6 @@ struct ref *guess_remote_head(const struct ref *head,
int all);
/* Return refs which no longer exist on remote */
struct ref *get_stale_heads(struct remote *remote, struct ref *fetch_map);
struct ref *get_stale_heads(struct refspec *refs, int ref_count, struct ref *fetch_map);
#endif