diff options
| author | Johannes Schindelin <johannes.schindelin@gmx.de> | 2022-02-08 11:21:53 +0000 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2022-02-08 09:54:44 -0800 |
| commit | 059fda190215d18e7aa23f825cd607b16a016b65 (patch) | |
| tree | a02e9fb036e3a2cde41dcbe7b6669ade8189df76 /builtin/fetch.c | |
| parent | Git 2.35.1 (diff) | |
| download | git-059fda190215d18e7aa23f825cd607b16a016b65.tar.gz git-059fda190215d18e7aa23f825cd607b16a016b65.zip | |
checkout/fetch/pull/pack-objects: allow `-h` outside a repository
When we taught these commands about the sparse index, we did not account
for the fact that the `cmd_*()` functions _can_ be called without a
gitdir, namely when `-h` is passed to show the usage.
A plausible approach to address this is to move the
`prepare_repo_settings()` calls right after the `parse_options()` calls:
The latter will never return when it handles `-h`, and therefore it is
safe to assume that we have a `gitdir` at that point, as long as the
built-in is marked with the `RUN_SETUP` flag.
However, it is unfortunately not that simple. In `cmd_pack_objects()`,
for example, the repo settings need to be fully populated so that the
command-line options `--sparse`/`--no-sparse` can override them, not the
other way round.
Therefore, we choose to imitate the strategy taken in `cmd_diff()`,
where we simply do not bother to prepare and initialize the repo
settings unless we have a `gitdir`.
This fixes https://github.com/git-for-windows/git/issues/3688
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/fetch.c')
| -rw-r--r-- | builtin/fetch.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/builtin/fetch.c b/builtin/fetch.c index 5f06b21f8e..c8ca4262de 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -2014,8 +2014,10 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) } git_config(git_fetch_config, NULL); - prepare_repo_settings(the_repository); - the_repository->settings.command_requires_full_index = 0; + if (the_repository->gitdir) { + prepare_repo_settings(the_repository); + the_repository->settings.command_requires_full_index = 0; + } argc = parse_options(argc, argv, prefix, builtin_fetch_options, builtin_fetch_usage, 0); |
