зеркало из https://github.com/microsoft/git.git
fix parsing of @{-1}@{u} combination
Previously interpret_branch_name would see @{-1} and stop parsing, leaving the @{u} as cruft that provoked an error. Instead, we should recurse if there is more to parse. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
42cab601cf
Коммит
d46a830193
24
sha1_name.c
24
sha1_name.c
|
@ -881,8 +881,28 @@ int interpret_branch_name(const char *name, struct strbuf *buf)
|
||||||
|
|
||||||
if (!len)
|
if (!len)
|
||||||
return len; /* syntax Ok, not enough switches */
|
return len; /* syntax Ok, not enough switches */
|
||||||
if (0 < len)
|
if (0 < len && len == namelen)
|
||||||
return len; /* consumed from the front */
|
return len; /* consumed all */
|
||||||
|
else if (0 < len) {
|
||||||
|
/* 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;
|
||||||
|
}
|
||||||
|
|
||||||
cp = strchr(name, '@');
|
cp = strchr(name, '@');
|
||||||
if (!cp)
|
if (!cp)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -43,8 +43,8 @@ check "@{-1}" old-two
|
||||||
check "@{-1}@{1}" old-one
|
check "@{-1}@{1}" old-one
|
||||||
check "@{u}" upstream-two
|
check "@{u}" upstream-two
|
||||||
check "@{u}@{1}" upstream-one
|
check "@{u}@{1}" upstream-one
|
||||||
fail check "@{-1}@{u}" master-two
|
check "@{-1}@{u}" master-two
|
||||||
fail check "@{-1}@{u}@{1}" master-one
|
check "@{-1}@{u}@{1}" master-one
|
||||||
fail nonsense "@{u}@{-1}"
|
fail nonsense "@{u}@{-1}"
|
||||||
nonsense "@{1}@{u}"
|
nonsense "@{1}@{u}"
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче