summaryrefslogtreecommitdiff
path: root/sha1_name.c
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2012-04-14 09:54:32 +0200
committerJunio C Hamano <gitster@pobox.com>2012-04-15 14:24:36 -0700
commit9884e67f9d9b511592b981572cfbb30cc50aec61 (patch)
tree7d64b938cec139eadc25cd8bbf51b857d6fceec3 /sha1_name.c
parent1b4aee94aaffd5e6fdf3020434b3fa6f0c5cfb2b (diff)
downloadgit-9884e67f9d9b511592b981572cfbb30cc50aec61.tar.gz
Provide branch name in error message when using @{u}
When using @{u} or @{upstream} it is common to omit the branch name, implying current branch. If the upstream is not configured, the error message was "No upstream branch found for ''". When resolving '@{u}', branch_get() is called, which almost always returns a description of a branch. This allows us to use a branch name in the error message, even if the user said something like '@{u}'. The only case when branch_get() returns NULL is when HEAD points to so something which is not a branch. Of course this also means that no upstream is configured, but it is better to directly say that HEAD does not point to a branch. Signed-off-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'sha1_name.c')
-rw-r--r--sha1_name.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/sha1_name.c b/sha1_name.c
index 03ffc2caaa..c2fe1aae52 100644
--- a/sha1_name.c
+++ b/sha1_name.c
@@ -856,10 +856,14 @@ int interpret_branch_name(const char *name, struct strbuf *buf)
len = cp + tmp_len - name;
cp = xstrndup(name, cp - name);
upstream = branch_get(*cp ? cp : NULL);
- if (!upstream
- || !upstream->merge
- || !upstream->merge[0]->dst)
- return error("No upstream branch found for '%s'", cp);
+ /*
+ * Upstream can be NULL only if cp refers to HEAD and HEAD
+ * points to something different than a branch.
+ */
+ if (!upstream)
+ return error("HEAD does not point to a branch");
+ if (!upstream->merge || !upstream->merge[0]->dst)
+ return error("No upstream branch found for '%s'", upstream->name);
free(cp);
cp = shorten_unambiguous_ref(upstream->merge[0]->dst, 0);
strbuf_reset(buf);