提交 8eb865ba 编写于 作者: J Junio C Hamano

Merge branch 'jc/branch-desc-typoavoidance' into maint

* jc/branch-desc-typoavoidance:
  branch --edit-description: protect against mistyped branch name
  tests: add write_script helper function
...@@ -768,6 +768,8 @@ int cmd_branch(int argc, const char **argv, const char *prefix) ...@@ -768,6 +768,8 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
with_commit, argv); with_commit, argv);
else if (edit_description) { else if (edit_description) {
const char *branch_name; const char *branch_name;
struct strbuf branch_ref = STRBUF_INIT;
if (detached) if (detached)
die("Cannot give description to detached HEAD"); die("Cannot give description to detached HEAD");
if (!argc) if (!argc)
...@@ -776,6 +778,19 @@ int cmd_branch(int argc, const char **argv, const char *prefix) ...@@ -776,6 +778,19 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
branch_name = argv[0]; branch_name = argv[0];
else else
usage_with_options(builtin_branch_usage, options); 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)) if (edit_branch_description(branch_name))
return 1; return 1;
} else if (rename) { } else if (rename) {
......
...@@ -3,11 +3,8 @@ ...@@ -3,11 +3,8 @@
# Copyright (c) 2005 Amos Waterland # 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-lib.sh
test_expect_success \ test_expect_success \
...@@ -620,4 +617,40 @@ test_expect_success 'use set-upstream on the current branch' ' ...@@ -620,4 +617,40 @@ test_expect_success 'use set-upstream on the current branch' '
' '
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 test_done
...@@ -381,11 +381,20 @@ test_config () { ...@@ -381,11 +381,20 @@ test_config () {
git config "$@" git config "$@"
} }
test_config_global () { test_config_global () {
test_when_finished "test_unconfig --global '$1'" && test_when_finished "test_unconfig --global '$1'" &&
git config --global "$@" 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. # Use test_set_prereq to tell that a particular prerequisite is available.
# The prerequisite can later be checked for in two ways: # The prerequisite can later be checked for in two ways:
# #
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册