On Thu, Aug 6, 2009 at 1:34 PM, Shawn O. Pearce<spearce@spearce.org> wrote:
Show 31 quoted lines
> Tim Harper <timcharper@gmail.com> wrote:
>> 610 int parse_opt_with_commit(const struct option *opt, const char
>> *arg, int unset)
>> 611 {
>> 612 unsigned char sha1[20];
>> 613 struct commit *commit;
>> 614
>> 615 if (!arg)
>> 616 return -1;
>> 617 if (get_sha1(arg, sha1))
>> 618 return error("malformed object name %s", arg);
>> 619 commit = lookup_commit_reference(sha1);
>> 620 if (!commit)
>> 621 return error("no such commit %s", arg);
>> 622 commit_list_insert(commit, opt->value);
>> 623 return 0;
>> 624 }
>>
>> It appears the get_sha1 call is returning true, causing the 'malformed
>> object name' error to be returned. However, it seems that ideally
>> since efabdfb is not malformed (it would be a valid ref if it
>> existed), the execution path should continue to line 619, receive no
>> commit, and fail on 621.
>
> get_sha1 is responsible for expanding an abbreviated ID to the
> full ID. If it can't do the expansion, it errors out. The code
> is correct as-is, though the error message on 618 is a bit odd.
>
> --
> Shawn.
>ok, that makes more sense. I notice if I pass a full, mutated 40-character sha1 commit, I get the error message I expect.