diff options
| author | Derrick Stolee <stolee@gmail.com> | 2026-03-03 17:31:51 +0000 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2026-03-03 10:19:59 -0800 |
| commit | c5e62e1aa07c7436cb081c7ef3a6995578f38b27 (patch) | |
| tree | 6f60c0091601a0b18adc0c52732b8ec4ee086c94 | |
| parent | 67ad42147a7acc2af6074753ebd03d904476118f (diff) | |
| download | git-c5e62e1aa07c7436cb081c7ef3a6995578f38b27.tar.xz | |
for-each-repo: test outside of repo context
The 'git for-each-repo' tool is frequently run outside of a repo context
in the real world. For example, it powers background maintenance.
Despite this typical case, we have not been testing it without a local
repository.
Update t0068 to stop creating a test repo and to use global config
everywhere. This has some subtle changes to test across the file.
This was noticed because an earlier attempt to remove the_repository
from builtin/for-each-repo.c did not catch a segmentation fault since
the passed 'repo' is NULL. This use of the_repository will need to stay
until we have a better way to handle config queries outside of a repo
context. Similar use still exists in builtin/config.c for the same
reason.
Signed-off-by: Derrick Stolee <stolee@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
| -rwxr-xr-x | t/t0068-for-each-repo.sh | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/t/t0068-for-each-repo.sh b/t/t0068-for-each-repo.sh index f2f3e50031..512af34c82 100755 --- a/t/t0068-for-each-repo.sh +++ b/t/t0068-for-each-repo.sh @@ -2,6 +2,9 @@ test_description='git for-each-repo builtin' +# We need to test running 'git for-each-repo' outside of a repo context. +TEST_NO_CREATE_REPO=1 + . ./test-lib.sh test_expect_success 'run based on configured value' ' @@ -10,9 +13,10 @@ test_expect_success 'run based on configured value' ' git init three && git init ~/four && git -C two commit --allow-empty -m "DID NOT RUN" && - git config run.key "$TRASH_DIRECTORY/one" && - git config --add run.key "$TRASH_DIRECTORY/three" && - git config --add run.key "~/four" && + git config --global run.key "$TRASH_DIRECTORY/one" && + git config --global --add run.key "$TRASH_DIRECTORY/three" && + git config --global --add run.key "~/four" && + git for-each-repo --config=run.key commit --allow-empty -m "ran" && git -C one log -1 --pretty=format:%s >message && grep ran message && @@ -22,6 +26,7 @@ test_expect_success 'run based on configured value' ' grep ran message && git -C ~/four log -1 --pretty=format:%s >message && grep ran message && + git for-each-repo --config=run.key -- commit --allow-empty -m "ran again" && git -C one log -1 --pretty=format:%s >message && grep again message && @@ -46,7 +51,7 @@ test_expect_success 'error on bad config keys' ' ' test_expect_success 'error on NULL value for config keys' ' - cat >>.git/config <<-\EOF && + cat >>.gitconfig <<-\EOF && [empty] key EOF @@ -59,8 +64,8 @@ test_expect_success 'error on NULL value for config keys' ' ' test_expect_success '--keep-going' ' - git config keep.going non-existing && - git config --add keep.going . && + git config --global keep.going non-existing && + git config --global --add keep.going one && test_must_fail git for-each-repo --config=keep.going \ -- branch >out 2>err && @@ -70,7 +75,7 @@ test_expect_success '--keep-going' ' test_must_fail git for-each-repo --config=keep.going --keep-going \ -- branch >out 2>err && test_grep "cannot change to .*non-existing" err && - git branch >expect && + git -C one branch >expect && test_cmp expect out ' |
