init: make --template path relative to $CWD

During git-init we chdir() to the target directory, but --template is
not adjusted. So it's relative to the target directory instead of
current directory.

It would be ok if it's documented, but --template in git-init.txt
mentions nothing about this behavior. Change it to be relative to $CWD,
which is much more intuitive.

The changes in the test suite show that this relative-to-target behavior
is actually used. I just hope that it's only used in the test suite and
it's safe to change. Otherwise, the other option is just document
it (i.e. relative to target dir) and move on.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Nguyễn Thái Ngọc Duy 2019-05-10 17:46:57 +07:00 committed by Junio C Hamano
parent aeb582a983
commit e1df7fe43f
3 changed files with 7 additions and 4 deletions

View file

@ -494,6 +494,9 @@ int cmd_init_db(int argc, const char **argv, const char *prefix)
if (real_git_dir && !is_absolute_path(real_git_dir)) if (real_git_dir && !is_absolute_path(real_git_dir))
real_git_dir = real_pathdup(real_git_dir, 1); real_git_dir = real_pathdup(real_git_dir, 1);
if (template_dir && *template_dir && !is_absolute_path(template_dir))
template_dir = absolute_pathdup(template_dir);
if (argc == 1) { if (argc == 1) {
int mkdir_tried = 0; int mkdir_tried = 0;
retry: retry:

View file

@ -174,7 +174,7 @@ test_expect_success 'reinit' '
test_expect_success 'init with --template' ' test_expect_success 'init with --template' '
mkdir template-source && mkdir template-source &&
echo content >template-source/file && echo content >template-source/file &&
git init --template=../template-source template-custom && git init --template=template-source template-custom &&
test_cmp template-source/file template-custom/.git/file test_cmp template-source/file template-custom/.git/file
' '

View file

@ -136,7 +136,7 @@ test_expect_success POSIXPERM 'forced modes' '
( (
cd new && cd new &&
umask 002 && umask 002 &&
git init --shared=0660 --template=../templates && git init --shared=0660 --template=templates &&
>frotz && >frotz &&
git add frotz && git add frotz &&
git commit -a -m initial && git commit -a -m initial &&
@ -192,7 +192,7 @@ test_expect_success POSIXPERM 're-init respects core.sharedrepository (remote)'
umask 0022 && umask 0022 &&
git init --bare --shared=0666 child.git && git init --bare --shared=0666 child.git &&
test_path_is_missing child.git/foo && test_path_is_missing child.git/foo &&
git init --bare --template=../templates child.git && git init --bare --template=templates child.git &&
echo "-rw-rw-rw-" >expect && echo "-rw-rw-rw-" >expect &&
test_modebits child.git/foo >actual && test_modebits child.git/foo >actual &&
test_cmp expect actual test_cmp expect actual
@ -203,7 +203,7 @@ test_expect_success POSIXPERM 'template can set core.sharedrepository' '
umask 0022 && umask 0022 &&
git config core.sharedrepository 0666 && git config core.sharedrepository 0666 &&
cp .git/config templates/config && cp .git/config templates/config &&
git init --bare --template=../templates child.git && git init --bare --template=templates child.git &&
echo "-rw-rw-rw-" >expect && echo "-rw-rw-rw-" >expect &&
test_modebits child.git/HEAD >actual && test_modebits child.git/HEAD >actual &&
test_cmp expect actual test_cmp expect actual