Be more specific if upstream branch is not tracked
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 14 Apr 2012 07:54:34 +0000 (09:54 +0200)
committerJunio C Hamano <gitster@pobox.com>
Sun, 15 Apr 2012 21:25:34 +0000 (14:25 -0700)
If the branch configured as upstream didn't have a local tracking
branch, git said "Upstream branch not found". We can be more helpful,
and separate the cases when upstream is not configured, and when it is
configured, but the upstream branch is not tracked in a local branch.

The following configuration leads to the second scenario:

    [remote "origin"]
         url = ...
            fetch = refs/heads/master
    [branch "master"]
            remote = origin
            merge = refs/heads/master

'git pull' will work on master, but master@{upstream} is not defined.

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 e2d576ad7b86f967e4986dd7792e8d6e18a80350..361708b7bb229ff53eb166b9cefc220fe0eedcc5 100644 (file)
@@ -865,7 +865,12 @@ int interpret_branch_name(const char *name, struct strbuf *buf)
        if (!upstream->merge || !upstream->merge[0]->dst) {
                if (!ref_exists(upstream->refname))
                        return error("No such branch: '%s'", cp);
-               return error("No upstream branch found for '%s'", upstream->name);
+               if (!upstream->merge)
+                       return error("No upstream configured for branch '%s'",
+                                    upstream->name);
+               return error(
+                       "Upstream branch '%s' not stored as a remote-tracking branch",
+                       upstream->merge[0]->src);
        }
        free(cp);
        cp = shorten_unambiguous_ref(upstream->merge[0]->dst, 0);
index 2b8ba314a99d70fa2c69a8bc16692699319e7d5f..e742ce03322b6e3638147538cc0d1bc9b3a44ba2 100755 (executable)
@@ -125,7 +125,7 @@ test_expect_success 'branch@{u} works when tracking a local branch' '
 
 test_expect_success 'branch@{u} error message when no upstream' '
        cat >expect <<-EOF &&
-       error: No upstream branch found for ${sq}non-tracking${sq}
+       error: No upstream configured for branch ${sq}non-tracking${sq}
        fatal: Needed a single revision
        EOF
        error_message non-tracking@{u} 2>actual &&
@@ -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}master${sq}
+       error: No upstream configured for branch ${sq}master${sq}
        fatal: Needed a single revision
        EOF
        test_must_fail git rev-parse --verify @{u} 2>actual &&
@@ -162,7 +162,7 @@ test_expect_success '@{u} error message when not on a branch' '
 
 test_expect_success 'branch@{u} error message if upstream branch not fetched' '
        cat >expect <<-EOF &&
-       error: No upstream branch found for ${sq}bad-upstream${sq}
+       error: Upstream branch ${sq}refs/heads/side${sq} not stored as a remote-tracking branch
        fatal: Needed a single revision
        EOF
        error_message bad-upstream@{u} 2>actual &&