Changes since v3, all suggested/endorsed by Junio (range-diff at the end): - Moved the actual fix from being last patch in the series to the first (other patches in this series are just test code cleanups) - Anchored regexes to avoid matching another filename as a substring - Add test_path_exists() to test-lib-function.sh and use it (we had test_path_is_dir, test_path_is_file, and test_path_is_missing, but not simple test_path_exists) Elijah Newren (5): t7406: fix call that was failing for the wrong reason t7406: simplify by using diff --name-only instead of diff --raw t7406: avoid having git commands upstream of a pipe t7406: prefer test_* helper functions to test -[feds] t7406: avoid using test_must_fail for commands other than git t/t7406-submodule-update.sh | 37 +++++++++++++++++++++++-------------- t/test-lib-functions.sh | 8 ++++++++ 2 files changed, 31 insertions(+), 14 deletions(-) -: ---------- > 1: 5f257af6c8 t7406: fix call that was failing for the wrong reason 1: 3c369bf73d ! 2: 9e5400a1ad t7406: simplify by using diff --name-only instead of diff --raw @@ -16,10 +16,10 @@ compare_head ) && - git diff --raw | grep " submodule" && -+ git diff --name-only | grep submodule && ++ git diff --name-only | grep ^submodule$ && git submodule update && - git diff --raw | grep " submodule" && -+ git diff --name-only | grep submodule && ++ git diff --name-only | grep ^submodule$ && (cd submodule && compare_head ) && @@ -28,10 +28,12 @@ compare_head ) && - git diff --raw | grep " submodule" && -+ git diff --name-only | grep submodule && ++ git diff --name-only | grep ^submodule$ && git submodule update --checkout && -- test_must_fail git diff --raw \| grep " submodule" && -+ test_must_fail git diff --name-only \| grep submodule && +- git diff --raw >out && +- ! grep " submodule" out && ++ git diff --name-only >out && ++ ! grep ^submodule$ out && (cd submodule && test_must_fail compare_head ) && 2: ba50d6b0f3 ! 3: 4e8cdf60f4 t7406: avoid having git commands upstream of a pipe @@ -26,13 +26,13 @@ git checkout master && compare_head ) && -- git diff --name-only | grep submodule && +- git diff --name-only | grep ^submodule$ && + git diff --name-only >out && -+ grep submodule out && ++ grep ^submodule$ out && git submodule update && -- git diff --name-only | grep submodule && +- git diff --name-only | grep ^submodule$ && + git diff --name-only >out && -+ grep submodule out && ++ grep ^submodule$ out && (cd submodule && compare_head ) && @@ -40,12 +40,12 @@ git checkout master && compare_head ) && -- git diff --name-only | grep submodule && +- git diff --name-only | grep ^submodule$ && + git diff --name-only >out && -+ grep submodule out && ++ grep ^submodule$ out && git submodule update --checkout && - test_must_fail git diff --name-only \| grep submodule && - (cd submodule && + git diff --name-only >out && + ! grep ^submodule$ out && @@ H=$(git rev-parse --short HEAD) && git commit -am "pre move" && 3: 42f7b7f225 ! 4: f171cbcc9a t7406: prefer test_* helper functions to test -[feds] @@ -6,13 +6,12 @@ test failures, so use the test_* helper functions from test-lib-functions.sh. - Note: The use of 'test_path_is_file submodule/.git' may look odd, but - it is a file which is populated with a + Also, add test_path_exists() to test-lib-function.sh while at it, so + that we don't need to worry whether submodule/.git is a file or a + directory. It currently is a file with contents of the form gitdir: ../.git/modules/submodule - directive. If, in the future, handling of the submodule is changed and - submodule/.git becomes a directory we can change this to - test_path_is_dir (or perhaps write a test_path_exists helper function - that doesn't care whether the path is a file or a directory). + but it could be changed in the future to be a directory; this test + only really cares that it exists. Signed-off-by: Elijah Newren <newren@xxxxxxxxx> @@ -34,8 +33,27 @@ git submodule update --init && - test -e submodule/.git && - test_must_fail test -e none/.git -+ test_path_is_file submodule/.git && ++ test_path_exists submodule/.git && + test_path_is_missing none/.git ) ' + +diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh +--- a/t/test-lib-functions.sh ++++ b/t/test-lib-functions.sh +@@ + fi + } + ++test_path_exists () { ++ if ! test -e "$1" ++ then ++ echo "Path $1 doesn't exist. $2" ++ false ++ fi ++} ++ + # Check if the directory exists and is empty as expected, barf otherwise. + test_dir_is_empty () { + test_path_is_dir "$1" && 4: 54cf6531ec ! 5: a44c566321 t7406: avoid using test_must_fail for commands other than git @@ -8,8 +8,8 @@ --- a/t/t7406-submodule-update.sh +++ b/t/t7406-submodule-update.sh @@ - git submodule update --checkout && - test_must_fail git diff --name-only \| grep submodule && + git diff --name-only >out && + ! grep ^submodule$ out && (cd submodule && - test_must_fail compare_head + ! compare_head 5: 3019f2d01c < -: ---------- t7406: fix call that was failing for the wrong reason -- 2.18.0.556.g1604670984