Message ID | 20240304151811.511780-1-shyamthakkar001@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 8145a8fd024f8191f58e2611981b90da0c9b6453 |
Headers | show |
Series | [v2] setup: remove unnecessary variable | expand |
Ghanshyam Thakkar <shyamthakkar001@gmail.com> writes: > The TODO comment suggested to heed core.bare from template config file > if no command line override given. And the prev_bare_repository > variable seems to have been placed for this sole purpose as it is not > used anywhere else. OK. > However, it was clarified by Junio [1] that such values (including > core.bare) are ignored intentionally and does not make sense to > propagate them from template config to repository config. Also, the > directories for the worktree and repository are already created, and > therefore the bare/non-bare decision has already been made, by the > point we reach the codepath where the TODO comment is placed. Correct. Who said it is much less interesting than what was said, so I would have written the first part of the paragraph more like Values including core.bare from the template file are ignored on purpose because they may not make sense for the repository being created [1]. Also, the directories for ... but I'll let it pass. > diff --git a/t/t1301-shared-repo.sh b/t/t1301-shared-repo.sh > index b1eb5c01b8..29cf8a9661 100755 > --- a/t/t1301-shared-repo.sh > +++ b/t/t1301-shared-repo.sh > @@ -52,7 +52,7 @@ test_expect_success 'shared=all' ' > test 2 = $(git config core.sharedrepository) > ' > > -test_expect_failure 'template can set core.bare' ' > +test_expect_success 'template cannot set core.bare' ' > test_when_finished "rm -rf subdir" && > test_when_finished "rm -rf templates" && > test_config core.bare true && > @@ -60,18 +60,7 @@ test_expect_failure 'template can set core.bare' ' > mkdir -p templates/ && > cp .git/config templates/config && > git init --template=templates subdir && > - test_path_exists subdir/HEAD > + test_path_is_missing subdir/HEAD > ' So we used to say "subdir should be created as a bare repository but we fail to do so", but now "subdir should become a non-bare repository because 'git init' is run without the --bare option". OK. > - > -test_expect_success 'template can set core.bare but overridden by command line' ' > - test_when_finished "rm -rf subdir" && > - test_when_finished "rm -rf templates" && > - test_config core.bare true && > - umask 0022 && > - mkdir -p templates/ && > - cp .git/config templates/config && > - git init --no-bare --template=templates subdir && > - test_path_exists subdir/.git/HEAD > -' This removal is a bit unexpected. Is it because we established with the previous test that core.bare in the template should not affect the outcome, so this is not worth testing? > diff --git a/t/t5606-clone-options.sh b/t/t5606-clone-options.sh > index a400bcca62..e93e0d0cc3 100755 > --- a/t/t5606-clone-options.sh > +++ b/t/t5606-clone-options.sh > @@ -120,14 +120,14 @@ test_expect_success 'prefers -c config over --template config' ' > > ' > > -test_expect_failure 'prefers --template config even for core.bare' ' > +test_expect_success 'ignore --template config for core.bare' ' > > template="$TRASH_DIRECTORY/template-with-bare-config" && > mkdir "$template" && > git config --file "$template/config" core.bare true && > git clone "--template=$template" parent clone-bare-config && > - test "$(git -C clone-bare-config config --local core.bare)" = "true" && > - test_path_is_file clone-bare-config/HEAD > + test "$(git -C clone-bare-config config --local core.bare)" = "false" && > + test_path_is_missing clone-bare-config/HEAD > ' This is in the same spirit as the first change in t1301, which seems OK. Thanks.
On Mon Mar 4, 2024 at 11:46 PM IST, Junio C Hamano wrote: > Ghanshyam Thakkar <shyamthakkar001@gmail.com> writes: > > - > > -test_expect_success 'template can set core.bare but overridden by command line' ' > > - test_when_finished "rm -rf subdir" && > > - test_when_finished "rm -rf templates" && > > - test_config core.bare true && > > - umask 0022 && > > - mkdir -p templates/ && > > - cp .git/config templates/config && > > - git init --no-bare --template=templates subdir && > > - test_path_exists subdir/.git/HEAD > > -' > > This removal is a bit unexpected. Is it because we established with > the previous test that core.bare in the template should not affect > the outcome, so this is not worth testing? Yes, in the previous testcase we determined that template cannot set core.bare. Therefore, this testcase would be like testing --bare/--no-bare option, which is already done in 0001-init.sh and t5601-clone.sh. However, I don't have strong opinion on this. I can add it back if you think it is worth it. Thanks.
"Ghanshyam Thakkar" <shyamthakkar001@gmail.com> writes: > Yes, in the previous testcase we determined that template cannot set > core.bare. Therefore, this testcase would be like testing > --bare/--no-bare option, which is already done in 0001-init.sh and > t5601-clone.sh. However, I don't have strong opinion on this. I can add > it back if you think it is worth it. I was merely trying to make sure that I understood your motivation behind the change, which was described at the end of the commit log message, i.e. "... and remove one redundant testcase.". Thanks.
diff --git a/setup.c b/setup.c index b69b1cbc2a..81accd1213 100644 --- a/setup.c +++ b/setup.c @@ -1961,7 +1961,6 @@ void create_reference_database(unsigned int ref_storage_format, static int create_default_files(const char *template_path, const char *original_git_dir, const struct repository_format *fmt, - int prev_bare_repository, int init_shared_repository) { struct stat st1; @@ -1996,34 +1995,8 @@ static int create_default_files(const char *template_path, */ if (init_shared_repository != -1) set_shared_repository(init_shared_repository); - /* - * TODO: heed core.bare from config file in templates if no - * command-line override given - */ - is_bare_repository_cfg = prev_bare_repository || !work_tree; - /* TODO (continued): - * - * Unfortunately, the line above is equivalent to - * is_bare_repository_cfg = !work_tree; - * which ignores the config entirely even if no `--[no-]bare` - * command line option was present. - * - * To see why, note that before this function, there was this call: - * prev_bare_repository = is_bare_repository() - * expanding the right hand side: - * = is_bare_repository_cfg && !get_git_work_tree() - * = is_bare_repository_cfg && !work_tree - * note that the last simplification above is valid because nothing - * calls repo_init() or set_git_work_tree() between any of the - * relevant calls in the code, and thus the !get_git_work_tree() - * calls will return the same result each time. So, what we are - * interested in computing is the right hand side of the line of - * code just above this comment: - * prev_bare_repository || !work_tree - * = is_bare_repository_cfg && !work_tree || !work_tree - * = !work_tree - * because "A && !B || !B == !B" for all boolean values of A & B. - */ + + is_bare_repository_cfg = !work_tree; /* * We would have created the above under user's umask -- under @@ -2175,7 +2148,6 @@ int init_db(const char *git_dir, const char *real_git_dir, int exist_ok = flags & INIT_DB_EXIST_OK; char *original_git_dir = real_pathdup(git_dir, 1); struct repository_format repo_fmt = REPOSITORY_FORMAT_INIT; - int prev_bare_repository; if (real_git_dir) { struct stat st; @@ -2201,7 +2173,6 @@ int init_db(const char *git_dir, const char *real_git_dir, safe_create_dir(git_dir, 0); - prev_bare_repository = is_bare_repository(); /* Check to see if the repository version is right. * Note that a newly created repository does not have @@ -2214,8 +2185,7 @@ int init_db(const char *git_dir, const char *real_git_dir, validate_ref_storage_format(&repo_fmt, ref_storage_format); reinit = create_default_files(template_dir, original_git_dir, - &repo_fmt, prev_bare_repository, - init_shared_repository); + &repo_fmt, init_shared_repository); /* * Now that we have set up both the hash algorithm and the ref storage diff --git a/t/t1301-shared-repo.sh b/t/t1301-shared-repo.sh index b1eb5c01b8..29cf8a9661 100755 --- a/t/t1301-shared-repo.sh +++ b/t/t1301-shared-repo.sh @@ -52,7 +52,7 @@ test_expect_success 'shared=all' ' test 2 = $(git config core.sharedrepository) ' -test_expect_failure 'template can set core.bare' ' +test_expect_success 'template cannot set core.bare' ' test_when_finished "rm -rf subdir" && test_when_finished "rm -rf templates" && test_config core.bare true && @@ -60,18 +60,7 @@ test_expect_failure 'template can set core.bare' ' mkdir -p templates/ && cp .git/config templates/config && git init --template=templates subdir && - test_path_exists subdir/HEAD -' - -test_expect_success 'template can set core.bare but overridden by command line' ' - test_when_finished "rm -rf subdir" && - test_when_finished "rm -rf templates" && - test_config core.bare true && - umask 0022 && - mkdir -p templates/ && - cp .git/config templates/config && - git init --no-bare --template=templates subdir && - test_path_exists subdir/.git/HEAD + test_path_is_missing subdir/HEAD ' test_expect_success POSIXPERM 'update-server-info honors core.sharedRepository' ' diff --git a/t/t5606-clone-options.sh b/t/t5606-clone-options.sh index a400bcca62..e93e0d0cc3 100755 --- a/t/t5606-clone-options.sh +++ b/t/t5606-clone-options.sh @@ -120,14 +120,14 @@ test_expect_success 'prefers -c config over --template config' ' ' -test_expect_failure 'prefers --template config even for core.bare' ' +test_expect_success 'ignore --template config for core.bare' ' template="$TRASH_DIRECTORY/template-with-bare-config" && mkdir "$template" && git config --file "$template/config" core.bare true && git clone "--template=$template" parent clone-bare-config && - test "$(git -C clone-bare-config config --local core.bare)" = "true" && - test_path_is_file clone-bare-config/HEAD + test "$(git -C clone-bare-config config --local core.bare)" = "false" && + test_path_is_missing clone-bare-config/HEAD ' test_expect_success 'prefers config "clone.defaultRemoteName" over default' '
The TODO comment suggested to heed core.bare from template config file if no command line override given. And the prev_bare_repository variable seems to have been placed for this sole purpose as it is not used anywhere else. However, it was clarified by Junio [1] that such values (including core.bare) are ignored intentionally and does not make sense to propagate them from template config to repository config. Also, the directories for the worktree and repository are already created, and therefore the bare/non-bare decision has already been made, by the point we reach the codepath where the TODO comment is placed. Therefore, prev_bare_repository does not have a usecase with/without supporting core.bare from template. And the removal of prev_bare_repository is safe as proved by the later part of the comment: "Unfortunately, the line above is equivalent to is_bare_repository_cfg = !work_tree; which ignores the config entirely even if no `--[no-]bare` command line option was present. To see why, note that before this function, there was this call: prev_bare_repository = is_bare_repository() expanding the right hand side: = is_bare_repository_cfg && !get_git_work_tree() = is_bare_repository_cfg && !work_tree note that the last simplification above is valid because nothing calls repo_init() or set_git_work_tree() between any of the relevant calls in the code, and thus the !get_git_work_tree() calls will return the same result each time. So, what we are interested in computing is the right hand side of the line of code just above this comment: prev_bare_repository || !work_tree = is_bare_repository_cfg && !work_tree || !work_tree = !work_tree because "A && !B || !B == !B" for all boolean values of A & B." Therefore, remove the TODO comment and remove prev_bare_repository variable. Also, update relevant testcases and remove one redundant testcase. [1]: https://lore.kernel.org/git/xmqqjzonpy9l.fsf@gitster.g/ Helped-by: Elijah Newren <newren@gmail.com> Helped-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Ghanshyam Thakkar <shyamthakkar001@gmail.com> --- setup.c | 36 +++--------------------------------- t/t1301-shared-repo.sh | 15 ++------------- t/t5606-clone-options.sh | 6 +++--- 3 files changed, 8 insertions(+), 49 deletions(-)