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/* when looking for stale refs to prevent this from happening. Signed-off-by: Dennis Kaarsemaker <dennis@xxxxxxxxxxxxxxx> --- remote.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/remote.c b/remote.c index e71f66d..863c183 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 ignore_remotes; }; static int get_stale_heads_cb(const char *refname, @@ -1903,7 +1904,8 @@ static int get_stale_heads_cb(const char *refname, * remote we consider it to be stale. */ if (!((flags & REF_ISSYMREF) || - string_list_has_string(info->ref_names, query.src))) { + string_list_has_string(info->ref_names, query.src) || + (info->ignore_remotes && !prefixcmp(refname, "refs/remotes/")))) { struct ref *ref = make_linked_ref(refname, &info->stale_refs_tail); hashcpy(ref->new_sha1, sha1); } @@ -1917,6 +1919,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.ignore_remotes = 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