peel_onion: disambiguate to favor tree-ish when we know we want a tree-ish
authorJunio C Hamano <gitster@pobox.com>
Sun, 31 Mar 2013 22:19:52 +0000 (15:19 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sun, 31 Mar 2013 22:19:52 +0000 (15:19 -0700)
The function already knows when interpreting $foo^{commit} to tell
the underlying get_sha1_1() to expect a commit-ish while evaluating
$foo. Teach it to do the same when asked for $foo^{tree}; we are
expecting a tree-ish and $foo should be disambiguated in favor of a
tree-ish, discarding a possible ambiguous match with a blob object.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
sha1_name.c
index c50630a3ea793e0cfd2510b8813129a1685428f4..45788df8bfb79d48c19ef6e1092a4785c6ce525e 100644 (file)
@@ -654,6 +654,8 @@ static int peel_onion(const char *name, int len, unsigned char *sha1)
 
        if (expected_type == OBJ_COMMIT)
                lookup_flags = GET_SHA1_COMMITTISH;
+       else if (expected_type == OBJ_TREE)
+               lookup_flags = GET_SHA1_TREEISH;
 
        if (get_sha1_1(name, sp - name - 2, outer, lookup_flags))
                return -1;