From: "Simon Gerber via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Simon Gerber <gesimu@gmail.com>, Simon Gerber <gesimu@gmail.com>
Subject: [PATCH v2] help.c: fix autocorrect in work tree for bare repository
Date: Sat, 29 Oct 2022 19:56:14 +0000 [thread overview]
Message-ID: <pull.1373.v2.git.git.1667073374852.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1373.git.git.1666970645.gitgitgadget@gmail.com>
From: Simon Gerber <gesimu@gmail.com>
Currently, auto correction doesn't work reliably for commands which must
run in a work tree (e.g. `git status`) in Git work trees which are
created from a bare repository.
As far as I'm able to determine, this has been broken since commit
659fef199f (help: use early config when autocorrecting aliases,
2017-06-14), where the call to `git_config()` in `help_unknown_cmd()`
was replaced with a call to `read_early_config()`. From what I can tell,
the actual cause for the unexpected error is that we call
`git_default_config()` in the `git_unknown_cmd_config` callback instead
of simply returning `0` for config entries which we aren't interested
in.
Calling `git_default_config()` in this callback to `read_early_config()`
seems like a bad idea since those calls will initialize a bunch of state
in `environment.c` (among other things `is_bare_repository_cfg`) before
we've properly detected that we're running in a work tree.
All other callbacks provided to `read_early_config()` appear to only
extract their configurations while simply returning `0` for all other
config keys.
This commit changes the `git_unknown_cmd_config` callback to not call
`git_default_config()`. Instead we also simply return `0` for config
keys which we're not interested in.
Additionally the commit adds a new test case covering `help.autocorrect`
in a work tree created from a bare clone.
Signed-off-by: Simon Gerber <gesimu@gmail.com>
---
Fix autocorrect in work tree for bare repository
Currently, auto correction doesn't work reliably for commands which must
run in a work tree (e.g. git status) in Git work trees which are created
from a bare repository.
This patch adds a test case illustrating the issue and proposes a fix
which adjusts the usage of read_early_config() in help_unknown_cmd() to
match other usages of read_early_config(). In particular the patch
removes the call to git_default_config() in the read config callback.
Changes since v1 (both suggested by Junio):
* Moved test to 9003
* Squashed change and test into a single commit
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1373%2Fsimu%2Ffix%2Fautocorrect-bare-worktree-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1373/simu/fix/autocorrect-bare-worktree-v2
Pull-Request: https://github.com/git/git/pull/1373
Range-diff vs v1:
1: d0a6eea93b5 < -: ----------- tests: add test case for autocorrect in work tree for bare clone
2: 7a2bef32439 ! 1: 4c598dbe778 help.c: don't call git_default_config in git_unknown_cmd_config
@@ Metadata
Author: Simon Gerber <gesimu@gmail.com>
## Commit message ##
- help.c: don't call git_default_config in git_unknown_cmd_config
+ help.c: fix autocorrect in work tree for bare repository
Currently, auto correction doesn't work reliably for commands which must
run in a work tree (e.g. `git status`) in Git work trees which are
@@ Commit message
`git_default_config()`. Instead we also simply return `0` for config
keys which we're not interested in.
+ Additionally the commit adds a new test case covering `help.autocorrect`
+ in a work tree created from a bare clone.
+
Signed-off-by: Simon Gerber <gesimu@gmail.com>
## help.c ##
@@ help.c: static int git_unknown_cmd_config(const char *var, const char *value, vo
}
static int levenshtein_compare(const void *p1, const void *p2)
+
+ ## t/t9003-help-autocorrect.sh ##
+@@ t/t9003-help-autocorrect.sh: test_expect_success 'autocorrect can be declined altogether' '
+ test_line_count = 1 actual
+ '
+
++test_expect_success 'autocorrect works in work tree created from bare repo' '
++ git clone --bare . bare.git &&
++ git -C bare.git worktree add ../worktree &&
++ git -C worktree -c help.autocorrect=immediate stauts
++'
++
+ test_done
help.c | 2 +-
t/t9003-help-autocorrect.sh | 6 ++++++
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/help.c b/help.c
index d04542d8261..ae534ff0bae 100644
--- a/help.c
+++ b/help.c
@@ -563,7 +563,7 @@ static int git_unknown_cmd_config(const char *var, const char *value, void *cb)
if (skip_prefix(var, "alias.", &p))
add_cmdname(&aliases, p, strlen(p));
- return git_default_config(var, value, cb);
+ return 0;
}
static int levenshtein_compare(const void *p1, const void *p2)
diff --git a/t/t9003-help-autocorrect.sh b/t/t9003-help-autocorrect.sh
index f00deaf3815..f5b6b4f746b 100755
--- a/t/t9003-help-autocorrect.sh
+++ b/t/t9003-help-autocorrect.sh
@@ -60,4 +60,10 @@ test_expect_success 'autocorrect can be declined altogether' '
test_line_count = 1 actual
'
+test_expect_success 'autocorrect works in work tree created from bare repo' '
+ git clone --bare . bare.git &&
+ git -C bare.git worktree add ../worktree &&
+ git -C worktree -c help.autocorrect=immediate stauts
+'
+
test_done
base-commit: e7e5c6f715b2de7bea0d39c7d2ba887335b40aa0
--
gitgitgadget
next prev parent reply other threads:[~2022-10-29 19:56 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-28 15:24 [PATCH 0/2] Fix autocorrect in work tree for bare repository Simon Gerber via GitGitGadget
2022-10-28 15:24 ` [PATCH 1/2] tests: add test case for autocorrect in work tree for bare clone Simon Gerber via GitGitGadget
2022-10-28 19:28 ` Junio C Hamano
2022-10-29 8:07 ` Simon Gerber
2022-10-28 15:24 ` [PATCH 2/2] help.c: don't call git_default_config in git_unknown_cmd_config Simon Gerber via GitGitGadget
2022-10-29 19:56 ` Simon Gerber via GitGitGadget [this message]
2022-12-12 16:38 ` [PATCH v2] help.c: fix autocorrect in work tree for bare repository Simon Gerber
2022-12-13 1:37 ` Junio C Hamano
2022-12-13 9:48 ` Simon Gerber
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.1373.v2.git.git.1667073374852.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=gesimu@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.