Re: [PATCH v3] t7300-clean.sh: use test_path_* helper functions for error logging

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Oct 9, 2024 at 6:47 PM Junio C Hamano <gitster@xxxxxxxxx> wrote:
>
> "Samuel Adekunle Abraham via GitGitGadget" <gitgitgadget@xxxxxxxxx>
> writes:
>
> > From: Abraham Samuel Adekunle <abrahamadekunle50@xxxxxxxxx>
> >
> > This test script uses "test - [def]", but when a test fails because
> > the file passed to it does not exist,
> > it fails silently without an error message.
> > Use test_path_* helper functions, which are designed to give better
> > error messages when their expectations are not met.
> >
> > I have added a mechanical validation that applies the same transformation
> > done in this patch, when the test script is passed to a sed script as shown
> > below.
> >
> > sed -e 's/^\( *\)test -f /\1test_path_is_file /' \
> >     -e 's/^\( *\)test -d /\1test_path_is_dir /' \
> >     -e 's/^\( *\)test -e /\1test_path_exists /' \
> >     -e 's/^\( *\)! test -[edf] /\1test_path_is_missing /' \
> >     -e 's/^\( *\)test ! -[edf] /\1test_path_is_missing /' \
> >        "$1" >foo.sh
> >
> > Reviewers can use the sed script to tranform the original test script and
> > compare the result in foo.sh with the results of applying the patch.
> > You will see an instance of "!(test -e 3)" which was manually replaced with
> > ""test_path_is_missing 3", and everything else should match.
> >
> > Careful and deliberate observation was done to check instances where
> > "test ! - [df] foo" was used in the test script to make sure that the test
> > instances were expecting foo to EITHER be a file or a directory, and NOT a
> > possibility of being both as this would make replacing "test ! -f foo" with
> > "test_path_is_missing foo" unreasonable.
> > In the tests control flow, foo has been created as EITHER a
> > reguar file OR a directory and should NOT exist
> > after "git clean" or "git clean -d", as the case maybe, has been called.
> > This made it reasonable to replace
> > "test ! -[df] foo" with "test_path_is_missing foo".
>
> This is a good place to stop (but perhaps have a paragraph break
> before "In the tests control").  The "examples" you have below is
> like telling readers to go read the patch and verify the correctness
> of it themselves, which is not adding much value.
>
> Other than that, looking very good.
>
> Thanks.

