sha1_name.c: understand "describe" output as a valid object name
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
e49521b56d
commit
7dd45e15c2
26
sha1_name.c
26
sha1_name.c
@ -431,6 +431,26 @@ static int peel_onion(const char *name, int len, unsigned char *sha1)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int get_describe_name(const char *name, int len, unsigned char *sha1)
|
||||||
|
{
|
||||||
|
const char *cp;
|
||||||
|
|
||||||
|
for (cp = name + len - 1; name + 2 <= cp; cp--) {
|
||||||
|
char ch = *cp;
|
||||||
|
if (hexval(ch) & ~0377) {
|
||||||
|
/* We must be looking at g in "SOMETHING-g"
|
||||||
|
* for it to be describe output.
|
||||||
|
*/
|
||||||
|
if (ch == 'g' && cp[-1] == '-') {
|
||||||
|
cp++;
|
||||||
|
len -= cp - name;
|
||||||
|
return get_short_sha1(cp, len, sha1, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
static int get_sha1_1(const char *name, int len, unsigned char *sha1)
|
static int get_sha1_1(const char *name, int len, unsigned char *sha1)
|
||||||
{
|
{
|
||||||
int ret, has_suffix;
|
int ret, has_suffix;
|
||||||
@ -472,6 +492,12 @@ static int get_sha1_1(const char *name, int len, unsigned char *sha1)
|
|||||||
ret = get_sha1_basic(name, len, sha1);
|
ret = get_sha1_basic(name, len, sha1);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
/* It could be describe output that is "SOMETHING-gXXXX" */
|
||||||
|
ret = get_describe_name(name, len, sha1);
|
||||||
|
if (!ret)
|
||||||
|
return 0;
|
||||||
|
|
||||||
return get_short_sha1(name, len, sha1, 0);
|
return get_short_sha1(name, len, sha1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user