Provide branch name in error message when using @{u}
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 14 Apr 2012 07:54:32 +0000 (09:54 +0200)
committerJunio C Hamano <gitster@pobox.com>
Sun, 15 Apr 2012 21:24:36 +0000 (14:24 -0700)
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>
sha1_name.c
t/t1507-rev-parse-upstream.sh

index 03ffc2caaa6524a3361bc47a89e101ced2f0e987..c2fe1aae523cd077000a333febcbb1ce4be27c77 100644 (file)
@@ -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);
index c4981ba4074074eb648878571d19a1b1e121bbe1..2f4f0d1c02953756d58ec7ca996fd8f23ad0b6f7 100755 (executable)
@@ -134,7 +134,7 @@ test_expect_success 'branch@{u} error message when no upstream' '
 
 test_expect_success '@{u} error message when no upstream' '
        cat >expect <<-EOF &&
-       error: No upstream branch found for ${sq}${sq}
+       error: No upstream branch found for ${sq}master${sq}
        fatal: Needed a single revision
        EOF
        test_must_fail git rev-parse --verify @{u} 2>actual &&
@@ -152,7 +152,7 @@ test_expect_success 'branch@{u} error message with misspelt branch' '
 
 test_expect_success '@{u} error message when not on a branch' '
        cat >expect <<-EOF &&
-       error: No upstream branch found for ${sq}${sq}
+       error: HEAD does not point to a branch
        fatal: Needed a single revision
        EOF
        git checkout HEAD^0 &&