Thank you very much, I have submitted an updated patch.
>
> >  t/t7300-clean.sh | 370 +++++++++++++++++++++++------------------------
> >  1 file changed, 185 insertions(+), 185 deletions(-)
> >
> > diff --git a/t/t7300-clean.sh b/t/t7300-clean.sh
> > index 0aae0dee670..5c97eb0dfe9 100755
> > --- a/t/t7300-clean.sh
> > +++ b/t/t7300-clean.sh
> > @@ -29,15 +29,15 @@ test_expect_success 'git clean with skip-worktree .gitignore' '
> >       mkdir -p build docs &&
> >       touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
> >       git clean &&
> > -     test -f Makefile &&
> > -     test -f README &&
> > -     test -f src/part1.c &&
> > -     test -f src/part2.c &&
> > -     test ! -f a.out &&
> > -     test ! -f src/part3.c &&
> > -     test -f docs/manual.txt &&
> > -     test -f obj.o &&
> > -     test -f build/lib.so &&
> > +     test_path_is_file Makefile &&
> > +     test_path_is_file README &&
> > +     test_path_is_file src/part1.c &&
> > +     test_path_is_file src/part2.c &&
> > +     test_path_is_missing a.out &&
> > +     test_path_is_missing src/part3.c &&
> > +     test_path_is_file docs/manual.txt &&
> > +     test_path_is_file obj.o &&
> > +     test_path_is_file build/lib.so &&
> >       git update-index --no-skip-worktree .gitignore &&
> >       git checkout .gitignore
> >  '
> > @@ -47,15 +47,15 @@ test_expect_success 'git clean' '
> >       mkdir -p build docs &&
> >       touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
> >       git clean &&
> > -     test -f Makefile &&
> > -     test -f README &&
> > -     test -f src/part1.c &&
> > -     test -f src/part2.c &&
> > -     test ! -f a.out &&
> > -     test ! -f src/part3.c &&
> > -     test -f docs/manual.txt &&
> > -     test -f obj.o &&
> > -     test -f build/lib.so
> > +     test_path_is_file Makefile &&
> > +     test_path_is_file README &&
> > +     test_path_is_file src/part1.c &&
> > +     test_path_is_file src/part2.c &&
> > +     test_path_is_missing a.out &&
> > +     test_path_is_missing src/part3.c &&
> > +     test_path_is_file docs/manual.txt &&
> > +     test_path_is_file obj.o &&
> > +     test_path_is_file build/lib.so
> >
> >  '
> >
> > @@ -64,15 +64,15 @@ test_expect_success 'git clean src/' '
> >       mkdir -p build docs &&
> >       touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
> >       git clean src/ &&
> > -     test -f Makefile &&
> > -     test -f README &&
> > -     test -f src/part1.c &&
> > -     test -f src/part2.c &&
> > -     test -f a.out &&
> > -     test ! -f src/part3.c &&
> > -     test -f docs/manual.txt &&
> > -     test -f obj.o &&
> > -     test -f build/lib.so
> > +     test_path_is_file Makefile &&
> > +     test_path_is_file README &&
> > +     test_path_is_file src/part1.c &&
> > +     test_path_is_file src/part2.c &&
> > +     test_path_is_file a.out &&
> > +     test_path_is_missing src/part3.c &&
> > +     test_path_is_file docs/manual.txt &&
> > +     test_path_is_file obj.o &&
> > +     test_path_is_file build/lib.so
> >
> >  '
> >
> > @@ -81,15 +81,15 @@ test_expect_success 'git clean src/ src/' '
> >       mkdir -p build docs &&
> >       touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
> >       git clean src/ src/ &&
> > -     test -f Makefile &&
> > -     test -f README &&
> > -     test -f src/part1.c &&
> > -     test -f src/part2.c &&
> > -     test -f a.out &&
> > -     test ! -f src/part3.c &&
> > -     test -f docs/manual.txt &&
> > -     test -f obj.o &&
> > -     test -f build/lib.so
> > +     test_path_is_file Makefile &&
> > +     test_path_is_file README &&
> > +     test_path_is_file src/part1.c &&
> > +     test_path_is_file src/part2.c &&
> > +     test_path_is_file a.out &&
> > +     test_path_is_missing src/part3.c &&
> > +     test_path_is_file docs/manual.txt &&
> > +     test_path_is_file obj.o &&
> > +     test_path_is_file build/lib.so
> >
> >  '
> >
> > @@ -98,16 +98,16 @@ test_expect_success 'git clean with prefix' '
> >       mkdir -p build docs src/test &&
> >       touch a.out src/part3.c docs/manual.txt obj.o build/lib.so src/test/1.c &&
> >       (cd src/ && git clean) &&
> > -     test -f Makefile &&
> > -     test -f README &&
> > -     test -f src/part1.c &&
> > -     test -f src/part2.c &&
> > -     test -f a.out &&
> > -     test ! -f src/part3.c &&
> > -     test -f src/test/1.c &&
> > -     test -f docs/manual.txt &&
> > -     test -f obj.o &&
> > -     test -f build/lib.so
> > +     test_path_is_file Makefile &&
> > +     test_path_is_file README &&
> > +     test_path_is_file src/part1.c &&
> > +     test_path_is_file src/part2.c &&
> > +     test_path_is_file a.out &&
> > +     test_path_is_missing src/part3.c &&
> > +     test_path_is_file src/test/1.c &&
> > +     test_path_is_file docs/manual.txt &&
> > +     test_path_is_file obj.o &&
> > +     test_path_is_file build/lib.so
> >
> >  '
> >
> > @@ -163,16 +163,16 @@ test_expect_success 'git clean -d with prefix and path' '
> >       mkdir -p build docs src/feature &&
> >       touch a.out src/part3.c src/feature/file.c docs/manual.txt obj.o build/lib.so &&
> >       (cd src/ && git clean -d feature/) &&
> > -     test -f Makefile &&
> > -     test -f README &&
> > -     test -f src/part1.c &&
> > -     test -f src/part2.c &&
> > -     test -f a.out &&
> > -     test -f src/part3.c &&
> > -     test ! -f src/feature/file.c &&
> > -     test -f docs/manual.txt &&
> > -     test -f obj.o &&
> > -     test -f build/lib.so
> > +     test_path_is_file Makefile &&
> > +     test_path_is_file README &&
> > +     test_path_is_file src/part1.c &&
> > +     test_path_is_file src/part2.c &&
> > +     test_path_is_file a.out &&
> > +     test_path_is_file src/part3.c &&
> > +     test_path_is_missing src/feature/file.c &&
> > +     test_path_is_file docs/manual.txt &&
> > +     test_path_is_file obj.o &&
> > +     test_path_is_file build/lib.so
> >
> >  '
> >
> > @@ -182,16 +182,16 @@ test_expect_success SYMLINKS 'git clean symbolic link' '
> >       touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
> >       ln -s docs/manual.txt src/part4.c &&
> >       git clean &&
> > -     test -f Makefile &&
> > -     test -f README &&
> > -     test -f src/part1.c &&
> > -     test -f src/part2.c &&
> > -     test ! -f a.out &&
> > -     test ! -f src/part3.c &&
> > -     test ! -f src/part4.c &&
> > -     test -f docs/manual.txt &&
> > -     test -f obj.o &&
> > -     test -f build/lib.so
> > +     test_path_is_file Makefile &&
> > +     test_path_is_file README &&
> > +     test_path_is_file src/part1.c &&
> > +     test_path_is_file src/part2.c &&
> > +     test_path_is_missing a.out &&
> > +     test_path_is_missing src/part3.c &&
> > +     test_path_is_missing src/part4.c &&
> > +     test_path_is_file docs/manual.txt &&
> > +     test_path_is_file obj.o &&
> > +     test_path_is_file build/lib.so
> >
> >  '
> >
> > @@ -199,13 +199,13 @@ test_expect_success 'git clean with wildcard' '
> >
> >       touch a.clean b.clean other.c &&
> >       git clean "*.clean" &&
> > -     test -f Makefile &&
> > -     test -f README &&
> > -     test -f src/part1.c &&
> > -     test -f src/part2.c &&
> > -     test ! -f a.clean &&
> > -     test ! -f b.clean &&
> > -     test -f other.c
> > +     test_path_is_file Makefile &&
> > +     test_path_is_file README &&
> > +     test_path_is_file src/part1.c &&
> > +     test_path_is_file src/part2.c &&
> > +     test_path_is_missing a.clean &&
> > +     test_path_is_missing b.clean &&
> > +     test_path_is_file other.c
> >
> >  '
> >
> > @@ -214,15 +214,15 @@ test_expect_success 'git clean -n' '
> >       mkdir -p build docs &&
> >       touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
> >       git clean -n &&
> > -     test -f Makefile &&
> > -     test -f README &&
> > -     test -f src/part1.c &&
> > -     test -f src/part2.c &&
> > -     test -f a.out &&
> > -     test -f src/part3.c &&
> > -     test -f docs/manual.txt &&
> > -     test -f obj.o &&
> > -     test -f build/lib.so
> > +     test_path_is_file Makefile &&
> > +     test_path_is_file README &&
> > +     test_path_is_file src/part1.c &&
> > +     test_path_is_file src/part2.c &&
> > +     test_path_is_file a.out &&
> > +     test_path_is_file src/part3.c &&
> > +     test_path_is_file docs/manual.txt &&
> > +     test_path_is_file obj.o &&
> > +     test_path_is_file build/lib.so
> >
> >  '
> >
> > @@ -231,15 +231,15 @@ test_expect_success 'git clean -d' '
> >       mkdir -p build docs &&
> >       touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
> >       git clean -d &&
> > -     test -f Makefile &&
> > -     test -f README &&
> > -     test -f src/part1.c &&
> > -     test -f src/part2.c &&
> > -     test ! -f a.out &&
> > -     test ! -f src/part3.c &&
> > -     test ! -d docs &&
> > -     test -f obj.o &&
> > -     test -f build/lib.so
> > +     test_path_is_file Makefile &&
> > +     test_path_is_file README &&
> > +     test_path_is_file src/part1.c &&
> > +     test_path_is_file src/part2.c &&
> > +     test_path_is_missing a.out &&
> > +     test_path_is_missing src/part3.c &&
> > +     test_path_is_missing docs &&
> > +     test_path_is_file obj.o &&
> > +     test_path_is_file build/lib.so
> >
> >  '
> >
> > @@ -248,16 +248,16 @@ test_expect_success 'git clean -d src/ examples/' '
> >       mkdir -p build docs examples &&
> >       touch a.out src/part3.c docs/manual.txt obj.o build/lib.so examples/1.c &&
> >       git clean -d src/ examples/ &&
> > -     test -f Makefile &&
> > -     test -f README &&
> > -     test -f src/part1.c &&
> > -     test -f src/part2.c &&
> > -     test -f a.out &&
> > -     test ! -f src/part3.c &&
> > -     test ! -f examples/1.c &&
> > -     test -f docs/manual.txt &&
> > -     test -f obj.o &&
> > -     test -f build/lib.so
> > +     test_path_is_file Makefile &&
> > +     test_path_is_file README &&
> > +     test_path_is_file src/part1.c &&
> > +     test_path_is_file src/part2.c &&
> > +     test_path_is_file a.out &&
> > +     test_path_is_missing src/part3.c &&
> > +     test_path_is_missing examples/1.c &&
> > +     test_path_is_file docs/manual.txt &&
> > +     test_path_is_file obj.o &&
> > +     test_path_is_file build/lib.so
> >
> >  '
> >
> > @@ -266,15 +266,15 @@ test_expect_success 'git clean -x' '
> >       mkdir -p build docs &&
> >       touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
> >       git clean -x &&
> > -     test -f Makefile &&
> > -     test -f README &&
> > -     test -f src/part1.c &&
> > -     test -f src/part2.c &&
> > -     test ! -f a.out &&
> > -     test ! -f src/part3.c &&
> > -     test -f docs/manual.txt &&
> > -     test ! -f obj.o &&
> > -     test -f build/lib.so
> > +     test_path_is_file Makefile &&
> > +     test_path_is_file README &&
> > +     test_path_is_file src/part1.c &&
> > +     test_path_is_file src/part2.c &&
> > +     test_path_is_missing a.out &&
> > +     test_path_is_missing src/part3.c &&
> > +     test_path_is_file docs/manual.txt &&
> > +     test_path_is_missing obj.o &&
> > +     test_path_is_file build/lib.so
> >
> >  '
> >
> > @@ -283,15 +283,15 @@ test_expect_success 'git clean -d -x' '
> >       mkdir -p build docs &&
> >       touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
> >       git clean -d -x &&
> > -     test -f Makefile &&
> > -     test -f README &&
> > -     test -f src/part1.c &&
> > -     test -f src/part2.c &&
> > -     test ! -f a.out &&
> > -     test ! -f src/part3.c &&
> > -     test ! -d docs &&
> > -     test ! -f obj.o &&
> > -     test ! -d build
> > +     test_path_is_file Makefile &&
> > +     test_path_is_file README &&
> > +     test_path_is_file src/part1.c &&
> > +     test_path_is_file src/part2.c &&
> > +     test_path_is_missing a.out &&
> > +     test_path_is_missing src/part3.c &&
> > +     test_path_is_missing docs &&
> > +     test_path_is_missing obj.o &&
> > +     test_path_is_missing build
> >
> >  '
> >
> > @@ -300,15 +300,15 @@ test_expect_success 'git clean -d -x with ignored tracked directory' '
> >       mkdir -p build docs &&
> >       touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
> >       git clean -d -x -e src &&
> > -     test -f Makefile &&
> > -     test -f README &&
> > -     test -f src/part1.c &&
> > -     test -f src/part2.c &&
> > -     test ! -f a.out &&
> > -     test -f src/part3.c &&
> > -     test ! -d docs &&
> > -     test ! -f obj.o &&
> > -     test ! -d build
> > +     test_path_is_file Makefile &&
> > +     test_path_is_file README &&
> > +     test_path_is_file src/part1.c &&
> > +     test_path_is_file src/part2.c &&
> > +     test_path_is_missing a.out &&
> > +     test_path_is_file src/part3.c &&
> > +     test_path_is_missing docs &&
> > +     test_path_is_missing obj.o &&
> > +     test_path_is_missing build
> >
> >  '
> >
> > @@ -317,15 +317,15 @@ test_expect_success 'git clean -X' '
> >       mkdir -p build docs &&
> >       touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
> >       git clean -X &&
> > -     test -f Makefile &&
> > -     test -f README &&
> > -     test -f src/part1.c &&
> > -     test -f src/part2.c &&
> > -     test -f a.out &&
> > -     test -f src/part3.c &&
> > -     test -f docs/manual.txt &&
> > -     test ! -f obj.o &&
> > -     test -f build/lib.so
> > +     test_path_is_file Makefile &&
> > +     test_path_is_file README &&
> > +     test_path_is_file src/part1.c &&
> > +     test_path_is_file src/part2.c &&
> > +     test_path_is_file a.out &&
> > +     test_path_is_file src/part3.c &&
> > +     test_path_is_file docs/manual.txt &&
> > +     test_path_is_missing obj.o &&
> > +     test_path_is_file build/lib.so
> >
> >  '
> >
> > @@ -334,15 +334,15 @@ test_expect_success 'git clean -d -X' '
> >       mkdir -p build docs &&
> >       touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
> >       git clean -d -X &&
> > -     test -f Makefile &&
> > -     test -f README &&
> > -     test -f src/part1.c &&
> > -     test -f src/part2.c &&
> > -     test -f a.out &&
> > -     test -f src/part3.c &&
> > -     test -f docs/manual.txt &&
> > -     test ! -f obj.o &&
> > -     test ! -d build
> > +     test_path_is_file Makefile &&
> > +     test_path_is_file README &&
> > +     test_path_is_file src/part1.c &&
> > +     test_path_is_file src/part2.c &&
> > +     test_path_is_file a.out &&
> > +     test_path_is_file src/part3.c &&
> > +     test_path_is_file docs/manual.txt &&
> > +     test_path_is_missing obj.o &&
> > +     test_path_is_missing build
> >
> >  '
> >
> > @@ -351,15 +351,15 @@ test_expect_success 'git clean -d -X with ignored tracked directory' '
> >       mkdir -p build docs &&
> >       touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
> >       git clean -d -X -e src &&
> > -     test -f Makefile &&
> > -     test -f README &&
> > -     test -f src/part1.c &&
> > -     test -f src/part2.c &&
> > -     test -f a.out &&
> > -     test ! -f src/part3.c &&
> > -     test -f docs/manual.txt &&
> > -     test ! -f obj.o &&
> > -     test ! -d build
> > +     test_path_is_file Makefile &&
> > +     test_path_is_file README &&
> > +     test_path_is_file src/part1.c &&
> > +     test_path_is_file src/part2.c &&
> > +     test_path_is_file a.out &&
> > +     test_path_is_missing src/part3.c &&
> > +     test_path_is_file docs/manual.txt &&
> > +     test_path_is_missing obj.o &&
> > +     test_path_is_missing build
> >
> >  '
> >
> > @@ -382,29 +382,29 @@ test_expect_success 'clean.requireForce and -n' '
> >       mkdir -p build docs &&
> >       touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
> >       git clean -n &&
> > -     test -f Makefile &&
> > -     test -f README &&
> > -     test -f src/part1.c &&
> > -     test -f src/part2.c &&
> > -     test -f a.out &&
> > -     test -f src/part3.c &&
> > -     test -f docs/manual.txt &&
> > -     test -f obj.o &&
> > -     test -f build/lib.so
> > +     test_path_is_file Makefile &&
> > +     test_path_is_file README &&
> > +     test_path_is_file src/part1.c &&
> > +     test_path_is_file src/part2.c &&
> > +     test_path_is_file a.out &&
> > +     test_path_is_file src/part3.c &&
> > +     test_path_is_file docs/manual.txt &&
> > +     test_path_is_file obj.o &&
> > +     test_path_is_file build/lib.so
> >
> >  '
> >
> >  test_expect_success 'clean.requireForce and -f' '
> >
> >       git clean -f &&
> > -     test -f README &&
> > -     test -f src/part1.c &&
> > -     test -f src/part2.c &&
> > -     test ! -f a.out &&
> > -     test ! -f src/part3.c &&
> > -     test -f docs/manual.txt &&
> > -     test -f obj.o &&
> > -     test -f build/lib.so
> > +     test_path_is_file README &&
> > +     test_path_is_file src/part1.c &&
> > +     test_path_is_file src/part2.c &&
> > +     test_path_is_missing a.out &&
> > +     test_path_is_missing src/part3.c &&
> > +     test_path_is_file docs/manual.txt &&
> > +     test_path_is_file obj.o &&
> > +     test_path_is_file build/lib.so
> >
> >  '
> >
> > @@ -453,11 +453,11 @@ test_expect_success 'nested git work tree' '
> >               test_commit deeply.nested deeper.world
> >       ) &&
> >       git clean -f -d &&
> > -     test -f foo/.git/index &&
> > -     test -f foo/hello.world &&
> > -     test -f baz/boo/.git/index &&
> > -     test -f baz/boo/deeper.world &&
> > -     ! test -d bar
> > +     test_path_is_file foo/.git/index &&
> > +     test_path_is_file foo/hello.world &&
> > +     test_path_is_file baz/boo/.git/index &&
> > +     test_path_is_file baz/boo/deeper.world &&
> > +     test_path_is_missing bar
> >  '
> >
> >  test_expect_success 'should clean things that almost look like git but are not' '
> > @@ -624,9 +624,9 @@ test_expect_success 'force removal of nested git work tree' '
> >               test_commit deeply.nested deeper.world
> >       ) &&
> >       git clean -f -f -d &&
> > -     ! test -d foo &&
> > -     ! test -d bar &&
> > -     ! test -d baz
> > +     test_path_is_missing foo &&
> > +     test_path_is_missing bar &&
> > +     test_path_is_missing baz
> >  '
> >
> >  test_expect_success 'git clean -e' '
> > @@ -638,10 +638,10 @@ test_expect_success 'git clean -e' '
> >               touch known 1 2 3 &&
> >               git add known &&
> >               git clean -f -e 1 -e 2 &&
> > -             test -e 1 &&
> > -             test -e 2 &&
> > -             ! (test -e 3) &&
> > -             test -e known
> > +             test_path_exists 1 &&
> > +             test_path_exists 2 &&
> > +             test_path_is_missing 3 &&
> > +             test_path_exists known
> >       )
> >  '
> >
> > @@ -649,7 +649,7 @@ test_expect_success SANITY 'git clean -d with an unreadable empty directory' '
> >       mkdir foo &&
> >       chmod a= foo &&
> >       git clean -dfx foo &&
> > -     ! test -d foo
> > +     test_path_is_missing foo
> >  '
> >
> >  test_expect_success 'git clean -d respects pathspecs (dir is prefix of pathspec)' '
> >
> > base-commit: 90fe3800b92a49173530828c0a17951abd30f0e1





[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux