summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 42cab60)
raw | patch | inline | side by side (parent: 42cab60)
author | Jeff King <peff@peff.net> | |
Thu, 28 Jan 2010 09:52:22 +0000 (04:52 -0500) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Thu, 28 Jan 2010 20:12:42 +0000 (12:12 -0800) |
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>
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>
sha1_name.c | patch | blob | history | |
t/t1508-at-combinations.sh | patch | blob | history |
diff --git a/sha1_name.c b/sha1_name.c
index c7f1510ef102512f1270a064fbb7a842b1d9aed9..00fc4151780a4e66b70a78ac30d4798ad69b976e 100644 (file)
--- a/sha1_name.c
+++ b/sha1_name.c
if (!len)
return len; /* syntax Ok, not enough switches */
- if (0 < len)
- return len; /* consumed from the front */
+ if (0 < len && len == namelen)
+ 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, '@');
if (!cp)
return -1;
index 59f04636f20e0f513cfcb5e4f1f867010856f3f5..2a46af24d6ae76dd057a88960a815c53b526d1b8 100755 (executable)
check "@{-1}@{1}" old-one
check "@{u}" upstream-two
check "@{u}@{1}" upstream-one
-fail check "@{-1}@{u}" master-two
-fail check "@{-1}@{u}@{1}" master-one
+check "@{-1}@{u}" master-two
+check "@{-1}@{u}@{1}" master-one
fail nonsense "@{u}@{-1}"
nonsense "@{1}@{u}"