sha1_name: refactor reinterpret()
This code essentially replaces part of ref with another ref, for example '@{-1}@{u}' is replaced with 'master@{u}', but this can be reused for other purposes other than nth prior checkouts. Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
83d16bc7be
commit
7a0a49a7ca
42
sha1_name.c
42
sha1_name.c
@ -972,6 +972,27 @@ int get_sha1_mb(const char *name, unsigned char *sha1)
|
|||||||
return st;
|
return st;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int reinterpret(const char *name, int namelen, int len, struct strbuf *buf)
|
||||||
|
{
|
||||||
|
/* we have extra data, which might need further processing */
|
||||||
|
struct strbuf tmp = STRBUF_INIT;
|
||||||
|
int used = buf->len;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
strbuf_add(buf, name + len, namelen - len);
|
||||||
|
ret = interpret_branch_name(buf->buf, &tmp);
|
||||||
|
/* that data was not interpreted, remove our cruft */
|
||||||
|
if (ret < 0) {
|
||||||
|
strbuf_setlen(buf, used);
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
strbuf_reset(buf);
|
||||||
|
strbuf_addbuf(buf, &tmp);
|
||||||
|
strbuf_release(&tmp);
|
||||||
|
/* tweak for size of {-N} versus expanded ref name */
|
||||||
|
return ret - used + len;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This reads short-hand syntax that not only evaluates to a commit
|
* This reads short-hand syntax that not only evaluates to a commit
|
||||||
* object name, but also can act as if the end user spelled the name
|
* object name, but also can act as if the end user spelled the name
|
||||||
@ -1005,25 +1026,8 @@ int interpret_branch_name(const char *name, struct strbuf *buf)
|
|||||||
return len; /* syntax Ok, not enough switches */
|
return len; /* syntax Ok, not enough switches */
|
||||||
if (0 < len && len == namelen)
|
if (0 < len && len == namelen)
|
||||||
return len; /* consumed all */
|
return len; /* consumed all */
|
||||||
else if (0 < len) {
|
else if (0 < len)
|
||||||
/* we have extra data, which might need further processing */
|
return reinterpret(name, namelen, len, buf);
|
||||||
struct strbuf tmp = STRBUF_INIT;
|
|
||||||
int used = buf->len;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
strbuf_add(buf, name + len, namelen - len);
|
|
||||||
ret = interpret_branch_name(buf->buf, &tmp);
|
|
||||||
/* that data was not interpreted, remove our cruft */
|
|
||||||
if (ret < 0) {
|
|
||||||
strbuf_setlen(buf, used);
|
|
||||||
return len;
|
|
||||||
}
|
|
||||||
strbuf_reset(buf);
|
|
||||||
strbuf_addbuf(buf, &tmp);
|
|
||||||
strbuf_release(&tmp);
|
|
||||||
/* tweak for size of {-N} versus expanded ref name */
|
|
||||||
return ret - used + len;
|
|
||||||
}
|
|
||||||
|
|
||||||
cp = strchr(name, '@');
|
cp = strchr(name, '@');
|
||||||
if (!cp)
|
if (!cp)
|
||||||
|
Reference in New Issue
Block a user