init: handle empty "template" parameter
If a user passes "--template=", then our template parameter is blank. Unfortunately, copy_templates() assumes it has at least one character, and does all sorts of bad things like reading from template[-1] and then proceeding to link all of '/' into the .git directory. This patch just checks for that condition in copy_templates and aborts. As a side effect, this means that --template= now has the meaning "don't copy any templates." Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
8e1db3871c
commit
172035f044
|
@ -117,6 +117,8 @@ static void copy_templates(const char *template_dir)
|
||||||
template_dir = getenv(TEMPLATE_DIR_ENVIRONMENT);
|
template_dir = getenv(TEMPLATE_DIR_ENVIRONMENT);
|
||||||
if (!template_dir)
|
if (!template_dir)
|
||||||
template_dir = system_path(DEFAULT_GIT_TEMPLATE_DIR);
|
template_dir = system_path(DEFAULT_GIT_TEMPLATE_DIR);
|
||||||
|
if (!template_dir[0])
|
||||||
|
return;
|
||||||
strcpy(template_path, template_dir);
|
strcpy(template_path, template_dir);
|
||||||
template_len = strlen(template_path);
|
template_len = strlen(template_path);
|
||||||
if (template_path[template_len-1] != '/') {
|
if (template_path[template_len-1] != '/') {
|
||||||
|
|
|
@ -141,4 +141,30 @@ test_expect_success 'reinit' '
|
||||||
test_cmp again/empty again/err2
|
test_cmp again/empty again/err2
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'init with --template' '
|
||||||
|
mkdir template-source &&
|
||||||
|
echo content >template-source/file &&
|
||||||
|
(
|
||||||
|
mkdir template-custom &&
|
||||||
|
cd template-custom &&
|
||||||
|
git init --template=../template-source
|
||||||
|
) &&
|
||||||
|
test_cmp template-source/file template-custom/.git/file
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'init with --template (blank)' '
|
||||||
|
(
|
||||||
|
mkdir template-plain &&
|
||||||
|
cd template-plain &&
|
||||||
|
git init
|
||||||
|
) &&
|
||||||
|
test -f template-plain/.git/info/exclude &&
|
||||||
|
(
|
||||||
|
mkdir template-blank &&
|
||||||
|
cd template-blank &&
|
||||||
|
git init --template=
|
||||||
|
) &&
|
||||||
|
! test -f template-blank/.git/info/exclude
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
Loading…
Reference in New Issue