mirror of
https://github.com/git/git
synced 2024-09-29 21:27:13 +00:00
Merge branch 'ps/fix-reinit-includeif-onbranch'
"git init" in an already created directory, when the user configuration has includeif.onbranch, started to fail recently, which has been corrected. * ps/fix-reinit-includeif-onbranch: setup: fix bug with "includeIf.onbranch" when initializing dir
This commit is contained in:
commit
5c7c063c1f
21
setup.c
21
setup.c
|
@ -2342,12 +2342,6 @@ int init_db(const char *git_dir, const char *real_git_dir,
|
|||
}
|
||||
startup_info->have_repository = 1;
|
||||
|
||||
/* Ensure `core.hidedotfiles` is processed */
|
||||
git_config(platform_core_config, NULL);
|
||||
|
||||
safe_create_dir(git_dir, 0);
|
||||
|
||||
|
||||
/* Check to see if the repository version is right.
|
||||
* Note that a newly created repository does not have
|
||||
* config file, so this will not fail. What we are catching
|
||||
|
@ -2358,9 +2352,6 @@ int init_db(const char *git_dir, const char *real_git_dir,
|
|||
validate_hash_algorithm(&repo_fmt, hash);
|
||||
validate_ref_storage_format(&repo_fmt, ref_storage_format);
|
||||
|
||||
reinit = create_default_files(template_dir, original_git_dir,
|
||||
&repo_fmt, init_shared_repository);
|
||||
|
||||
/*
|
||||
* Now that we have set up both the hash algorithm and the ref storage
|
||||
* format we can update the repository's settings accordingly.
|
||||
|
@ -2368,6 +2359,18 @@ int init_db(const char *git_dir, const char *real_git_dir,
|
|||
repo_set_hash_algo(the_repository, repo_fmt.hash_algo);
|
||||
repo_set_ref_storage_format(the_repository, repo_fmt.ref_storage_format);
|
||||
|
||||
/*
|
||||
* Ensure `core.hidedotfiles` is processed. This must happen after we
|
||||
* have set up the repository format such that we can evaluate
|
||||
* includeIf conditions correctly in the case of re-initialization.
|
||||
*/
|
||||
git_config(platform_core_config, NULL);
|
||||
|
||||
safe_create_dir(git_dir, 0);
|
||||
|
||||
reinit = create_default_files(template_dir, original_git_dir,
|
||||
&repo_fmt, init_shared_repository);
|
||||
|
||||
if (!(flags & INIT_DB_SKIP_REFDB))
|
||||
create_reference_database(repo_fmt.ref_storage_format,
|
||||
initial_branch, flags & INIT_DB_QUIET);
|
||||
|
|
101
t/t0001-init.sh
101
t/t0001-init.sh
|
@ -584,14 +584,39 @@ test_expect_success 'init with --ref-format=files' '
|
|||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 're-init with same format' '
|
||||
test_when_finished "rm -rf refformat" &&
|
||||
git init --ref-format=files refformat &&
|
||||
git init --ref-format=files refformat &&
|
||||
echo files >expect &&
|
||||
git -C refformat rev-parse --show-ref-format >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
backends="files reftable"
|
||||
for from_format in $backends
|
||||
do
|
||||
test_expect_success "re-init with same format ($from_format)" '
|
||||
test_when_finished "rm -rf refformat" &&
|
||||
git init --ref-format=$from_format refformat &&
|
||||
git init --ref-format=$from_format refformat &&
|
||||
echo $from_format >expect &&
|
||||
git -C refformat rev-parse --show-ref-format >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
for to_format in $backends
|
||||
do
|
||||
if test "$from_format" = "$to_format"
|
||||
then
|
||||
continue
|
||||
fi
|
||||
|
||||
test_expect_success "re-init with different format fails ($from_format -> $to_format)" '
|
||||
test_when_finished "rm -rf refformat" &&
|
||||
git init --ref-format=$from_format refformat &&
|
||||
cat >expect <<-EOF &&
|
||||
fatal: attempt to reinitialize repository with different reference storage format
|
||||
EOF
|
||||
test_must_fail git init --ref-format=$to_format refformat 2>err &&
|
||||
test_cmp expect err &&
|
||||
echo $from_format >expect &&
|
||||
git -C refformat rev-parse --show-ref-format >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
done
|
||||
done
|
||||
|
||||
test_expect_success 'init with --ref-format=garbage' '
|
||||
test_when_finished "rm -rf refformat" &&
|
||||
|
@ -678,4 +703,64 @@ test_expect_success 'branch -m with the initial branch' '
|
|||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'init with includeIf.onbranch condition' '
|
||||
test_when_finished "rm -rf repo" &&
|
||||
git -c includeIf.onbranch:main.path=nonexistent init repo &&
|
||||
echo $GIT_DEFAULT_REF_FORMAT >expect &&
|
||||
git -C repo rev-parse --show-ref-format >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'init with includeIf.onbranch condition with existing directory' '
|
||||
test_when_finished "rm -rf repo" &&
|
||||
mkdir repo &&
|
||||
git -c includeIf.onbranch:nonexistent.path=/does/not/exist init repo &&
|
||||
echo $GIT_DEFAULT_REF_FORMAT >expect &&
|
||||
git -C repo rev-parse --show-ref-format >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 're-init with includeIf.onbranch condition' '
|
||||
test_when_finished "rm -rf repo" &&
|
||||
git init repo &&
|
||||
git -c includeIf.onbranch:nonexistent.path=/does/not/exist init repo &&
|
||||
echo $GIT_DEFAULT_REF_FORMAT >expect &&
|
||||
git -C repo rev-parse --show-ref-format >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 're-init with includeIf.onbranch condition' '
|
||||
test_when_finished "rm -rf repo" &&
|
||||
git init repo &&
|
||||
git -c includeIf.onbranch:nonexistent.path=/does/not/exist init repo &&
|
||||
echo $GIT_DEFAULT_REF_FORMAT >expect &&
|
||||
git -C repo rev-parse --show-ref-format >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 're-init skips non-matching includeIf.onbranch' '
|
||||
test_when_finished "rm -rf repo config" &&
|
||||
cat >config <<-EOF &&
|
||||
[
|
||||
garbage
|
||||
EOF
|
||||
git init repo &&
|
||||
git -c includeIf.onbranch:nonexistent.path="$(test-tool path-utils absolute_path config)" init repo
|
||||
'
|
||||
|
||||
test_expect_success 're-init reads matching includeIf.onbranch' '
|
||||
test_when_finished "rm -rf repo config" &&
|
||||
cat >config <<-EOF &&
|
||||
[
|
||||
garbage
|
||||
EOF
|
||||
path="$(test-tool path-utils absolute_path config)" &&
|
||||
git init --initial-branch=branch repo &&
|
||||
cat >expect <<-EOF &&
|
||||
fatal: bad config line 1 in file $path
|
||||
EOF
|
||||
test_must_fail git -c includeIf.onbranch:branch.path="$path" init repo 2>err &&
|
||||
test_cmp expect err
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
Loading…
Reference in a new issue