Repository navigation
Conversation
|
There is an issue in commit 4c0da9e:
|
|
NB: i won't be submitting this via gitgitgadget anymore because I'd like the subject to contain |
If you wanted to use GitGitGadget and have a v2, you would need to reopen the original PR and force-push there, then |
thanks for the suggestion @dscho !! i did something weird with my branch and it wouldn't let me reopen the original PR after force pushing, which is why i opened this new PR. but i've setup |
33d79b9 to
1a89c55
Compare
|
There is an issue in commit 4f4ffa4:
|
9c9964c to
dd42943
Compare
dd42943 to
6c6cc9c
Compare
6459e1d to
a562361
Compare
Record behaviour in two new tests: when no global configuration file exists, `git config list` succeeds whereas `git config list --global` fails. Only check the exit code, as we're not interested in the exact error message. This prevents regressions in the next patch, "config: read global scope via config_sequence", which modifies `do_git_config_sequence()` to optionally return a failure if no global configuration files were successfully read (i.e. when the `--global` flag is specified). Signed-off-by: Delilah Ashley Wu <delilahwu@microsoft.com>
When both `$HOME/.gitconfig` and `$XDG_CONFIG_HOME/git/config` exist, `git config list --global` and `git config get --global` read the home configuration file but ignore the XDG file. Bug reporters expected these `--global` scoped commands to read both files [1][2], which would be consistent with the documentation and the behaviour of the unscoped variants. For example, `git config list` and `git config get` (without `--global`) read from both files (in addition to system-wide and repository-specific entries). We should address this inconsistency by respecting both files during `--global` read operations. The implementation assumes that each configuration scope corresponds to a single file. So during `--global` read operations, Git selects one file path to pass to `git_config_from_file_with_options(file)`. Because the global scope can come from more than one file, we should use another method to read the global configuration. Since `git config list --show-scope --show-origin` reads both the home and XDG files, there must be existing code that respects both locations, namely `do_git_config_sequence()` which reads from all scopes. Introduce an `ignore_system` flag and modify `git_config_system()` to respect it. This makes `config_options` the primary way to disable parts of the configuration sequence and allows callers of `do_git_config_sequence()` to ignore all but the global scope (i.e. ignore system, local, worktree, and cmdline). Reuse the function to read only the global scope when `--global` is specified. This was the suggested solution [3] in the original bug report [1]. The previous patch, "t1300: add tests for global config file existence", recorded existing behaviour: when no global configuration file exists, `git config list` should succeed whereas `git config list --global` should fail. Since the configuration sequence gracefully ignores missing global configuration files, track whether we successfully read at least one of them and adjust the return code accordingly. Keep populating `opts->source.file` in `builtin/config.c` as the destination for write operations. Read operations use the configuration sequence instead, which can be confusing. Add a comment to explain this distinction. Lastly, modify tests to check that both home and XDG configuration files are respected during `--global` read operations. [1] https://lore.kernel.org/git/CAFA9we-QLQRzJdGMMCPatmfrk1oHeiUu9msMRXXk1MLE5HRxBQ@mail.gmail.com/ [2] https://lore.kernel.org/git/CAAdFe9yhBk-WecVzCTsjQ-4Z3AZAbpP+w+B076ouM3qX6d1WAg@mail.gmail.com/ [3] https://lore.kernel.org/git/kl6ly1oze7wb.fsf@chooglen-macbookpro.roam.corp.google.com Reported-by: Jade Lovelace <lists@jade.fyi> Reported-by: Nils Fahldieck <nils@fahldieck.de> Suggested-by: Glen Choo <glencbz@gmail.com> Helped-by: Derrick Stolee <stolee@gmail.com> Helped-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Delilah Ashley Wu <delilahwu@microsoft.com>
a562361 to
8b7c903
Compare
Hi,
Here is my reroll.
As reported in [1]: `$HOME/.gitconfig` and `$XDG_CONFIG_HOME/git/config` are both valid global config locations, but `git config list --global` only includes the former in its output.
Suppose we have this config in `$HOME/.gitconfig`:
And this config in `$XDG_CONFIG_HOME/git/config`:
Then, to reproduce the issue that `--global` only shows the home config:
Git correctly applies the XDG config in its effective configuration, but it doesn't show up when `--global` is specified. We can confirm this by checking the output without the `--global` flag:
The expected behaviour is both configs should be shown when `--global` is specified, so we'd expect its output to look the same as above. This was confirmed in [2], which quoted the `git config` documentation:
The first patch fixes forward slash normalisation on Windows paths. The second patch adds a flag for error handling when reading configuration files. The third patch implements the fix to include both config files when `--global` is specified.
Changes in v2:
[1]: https://lore.kernel.org/git/CAFA9we-QLQRzJdGMMCPatmfrk1oHeiUu9msMRXXk1MLE5HRxBQ@mail.gmail.com/
[2]: https://lore.kernel.org/git/xmqqmt5lezi3.fsf@gitster.g/
[3]: #1938
Thank you all for your time!
Delilah
cc: Delilah Ashley Wu delilahwu@microsoft.com
cc: Derrick Stolee stolee@gmail.com
cc: Johannes Schindelin johannes.schindelin@gmx.de
cc: Junio C Hamano gitster@pobox.com
cc: Patrick Steinhardt ps@pks.im
cc: Kristoffer Haugsbakk kristofferhaugsbakk@fastmail.com