git p4: cygwin p4 client does not mark read-only
authorPete Wyckoff <pw@padd.com>
Sun, 27 Jan 2013 03:11:17 +0000 (22:11 -0500)
committerJunio C Hamano <gitster@pobox.com>
Sun, 27 Jan 2013 06:00:39 +0000 (22:00 -0800)
There are some old versions of p4, compiled for cygwin, that
treat read-only files differently.

Normally, a file that is not open is read-only, meaning that
"test -w" on the file is false.  This works on unix, and it works
on windows using the NT version of p4.  The cygwin version
of p4, though, changes the permissions, but does not set the
windows read-only attribute, so "test -w" returns false.

Notice this oddity and make the tests work, even on cygiwn.

Signed-off-by: Pete Wyckoff <pw@padd.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/lib-git-p4.sh
t/t9807-git-p4-submit.sh
t/t9809-git-p4-client-view.sh

index 67101b104caf16cdce83e4aa682b759ab3a2d04e..2098b9ba053b09b00ed4382aa55ea0802d749d89 100644 (file)
@@ -148,3 +148,16 @@ client_view() {
                printf "\t%s\n" "$@"
        ) | p4 client -i
 }
+
+is_cli_file_writeable() {
+       # cygwin version of p4 does not set read-only attr,
+       # will be marked 444 but -w is true
+       file="$1" &&
+       if test_have_prereq CYGWIN && p4 -V | grep -q CYGWIN
+       then
+               stat=$(stat --format=%a "$file") &&
+               test $stat = 644
+       else
+               test -w "$file"
+       fi
+}
index 0ae048f29f548eac6cfa37fbabcd9b7f80440515..1fb7bc7cf98bdbdf89491c687e6347cda673d720 100755 (executable)
@@ -17,6 +17,16 @@ test_expect_success 'init depot' '
        )
 '
 
+test_expect_failure 'is_cli_file_writeable function' '
+       (
+               cd "$cli" &&
+               echo a >a &&
+               is_cli_file_writeable a &&
+               ! is_cli_file_writeable file1 &&
+               rm a
+       )
+'
+
 test_expect_success 'submit with no client dir' '
        test_when_finished cleanup_git &&
        git p4 clone --dest="$git" //depot &&
@@ -200,7 +210,7 @@ test_expect_success 'submit copy' '
        (
                cd "$cli" &&
                test_path_is_file file5.ta &&
-               test ! -w file5.ta
+               ! is_cli_file_writeable file5.ta
        )
 '
 
@@ -219,7 +229,7 @@ test_expect_success 'submit rename' '
                cd "$cli" &&
                test_path_is_missing file6.t &&
                test_path_is_file file6.ta &&
-               test ! -w file6.ta
+               ! is_cli_file_writeable file6.ta
        )
 '
 
index a9119889ffe42780e2dd23dfb619c8cf27dc9053..77f63492d90e61500e6665ba447fbbad7a8c7b3b 100755 (executable)
@@ -333,7 +333,7 @@ test_expect_success 'subdir clone, submit copy' '
        (
                cd "$cli" &&
                test_path_is_file dir1/file11a &&
-               test ! -w dir1/file11a
+               ! is_cli_file_writeable dir1/file11a
        )
 '
 
@@ -353,7 +353,7 @@ test_expect_success 'subdir clone, submit rename' '
                cd "$cli" &&
                test_path_is_missing dir1/file13 &&
                test_path_is_file dir1/file13a &&
-               test ! -w dir1/file13a
+               ! is_cli_file_writeable dir1/file13a
        )
 '