summaryrefslogtreecommitdiff
path: root/builtin
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2017-10-17 00:10:00 -0700
committerLibravatar Junio C Hamano <gitster@pobox.com>2017-10-18 06:12:01 +0900
commit7ccc94ff4590cd035b7f78dfd9debbd7e692f3e6 (patch)
treebcfd7998cec2c940276f4f8216c9fd490d6cfc19 /builtin
parentcheck-ref-format --branch: do not expand @{...} outside repository (diff)
downloadtgif-7ccc94ff4590cd035b7f78dfd9debbd7e692f3e6.tar.xz
check-ref-format --branch: strip refs/heads/ using skip_prefix
The expansion returned from strbuf_check_branch_ref always starts with "refs/heads/" by construction, but there is nothing about its name or advertised API making that obvious. This command is used to process human-supplied input from the command line and is usually not the inner loop, so we can spare some cycles to be more defensive. Instead of hard-coding the offset strlen("refs/heads/") to skip, verify that the expansion actually starts with refs/heads/. [jn: split out from a larger patch, added explanation] Signed-off-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r--builtin/check-ref-format.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/builtin/check-ref-format.c b/builtin/check-ref-format.c
index eac499450f..737e5ecba3 100644
--- a/builtin/check-ref-format.c
+++ b/builtin/check-ref-format.c
@@ -39,12 +39,14 @@ static char *collapse_slashes(const char *refname)
static int check_ref_format_branch(const char *arg)
{
struct strbuf sb = STRBUF_INIT;
+ const char *name;
int nongit;
setup_git_directory_gently(&nongit);
- if (strbuf_check_branch_ref(&sb, arg))
+ if (strbuf_check_branch_ref(&sb, arg) ||
+ !skip_prefix(sb.buf, "refs/heads/", &name))
die("'%s' is not a valid branch name", arg);
- printf("%s\n", sb.buf + 11);
+ printf("%s\n", name);
return 0;
}