aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sha1_name.c12
-rwxr-xr-xt/t1507-rev-parse-upstream.sh4
2 files changed, 10 insertions, 6 deletions
diff --git a/sha1_name.c b/sha1_name.c
index 03ffc2caa..c2fe1aae5 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);
diff --git a/t/t1507-rev-parse-upstream.sh b/t/t1507-rev-parse-upstream.sh
index c4981ba40..2f4f0d1c0 100755
--- a/t/t1507-rev-parse-upstream.sh
+++ b/t/t1507-rev-parse-upstream.sh
@@ -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 &&