When cloning a repo with --mirror, and adding more remotes later, get_stale_heads for origin would mark all refs from other repos as stale. In this situation, with refs-src and refs->dst both equal to refs/*, we should ignore refs/remotes/* and refs/tags/* when looking for stale refs to prevent this from happening. Signed-off-by: Dennis Kaarsemaker <dennis@xxxxxxxxxxxxxxx> --- The previous attempt only ignored refs/remotes, but that's not good enough as that will still delete tags. So let's ignore refs/tags too. The downside is that tags removed at the origin don't get removed, but prune should only be pruning branches anyway if I read the documentation correctly. remote.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/remote.c b/remote.c index e71f66d..efc5481 100644 --- a/remote.c +++ b/remote.c @@ -1884,6 +1884,7 @@ struct stale_heads_info { struct ref **stale_refs_tail; struct refspec *refs; int ref_count; + int is_mirror; }; static int get_stale_heads_cb(const char *refname, @@ -1896,6 +1897,13 @@ static int get_stale_heads_cb(const char *refname, if (query_refspecs(info->refs, info->ref_count, &query)) return 0; /* No matches */ + /* + * If we're pruning a clone that was --mirror'ed, let's ignore refs/tags + * and refs/remotes + */ + if (info->is_mirror && (!prefixcmp(refname, "refs/tags/") || + !prefixcmp(refname, "refs/remotes/"))) + return 0; /* * If we did find a suitable refspec and it's not a symref and @@ -1917,6 +1925,8 @@ struct ref *get_stale_heads(struct refspec *refs, int ref_count, struct ref *fet struct ref *ref, *stale_refs = NULL; struct string_list ref_names = STRING_LIST_INIT_NODUP; struct stale_heads_info info; + if(!strcmp(refs->src, "refs/*") && !strcmp(refs->dst, "refs/*")) + info.is_mirror = 1; info.ref_names = &ref_names; info.stale_refs_tail = &stale_refs; info.refs = refs; -- 1.8.3.1-619-gbec0aa7 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html