sb/submodule-move-nested breaks t7411 under GIT_FSMONITOR_TEST
- From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- Date
- May 25, 2018, 12:28 UTC
- Message-ID
- <87lgc77wc7.fsf@evledraar.gmail.com>
- In-Reply-To
- <xmqqvabm6csb.fsf@gitster-ct.c.googlers.com>
On Thu, May 17 2018, Junio C Hamano wrote:
Show 12 quoted lines
> * sb/submodule-move-nested (2018-03-29) 6 commits
> (merged to 'next' on 2018-04-25 at 86b177433a)
> + submodule: fixup nested submodules after moving the submodule
> + submodule-config: remove submodule_from_cache
> + submodule-config: add repository argument to submodule_from_{name, path}
> + submodule-config: allow submodule_free to handle arbitrary repositories
> + grep: remove "repo" arg from non-supporting funcs
> + submodule.h: drop declaration of connect_work_tree_and_git_dir
>
> Moving a submodule that itself has submodule in it with "git mv"
> forgot to make necessary adjustment to the nested sub-submodules;
> now the codepath learned to recurse into the submodules.I didn't spot this earlier because I don't test this a lot, but I've bisected the following breakage down to da62f786d2 ("submodule: fixup nested submodules after moving the submodule", 2018-03-28) (and manually confirmed by reverting). On Linux both Debian & CentOS I get tests 3 and 4 failing with:
GIT_FSMONITOR_TEST=$PWD/t7519/fsmonitor-all ./t7411-submodule-config.sh
-v -x output follows:
expecting success: mkdir submodule && (cd submodule && git init && echo a >a && git add . && git commit -ma ) && mkdir super && (cd super && git init && git submodule add ../submodule && git submodule add ../submodule a && git commit -m "add as submodule and as a" && git mv a b && git commit -m "move a to b" )
+ mkdir submodule + cd submodule + git init Initialized empty Git repository in /home/avar/g/git/t/trash directory.t7411-submodule-config/submodule/.git/ + echo a + git add . + git commit -ma [master (root-commit) 27e9f0e] a Author: A U Thor <author@example.com> 1 file changed, 1 insertion(+) create mode 100644 a + mkdir super + cd super + git init Initialized empty Git repository in /home/avar/g/git/t/trash directory.t7411-submodule-config/super/.git/ + git submodule add ../submodule Cloning into '/home/avar/g/git/t/trash directory.t7411-submodule-config/super/submodule'... done. + git submodule add ../submodule a Cloning into '/home/avar/g/git/t/trash directory.t7411-submodule-config/super/a'... done. + git commit -m add as submodule and as a [master (root-commit) 5a1dac1] add as submodule and as a Author: A U Thor <author@example.com> 3 files changed, 8 insertions(+) create mode 100644 .gitmodules create mode 160000 a create mode 160000 submodule + git mv a b + git commit -m move a to b [master ab1e9c7] move a to b Author: A U Thor <author@example.com> 1 file changed, 0 insertions(+), 0 deletions(-) rename a => b (100%) ok 1 - submodule config cache setup
expecting success: test_when_finished "rm -rf repo" && test_create_repo repo && cat >repo/.gitmodules <<-\EOF && [submodule "s"] path ignore EOF ( cd repo && test_must_fail test-submodule-config "" s 2>actual && test_i18ngrep "bad config" actual )
+ test_when_finished rm -rf repo
+ test 0 = 0
+ test_cleanup={ rm -rf repo
} && (exit "$eval_ret"); eval_ret=$?; :
+ test_create_repo repo
+ test 1 = 1
+ repo=repo
+ mkdir -p repo
+ cd repo
+ /home/avar/g/git/t/../git-init --template=/home/avar/g/git/t/../templates/blt/
Initialized empty Git repository in /home/avar/g/git/t/trash directory.t7411-submodule-config/repo/.git/
+ mv .git/hooks .git/hooks-disabled
+ cat
+ cd repo
+ test_must_fail test-submodule-config s
+ test_i18ngrep bad config actual
+ test -n
+ test x! = xbad config
+ grep bad config actual
fatal: bad config line 2 in file /home/avar/g/git/t/trash directory.t7411-submodule-config/repo/.gitmodules
+ rm -rf repo
+ exit 0
+ eval_ret=0
+ :
ok 2 - configuration parsing with errorexpecting success: (cd super && test-submodule-config \ HEAD^ a \ HEAD b \ HEAD^ submodule \ HEAD submodule \ >actual && test_cmp expect actual )
+ cd super + test-submodule-config HEAD^ a HEAD b HEAD^ submodule HEAD submodule warning: ab1e9c76c1e6a15df51b20e75552ec5ad00708ac:.gitmodules, multiple configurations found for 'submodule.submodule.path'. Skipping second one! warning: ab1e9c76c1e6a15df51b20e75552ec5ad00708ac:.gitmodules, multiple configurations found for 'submodule.submodule.url'. Skipping second one! warning: ab1e9c76c1e6a15df51b20e75552ec5ad00708ac:.gitmodules, multiple configurations found for 'submodule.a.path'. Skipping second one! warning: ab1e9c76c1e6a15df51b20e75552ec5ad00708ac:.gitmodules, multiple configurations found for 'submodule.a.url'. Skipping second one! Submodule not found. Usage: /home/avar/g/git/t/helper/test-submodule-config [<commit> <submodulepath>] ... error: last command exited with $?=1 not ok 3 - test parsing and lookup of submodule config by path # # (cd super && # test-submodule-config \ # HEAD^ a \ # HEAD b \ # HEAD^ submodule \ # HEAD submodule \ # >actual && # test_cmp expect actual # ) #
expecting success: (cd super && test-submodule-config --name \ HEAD^ a \ HEAD a \ HEAD^ submodule \ HEAD submodule \ >actual && test_cmp expect actual )
+ cd super + test-submodule-config --name HEAD^ a HEAD a HEAD^ submodule HEAD submodule + test_cmp expect actual + diff -u expect actual --- expect 2018-05-25 12:28:30.000000000 +0000 +++ actual 2018-05-25 12:28:30.000000000 +0000
@@ -1,4 +1,4 @@ Submodule name: 'a' for path 'a' -Submodule name: 'a' for path 'b' +Submodule name: 'a' for path 'a' Submodule name: 'submodule' for path 'submodule' Submodule name: 'submodule' for path 'submodule' error: last command exited with $?=1 not ok 4 - test parsing and lookup of submodule config by name # # (cd super && # test-submodule-config --name \ # HEAD^ a \ # HEAD a \ # HEAD^ submodule \ # HEAD submodule \ # >actual && # test_cmp expect actual # ) # expecting success: (cd super && cp .gitmodules .gitmodules.bak && echo " value = \"" >>.gitmodules && git add .gitmodules && mv .gitmodules.bak .gitmodules && git commit -m "add error" && test-submodule-config \ HEAD b \ HEAD submodule \ >actual && test_cmp expect_error actual ) + cd super + cp .gitmodules .gitmodules.bak + echo value = " + git add .gitmodules + mv .gitmodules.bak .gitmodules + git commit -m add error [master 7cb6f0e] add error Author: A U Thor <author@example.com> 1 file changed, 2 insertions(+), 1 deletion(-) + test-submodule-config HEAD b HEAD submodule error: bad config line 7 in submodule-blob 7cb6f0e38e67568f41da9828cc7d5eb1c753b7b4:.gitmodules + test_cmp expect_error actual + diff -u expect_error actual ok 5 - error in one submodule config lets continue expecting success: (cd super && sha1=$(git rev-parse HEAD) && test-submodule-config \ HEAD b \ HEAD submodule \ 2>actual_err && test_i18ngrep "submodule-blob $sha1:.gitmodules" actual_err >/dev/null ) + cd super + git rev-parse HEAD + sha1=7cb6f0e38e67568f41da9828cc7d5eb1c753b7b4 + test-submodule-config HEAD b HEAD submodule Submodule name: 'a' for path 'b' Submodule name: 'submodule' for path 'submodule' + test_i18ngrep submodule-blob 7cb6f0e38e67568f41da9828cc7d5eb1c753b7b4:.gitmodules actual_err + test -n + test x! = xsubmodule-blob 7cb6f0e38e67568f41da9828cc7d5eb1c753b7b4:.gitmodules + grep submodule-blob 7cb6f0e38e67568f41da9828cc7d5eb1c753b7b4:.gitmodules actual_err ok 6 - error message contains blob reference expecting success: ( cd super && git tag new_tag && tree=$(git rev-parse HEAD^{tree}) && commit=$(git rev-parse HEAD^{commit}) && test-submodule-config $commit b >expect && test-submodule-config $tree b >actual.1 && test-submodule-config new_tag b >actual.2 && test_cmp expect actual.1 && test_cmp expect actual.2 ) + cd super + git tag new_tag + git rev-parse HEAD^{tree} + tree=934687743cd5ca685cfa8d3c77aaebb75ee12e1f + git rev-parse HEAD^{commit} + commit=7cb6f0e38e67568f41da9828cc7d5eb1c753b7b4 + test-submodule-config 7cb6f0e38e67568f41da9828cc7d5eb1c753b7b4 b error: bad config line 7 in submodule-blob 7cb6f0e38e67568f41da9828cc7d5eb1c753b7b4:.gitmodules + test-submodule-config 934687743cd5ca685cfa8d3c77aaebb75ee12e1f b error: bad config line 7 in submodule-blob 934687743cd5ca685cfa8d3c77aaebb75ee12e1f:.gitmodules + test-submodule-config new_tag b error: bad config line 7 in submodule-blob 7cb6f0e38e67568f41da9828cc7d5eb1c753b7b4:.gitmodules + test_cmp expect actual.1 + diff -u expect actual.1 + test_cmp expect actual.2 + diff -u expect actual.2 ok 7 - using different treeishs works expecting success: (cd super && git config -f .gitmodules \ submodule.submodule.fetchrecursesubmodules blabla && git add .gitmodules && git config --unset -f .gitmodules \ submodule.submodule.fetchrecursesubmodules && git commit -m "add error in fetchrecursesubmodules" && test-submodule-config \ HEAD b \ HEAD submodule \ >actual && test_cmp expect_error actual && git reset --hard HEAD^ ) + cd super + git config -f .gitmodules submodule.submodule.fetchrecursesubmodules blabla + git add .gitmodules + git config --unset -f .gitmodules submodule.submodule.fetchrecursesubmodules + git commit -m add error in fetchrecursesubmodules [master 1fa1547] add error in fetchrecursesubmodules Author: A U Thor <author@example.com> 1 file changed, 1 insertion(+), 1 deletion(-) + test-submodule-config HEAD b HEAD submodule + test_cmp expect_error actual + diff -u expect_error actual + git reset --hard HEAD^ HEAD is now at 7cb6f0e add error ok 8 - error in history in fetchrecursesubmodule lets continue # failed 2 among 8 test(s) 1..8