author | Junio C Hamano <gitster@pobox.com> | |
Mon, 13 Feb 2012 19:42:07 +0000 (11:42 -0800) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Mon, 13 Feb 2012 19:42:07 +0000 (11:42 -0800) |
* jc/branch-desc-typoavoidance:
branch --edit-description: protect against mistyped branch name
tests: add write_script helper function
branch --edit-description: protect against mistyped branch name
tests: add write_script helper function
builtin/branch.c | patch | blob | history | |
t/t3200-branch.sh | patch | blob | history | |
t/test-lib.sh | patch | blob | history |
diff --git a/builtin/branch.c b/builtin/branch.c
index 7095718c13b5c4f39186548f5ed12198a3b9e609..cb17bc367571a88b6e6bcac5020c1746c4385480 100644 (file)
--- a/builtin/branch.c
+++ b/builtin/branch.c
with_commit, argv);
else if (edit_description) {
const char *branch_name;
+ struct strbuf branch_ref = STRBUF_INIT;
+
if (detached)
die("Cannot give description to detached HEAD");
if (!argc)
branch_name = argv[0];
else
usage_with_options(builtin_branch_usage, options);
+
+ strbuf_addf(&branch_ref, "refs/heads/%s", branch_name);
+ if (!ref_exists(branch_ref.buf)) {
+ strbuf_release(&branch_ref);
+
+ if (!argc)
+ return error("No commit on branch '%s' yet.",
+ branch_name);
+ else
+ return error("No such branch '%s'.", branch_name);
+ }
+ strbuf_release(&branch_ref);
+
if (edit_branch_description(branch_name))
return 1;
} else if (rename) {
diff --git a/t/t3200-branch.sh b/t/t3200-branch.sh
index ea82424e471cd53cd08f91c77500412fa192f960..dd1acebd88070b75bbbfd07048b5a255aa00e0f3 100755 (executable)
--- a/t/t3200-branch.sh
+++ b/t/t3200-branch.sh
# Copyright (c) 2005 Amos Waterland
#
-test_description='git branch --foo should not create bogus branch
+test_description='git branch assorted tests'
-This test runs git branch --help and checks that the argument is properly
-handled. Specifically, that a bogus branch is not created.
-'
. ./test-lib.sh
test_expect_success \
'
+test_expect_success 'use --edit-description' '
+ write_script editor <<-\EOF &&
+ echo "New contents" >"$1"
+ EOF
+ EDITOR=./editor git branch --edit-description &&
+ write_script editor <<-\EOF &&
+ git stripspace -s <"$1" >"EDITOR_OUTPUT"
+ EOF
+ EDITOR=./editor git branch --edit-description &&
+ echo "New contents" >expect &&
+ test_cmp EDITOR_OUTPUT expect
+'
+
+test_expect_success 'detect typo in branch name when using --edit-description' '
+ write_script editor <<-\EOF &&
+ echo "New contents" >"$1"
+ EOF
+ (
+ EDITOR=./editor &&
+ export EDITOR &&
+ test_must_fail git branch --edit-description no-such-branch
+ )
+'
+
+test_expect_success 'refuse --edit-description on unborn branch for now' '
+ write_script editor <<-\EOF &&
+ echo "New contents" >"$1"
+ EOF
+ git checkout --orphan unborn &&
+ (
+ EDITOR=./editor &&
+ export EDITOR &&
+ test_must_fail git branch --edit-description
+ )
+'
+
test_done
diff --git a/t/test-lib.sh b/t/test-lib.sh
index a65dfc7ea93b3ec95e6ab7cd5b758029fe599d22..a089a188641f47a24e9018d852a3089aaf47d345 100644 (file)
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
git config "$@"
}
+
test_config_global () {
test_when_finished "test_unconfig --global '$1'" &&
git config --global "$@"
}
+write_script () {
+ {
+ echo "#!${2-"$SHELL_PATH"}" &&
+ cat
+ } >"$1" &&
+ chmod +x "$1"
+}
+
# Use test_set_prereq to tell that a particular prerequisite is available.
# The prerequisite can later be checked for in two ways:
#