From: "Rubén Justo" <rjusto@gmail.com>
To: git@vger.kernel.org
Subject: [PATCH v2] branch: description for non-existent branch errors
Date: Sat, 1 Oct 2022 00:47:30 +0200 [thread overview]
Message-ID: <930ff836-a5c4-0e85-517d-39645f00cd31@gmail.com> (raw)
In-Reply-To: <c333cc4b-12a1-82b6-0961-1c42080dad15@gmail.com>
When the repository does not yet have commits, some errors describe that
there is no branch:
$ git init -b first
$ git branch --edit-description first
error: No branch named 'first'.
$ git branch --set-upstream-to=upstream
fatal: branch 'first' does not exist
$ git branch -c second
error: refname refs/heads/first not found
fatal: Branch copy failed
That "first" branch is unborn but to say it doesn't exists is confusing.
Options "-c" (copy) and "-m" (rename) show the same error when the
origin branch doesn't exists:
$ git branch -c non-existent-branch second
error: refname refs/heads/non-existent-branch not found
fatal: Branch copy failed
$ git branch -m non-existent-branch second
error: refname refs/heads/non-existent-branch not found
fatal: Branch rename failed
Note that "--edit-description" without an explicit argument is already
considering the _empty repository_ circumstance in its error. Also note
that "-m" on the initial branch it is an allowed operation.
This commit makes the error descriptions for those branch operations
with unborn or non-existent branches, more informative.
This is the result of the change:
$ git init -b first
$ git branch --edit-description first
error: No commit on branch 'first' yet.
$ git branch --set-upstream-to=upstream
fatal: No commit on branch 'first' yet.
$ git branch -c second
fatal: No commit on branch 'first' yet.
$ git branch [-c/-m] non-existent-branch second
fatal: No branch named 'non-existent-branch'.
Signed-off-by: Rubén Justo <rjusto@gmail.com>
---
Changes since V1:
* Fixed the message, non precise descriptions.
* Error renaming non-existent branch was not correct.
* Tests for the new errors.
Range-diff:
1: bba7096c4b ! 1: 096c443a29 branch: description for non-existent branch errors
@@ Metadata
## Commit message ##
branch: description for non-existent branch errors
- When the repository does not yet has commits, some errors describe that
+ When the repository does not yet have commits, some errors describe that
there is no branch:
$ git init -b first
- $ git --edit-description first
- fatal: branch 'first' does not exist
+ $ git branch --edit-description first
+ error: No branch named 'first'.
- $ git --set-upstream-to=upstream
+ $ git branch --set-upstream-to=upstream
fatal: branch 'first' does not exist
$ git branch -c second
@@ Commit message
$ git init -b first
- $ git --edit-description first
- fatal: No commit on branch 'first' yet.
+ $ git branch --edit-description first
+ error: No commit on branch 'first' yet.
- $ git --set-upstream-to=upstream
+ $ git branch --set-upstream-to=upstream
fatal: No commit on branch 'first' yet.
- $ git -c second
+ $ git branch -c second
fatal: No commit on branch 'first' yet.
- $ git [-c/-m] non-existent-branch second
+ $ git branch [-c/-m] non-existent-branch second
fatal: No branch named 'non-existent-branch'.
Signed-off-by: Rubén Justo <rjusto@gmail.com>
@@ builtin/branch.c: static void copy_or_rename_branch(const char *oldname, const c
die(_("Invalid branch name: '%s'"), oldname);
}
-+ if (copy && !ref_exists(oldref.buf)) {
-+ if (!strcmp(head, oldname))
++ if ((copy || strcmp(head, oldname)) && !ref_exists(oldref.buf)) {
++ if (copy && !strcmp(head, oldname))
+ die(_("No commit on branch '%s' yet."), oldname);
+ else
+ die(_("No branch named '%s'."), oldname);
@@ builtin/branch.c: int cmd_branch(int argc, const char **argv, const char *prefix
dwim_and_setup_tracking(the_repository, branch->name,
new_upstream, BRANCH_TRACK_OVERRIDE,
+
+ ## t/t3202-show-branch.sh ##
+@@ t/t3202-show-branch.sh: test_description='test show-branch'
+ # arbitrary reference time: 2009-08-30 19:20:00
+ GIT_TEST_DATE_NOW=1251660000; export GIT_TEST_DATE_NOW
+
++test_expect_success 'error descriptions on empty repository' '
++ current=$(git branch --show-current) &&
++ cat >expect <<-EOF &&
++ error: No commit on branch '\''$current'\'' yet.
++ EOF
++ test_must_fail git branch --edit-description 2>actual &&
++ test_cmp expect actual &&
++ test_must_fail git branch --edit-description $current 2>actual &&
++ test_cmp expect actual
++'
++
++test_expect_success 'fatal descriptions on empty repository' '
++ current=$(git branch --show-current) &&
++ cat >expect <<-EOF &&
++ fatal: No commit on branch '\''$current'\'' yet.
++ EOF
++ test_must_fail git branch --set-upstream-to=non-existent 2>actual &&
++ test_cmp expect actual &&
++ test_must_fail git branch -c new-branch 2>actual &&
++ test_cmp expect actual
++'
++
+ test_expect_success 'setup' '
+ test_commit initial &&
+ for i in $(test_seq 1 10)
+@@ t/t3202-show-branch.sh: done <<\EOF
+ --reflog --current
+ EOF
+
++test_expect_success 'error descriptions on non-existent branch' '
++ cat >expect <<-EOF &&
++ error: No branch named '\''non-existent'\'.'
++ EOF
++ test_must_fail git branch --edit-description non-existent 2>actual &&
++ test_cmp expect actual
++'
++
++test_expect_success 'fatal descriptions on non-existent branch' '
++ cat >expect <<-EOF &&
++ fatal: branch '\''non-existent'\'' does not exist
++ EOF
++ test_must_fail git branch --set-upstream-to=non-existent non-existent 2>actual &&
++ test_cmp expect actual &&
++
++ cat >expect <<-EOF &&
++ fatal: No branch named '\''non-existent'\''.
++ EOF
++ test_must_fail git branch -c non-existent new-branch 2>actual &&
++ test_cmp expect actual &&
++ test_must_fail git branch -m non-existent new-branch 2>actual &&
++ test_cmp expect actual
++'
++
+ test_done
builtin/branch.c | 14 +++++++++++--
t/t3202-show-branch.sh | 46 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 58 insertions(+), 2 deletions(-)
diff --git a/builtin/branch.c b/builtin/branch.c
index 55cd9a6e99..499ebec99e 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -538,6 +538,13 @@ static void copy_or_rename_branch(const char *oldname, const char *newname, int
die(_("Invalid branch name: '%s'"), oldname);
}
+ if ((copy || strcmp(head, oldname)) && !ref_exists(oldref.buf)) {
+ if (copy && !strcmp(head, oldname))
+ die(_("No commit on branch '%s' yet."), oldname);
+ else
+ die(_("No branch named '%s'."), oldname);
+ }
+
/*
* A command like "git branch -M currentbranch currentbranch" cannot
* cause the worktree to become inconsistent with HEAD, so allow it.
@@ -805,7 +812,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
if (!ref_exists(branch_ref.buf)) {
strbuf_release(&branch_ref);
- if (!argc)
+ if (!argc || !strcmp(head, branch_name))
return error(_("No commit on branch '%s' yet."),
branch_name);
else
@@ -848,8 +855,11 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
die(_("no such branch '%s'"), argv[0]);
}
- if (!ref_exists(branch->refname))
+ if (!ref_exists(branch->refname)) {
+ if (!argc || !strcmp(head, branch->name))
+ die(_("No commit on branch '%s' yet."), branch->name);
die(_("branch '%s' does not exist"), branch->name);
+ }
dwim_and_setup_tracking(the_repository, branch->name,
new_upstream, BRANCH_TRACK_OVERRIDE,
diff --git a/t/t3202-show-branch.sh b/t/t3202-show-branch.sh
index f2b9199007..ea7cfd1951 100755
--- a/t/t3202-show-branch.sh
+++ b/t/t3202-show-branch.sh
@@ -7,6 +7,28 @@ test_description='test show-branch'
# arbitrary reference time: 2009-08-30 19:20:00
GIT_TEST_DATE_NOW=1251660000; export GIT_TEST_DATE_NOW
+test_expect_success 'error descriptions on empty repository' '
+ current=$(git branch --show-current) &&
+ cat >expect <<-EOF &&
+ error: No commit on branch '\''$current'\'' yet.
+ EOF
+ test_must_fail git branch --edit-description 2>actual &&
+ test_cmp expect actual &&
+ test_must_fail git branch --edit-description $current 2>actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'fatal descriptions on empty repository' '
+ current=$(git branch --show-current) &&
+ cat >expect <<-EOF &&
+ fatal: No commit on branch '\''$current'\'' yet.
+ EOF
+ test_must_fail git branch --set-upstream-to=non-existent 2>actual &&
+ test_cmp expect actual &&
+ test_must_fail git branch -c new-branch 2>actual &&
+ test_cmp expect actual
+'
+
test_expect_success 'setup' '
test_commit initial &&
for i in $(test_seq 1 10)
@@ -175,4 +197,28 @@ done <<\EOF
--reflog --current
EOF
+test_expect_success 'error descriptions on non-existent branch' '
+ cat >expect <<-EOF &&
+ error: No branch named '\''non-existent'\'.'
+ EOF
+ test_must_fail git branch --edit-description non-existent 2>actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'fatal descriptions on non-existent branch' '
+ cat >expect <<-EOF &&
+ fatal: branch '\''non-existent'\'' does not exist
+ EOF
+ test_must_fail git branch --set-upstream-to=non-existent non-existent 2>actual &&
+ test_cmp expect actual &&
+
+ cat >expect <<-EOF &&
+ fatal: No branch named '\''non-existent'\''.
+ EOF
+ test_must_fail git branch -c non-existent new-branch 2>actual &&
+ test_cmp expect actual &&
+ test_must_fail git branch -m non-existent new-branch 2>actual &&
+ test_cmp expect actual
+'
+
test_done
--
2.36.1
next prev parent reply other threads:[~2022-09-30 22:47 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-22 22:37 [PATCH] branch: description for non-existent branch errors Rubén Justo
2022-09-24 22:52 ` Rubén Justo
2022-09-26 18:12 ` Junio C Hamano
2022-09-26 23:35 ` Rubén Justo
2022-09-27 22:24 ` Junio C Hamano
2022-09-28 17:41 ` Junio C Hamano
2022-09-28 17:50 ` Junio C Hamano
2022-09-28 23:59 ` Rubén Justo
2022-09-29 1:56 ` Junio C Hamano
2022-09-30 22:47 ` Rubén Justo [this message]
2022-10-01 12:43 ` [PATCH v2] " Bagas Sanjaya
2022-10-02 21:28 ` Rubén Justo
2022-10-08 0:39 ` [PATCH v3] " Rubén Justo
2022-10-08 3:27 ` Eric Sunshine
2022-10-08 8:54 ` Rubén Justo
2022-10-09 5:05 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=930ff836-a5c4-0e85-517d-39645f00cd31@gmail.com \
--to=rjusto@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.