From: cheng renquan Date: Fri, 08 Jun 2012 21:46:06 GMT Subject: Re: [PATCH] git fetch one tag only Message-ID: In-Reply-To: <7v8vfzjbhi.fsf@alter.siamese.dyndns.org> On Thu, Jun 7, 2012 at 10:08 AM, Junio C Hamano wrote: >  * The auto-follow kicks in whenever you tell "fetch" to update some >   refs locally.  Maybe if we tweak the rule and auto-follow kick in >   only when you tell "fetch" to update some refs outside refs/tags >   locally, > >        $ git fetch $over_there tag v1.0.0 > >   will fetch and store _only_ the v1.0.0 tag. > >   Of course, any behaviour change is a regression, and if done >   without an escape hatch, such a change robs people one useful >   feature: grab tag v1.0.0 and others older than that tag in one >   go. > > I won't be coding any of the above; just thinking aloud. Here is the code to implement your 2nd approach, and I don't think this behaviour change is a regression, because if someone is really relying this fetch one tag actually fetch all tags feature he is relying on a broken feature, and should be corrected: if one really need to fetch all tags, that's what explicit "--tags" designed and documented for diff --git a/builtin/fetch.c b/builtin/fetch.c index bb9a074..b6d7ef3 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -158,7 +158,8 @@ static struct ref *get_ref_map(struct transport *transport, if (ref_count || tags == TAGS_SET) { for (i = 0; i < ref_count; i++) { get_fetch_map(remote_refs, &refs[i], &tail, 0); - if (refs[i].dst && refs[i].dst[0]) + if (refs[i].dst && refs[i].dst[0] + && prefixcmp(refs[i].dst, "refs/tags/")) *autotags = 1; } /* Merge everything on the command line, but not --tags */ -- cheng renquan (程任全)