diff mbox

[v3,0/3] replace test [-f|-d] with more verbose functions

Message ID 20220222215430.605254-1-cogoni.guillaume@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Guillaume Cogoni Feb. 22, 2022, 9:54 p.m. UTC
Make the code more readable in t/t3903-stash.sh and give more 
friendly error message by replacing test [-f|-d] by the right 
test_path_is_* functions.
Add new functions like test_path_is_* to cover more specifics 
cases like symbolic link or file that we explicitly refuse
to be symbolic link.

> On 18/11/2022, Junio ​​C Hamano wrote:

> The "ls -l" parsing the original does is to check how "stash apply"
> recovers the stashed state, where "file" wants to be a symbolic link
> and it wants to be pointing at "file2".

> It seems we have test_readlink() available these days, so with a
> separate clean-up patch, you may want to make the final version
> to read something like this, perhaps?

> I am not sure what test_readlink which is a one-liner Perl script
> does when it is fed a non symbolic link, so I do not know if the
> "path is truly a file and not a symlink"

-	case "$(ls -l file)" in *" file -> file2") :;; *) false;; esac    
+	test_path_is_symlink file &&
+	test "$(test_readlink file)" = file2

Firstly, we check if file is a symbolic link then if it is a symbolic link
on file2.
We check if it is a symbolic link because test_readlink() raise an error 
if we give it something that is not a symbolic link and this error is less
readable.

> Why not
> 	if test -h "$1"
> instead???  I think "is truly a dir not a symlink" has the same
> "Huh?" puzzle.

We fixed it.



COGONI Guillaume (3):
  t/t3903-stash.sh: replace test [-d|-f] with test_path_is_*
  tests: allow testing if a path is truly a file or a directory
  tests: make the code more readable

 t/t3903-stash.sh        | 21 ++++++++++++---------
 t/test-lib-functions.sh | 29 +++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+), 9 deletions(-)


Difference between V2 and V3.

Comments

Junio C Hamano Feb. 23, 2022, 10:59 p.m. UTC | #1
COGONI Guillaume <cogoni.guillaume@gmail.com> writes:

> Make the code more readable in t/t3903-stash.sh and give more 
> friendly error message by replacing test [-f|-d] by the right 
> test_path_is_* functions.
> Add new functions like test_path_is_* to cover more specifics 
> cases like symbolic link or file that we explicitly refuse
> to be symbolic link.

All three look good to me.

Will queue.

As a possible #leftoverbits material, I suspect that we would
eventually want to be able to say

	test_path_is_file ! "$error_if_I_am_a_file"
	test_path_is_dir ! "$error_if_I_am_a_dir"
	test_path_is_symlink ! "$error_if_I_am_a_symlink"

so that we do not have to have the two ugly-looking special-case
combination "test_path_is_X_not_symlink" but just express what we
want with

	test_path_is_file "$path" && test_path_is_symlink ! "$path"

Once that happens, the two helpers introduced with 2/3 of this
series would become

	test_path_is_file_not_symlink () {
		test $# = 1 || BUG "1 param"
		test_path_is_file "$1" &&
		test_path_is_symlink ! "$1"
	}

But I do not want to see that as part of this series.  Let's
conclude this series and declare a success.

Thanks.
Guillaume Cogoni Feb. 24, 2022, 6:22 p.m. UTC | #2
Hello,

Thanks everyone for your help and reviews.
See you next time in the mailing list for some new patches or reviews.

Sincerly,

COGONI Guillaume and BRESSAT Jonathan
diff mbox

Patch

diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh
index 0ec19a4499..d5ecee4fcc 100755
--- a/t/t3903-stash.sh
+++ b/t/t3903-stash.sh
@@ -392,7 +392,9 @@  test_expect_success SYMLINKS 'stash file to symlink' '
        git stash save "file to symlink" &&
        test_path_is_file_not_symlink file &&
        test bar = "$(cat file)" &&
-       git stash apply
+       git stash apply &&
+       test_path_is_symlink file &&
+       test "$(test_readlink file)" = file2
 '
 
 test_expect_success SYMLINKS 'stash file to symlink (stage rm)' '
@@ -402,7 +404,9 @@  test_expect_success SYMLINKS 'stash file to symlink (stage rm)' '
        git stash save "file to symlink (stage rm)" &&
        test_path_is_file_not_symlink file &&
        test bar = "$(cat file)" &&
-       git stash apply
+       git stash apply &&
+       test_path_is_symlink file &&
+       test "$(test_readlink file)" = file2
 '
 
 test_expect_success SYMLINKS 'stash file to symlink (full stage)' '
@@ -413,7 +417,9 @@  test_expect_success SYMLINKS 'stash file to symlink (full stage)' '
        git stash save "file to symlink (full stage)" &&
        test_path_is_file_not_symlink file &&
        test bar = "$(cat file)" &&
-       git stash apply
+       git stash apply &&
+       test_path_is_symlink file &&
+       test "$(test_readlink file)" = file2
 '
 
 # This test creates a commit with a symlink used for the following tests
diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
index 61fc5f37e3..0f439c99d6 100644
--- a/t/test-lib-functions.sh
+++ b/t/test-lib-functions.sh
@@ -859,9 +859,9 @@  test_path_is_file () {
 test_path_is_file_not_symlink () {
        test "$#" -ne 1 && BUG "1 param"
        test_path_is_file "$1" &&
-       if ! test ! -h "$1"
+       if test -h "$1"
        then
-               echo "$1 is a symbolic link"
+               echo "$1 shouldn't be a symbolic link"
                false
        fi
 }
@@ -878,9 +878,9 @@  test_path_is_dir () {
 test_path_is_dir_not_symlink () {
        test "$#" -ne 1 && BUG "1 param"
        test_path_is_dir "$1" &&
-       if ! test ! -h "$1"
+       if test -h "$1"
        then
-               echo "$1 is a symbolic link"
+               echo "$1 shouldn't be a symbolic link"
                false
        fi
 }
@@ -894,6 +894,15 @@  test_path_exists () {
        fi
 }
 
+test_path_is_symlink () {
+       test "$#" -ne 1 && BUG "1 param"
+       if ! test -h "$1"
+       then
+               echo "Symbolic link $1 doesn't exist"
+               false
+       fi
+}
+

-- 
2.25.1