Thread (47 messages) flat view 47 messages, 6 authors, 2021-12-08

Re: [PATCH v5 1/7] git: esnure correct git directory setup with -h

From: Elijah Newren <hidden>
Date: 2021-12-04 18:43:36

On Fri, Dec 3, 2021 at 1:16 PM Lessley Dennington via GitGitGadget
[off-list ref] wrote:

Simple typo in the subject of the commit message: "esnure" -> "ensure"
quoted hunk ↗ jump to hunk
From: Lessley Dennington <redacted>

Ensure correct git directory setup when -h is passed with commands. This
specifically applies to repos with special help text configuration
variables and to commands run with -h outside a repository. This
will also protect against test failures in the upcoming change to BUG in
prepare_repo_settings if no git directory exists.

Note: this diff is better seen when ignoring whitespace changes.

Co-authored-by: Junio C Hamano [off-list ref]
Signed-off-by: Lessley Dennington <redacted>
---
 git.c | 37 +++++++++++++++++++------------------
 1 file changed, 19 insertions(+), 18 deletions(-)
diff --git a/git.c b/git.c
index 60c2784be45..03a2dfa5174 100644
--- a/git.c
+++ b/git.c
@@ -421,27 +421,28 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv)
        int status, help;
        struct stat st;
        const char *prefix;
-
+       int run_setup = (p->option & (RUN_SETUP | RUN_SETUP_GENTLY));
        prefix = NULL;
        help = argc == 2 && !strcmp(argv[1], "-h");
-       if (!help) {
-               if (p->option & RUN_SETUP)
-                       prefix = setup_git_directory();
-               else if (p->option & RUN_SETUP_GENTLY) {
-                       int nongit_ok;
-                       prefix = setup_git_directory_gently(&nongit_ok);
-               }
-               precompose_argv_prefix(argc, argv, NULL);
-               if (use_pager == -1 && p->option & (RUN_SETUP | RUN_SETUP_GENTLY) &&
-                   !(p->option & DELAY_PAGER_CONFIG))
-                       use_pager = check_pager_config(p->cmd);
-               if (use_pager == -1 && p->option & USE_PAGER)
-                       use_pager = 1;
-
-               if ((p->option & (RUN_SETUP | RUN_SETUP_GENTLY)) &&
-                   startup_info->have_repository) /* get_git_dir() may set up repo, avoid that */
-                       trace_repo_setup(prefix);
+       if (help && (run_setup & RUN_SETUP))
+               /* demote to GENTLY to allow 'git cmd -h' outside repo */
+               run_setup = RUN_SETUP_GENTLY;
+
+       if (run_setup & RUN_SETUP)
+               prefix = setup_git_directory();
+       else if (run_setup & RUN_SETUP_GENTLY) {
+               int nongit_ok;
+               prefix = setup_git_directory_gently(&nongit_ok);
        }
+       precompose_argv_prefix(argc, argv, NULL);
+       if (use_pager == -1 && run_setup &&
+               !(p->option & DELAY_PAGER_CONFIG))
+               use_pager = check_pager_config(p->cmd);
+       if (use_pager == -1 && p->option & USE_PAGER)
+               use_pager = 1;
+       if (run_setup && startup_info->have_repository)
+               /* get_git_dir() may set up repo, avoid that */
+               trace_repo_setup(prefix);
        commit_pager_choice();

        if (!help && get_super_prefix()) {
--
gitgitgadget
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help