Re: [PATCH v2] for-each-ref: `:short` format for `refname`
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Sep 2, 2008, 23:10 UTC
- Message-ID
- <7v63pei1pz.fsf@gitster.siamese.dyndns.org>
- In-Reply-To
- <1220392637-24978-1-git-send-email-bert.wesarg@googlemail.com>
Bert Wesarg <bert.wesarg@googlemail.com> writes:
> Tries to shorten the refname to a non-ambiguous name. > I.e. the full and the short refname points to the same object.
The definition of "ambiguity" here is wrong (see below).
Show 12 quoted lines
> + /* skip first rule, will always match */
> + for (i = 0; i < nr_rules - 1; i++) {
> + const char **p;
> + int short_name_len;
> +
> + if (1 != sscanf(ref->refname, scanf_fmts[nr_rules - 1 - i],
> + short_name))
> + continue;
> +
> + short_name_len = strlen(short_name);
> +
> + /* check if full and short point to the same objectStyle?
> + * by checking all rules in forward direction > + */
I think this part of the code is wrong, in that it talks about what object the ref points at. That is not what ref ambiguity is about.
Given a tag that points at a version 1.0.0 commit, this sequence will create:
$ git tag foo v1.0.0^0
$ git branch foo v1.0.0^0ambiguous branch and tag whose names are both 'foo', even though they point at the same thing. The right API to use would be resolve_ref(), I think.
Other than that, it is well done.
Although I was initially a bit surprised by the size of the patch to implement something so (conceptually) simple, the code was easy and straightforward to follow.
Thanks.