merge-recursive: align labels with their respective code blocks
[gitweb.git] / t / t1400-update-ref.sh
index dc98b4bc6dc7aab41eca38d9e1086ad2b6701fd3..e1fd0f0ca8b5d731d79ccca1d6e6140683a3665f 100755 (executable)
@@ -6,7 +6,7 @@
 test_description='Test git update-ref and basic ref logging'
 . ./test-lib.sh
 
-Z=$_z40
+Z=$ZERO_OID
 
 m=refs/heads/master
 n_dir=refs/heads/gu
@@ -457,6 +457,66 @@ test_expect_success 'git cat-file blob master@{2005-05-26 23:42}:F (expect OTHER
        test OTHER = $(git cat-file blob "master@{2005-05-26 23:42}:F")
 '
 
+# Test adding and deleting pseudorefs
+
+test_expect_success 'given old value for missing pseudoref, do not create' '
+       test_must_fail git update-ref PSEUDOREF $A $B 2>err &&
+       test_path_is_missing .git/PSEUDOREF &&
+       grep "could not read ref" err
+'
+
+test_expect_success 'create pseudoref' '
+       git update-ref PSEUDOREF $A &&
+       test $A = $(cat .git/PSEUDOREF)
+'
+
+test_expect_success 'overwrite pseudoref with no old value given' '
+       git update-ref PSEUDOREF $B &&
+       test $B = $(cat .git/PSEUDOREF)
+'
+
+test_expect_success 'overwrite pseudoref with correct old value' '
+       git update-ref PSEUDOREF $C $B &&
+       test $C = $(cat .git/PSEUDOREF)
+'
+
+test_expect_success 'do not overwrite pseudoref with wrong old value' '
+       test_must_fail git update-ref PSEUDOREF $D $E 2>err &&
+       test $C = $(cat .git/PSEUDOREF) &&
+       grep "unexpected object ID" err
+'
+
+test_expect_success 'delete pseudoref' '
+       git update-ref -d PSEUDOREF &&
+       test_path_is_missing .git/PSEUDOREF
+'
+
+test_expect_success 'do not delete pseudoref with wrong old value' '
+       git update-ref PSEUDOREF $A &&
+       test_must_fail git update-ref -d PSEUDOREF $B 2>err &&
+       test $A = $(cat .git/PSEUDOREF) &&
+       grep "unexpected object ID" err
+'
+
+test_expect_success 'delete pseudoref with correct old value' '
+       git update-ref -d PSEUDOREF $A &&
+       test_path_is_missing .git/PSEUDOREF
+'
+
+test_expect_success 'create pseudoref with old OID zero' '
+       git update-ref PSEUDOREF $A $Z &&
+       test $A = $(cat .git/PSEUDOREF)
+'
+
+test_expect_success 'do not overwrite pseudoref with old OID zero' '
+       test_when_finished git update-ref -d PSEUDOREF &&
+       test_must_fail git update-ref PSEUDOREF $B $Z 2>err &&
+       test $A = $(cat .git/PSEUDOREF) &&
+       grep "already exists" err
+'
+
+# Test --stdin
+
 a=refs/heads/a
 b=refs/heads/b
 c=refs/heads/c
@@ -1253,7 +1313,10 @@ run_with_limited_open_files () {
        (ulimit -n 32 && "$@")
 }
 
-test_lazy_prereq ULIMIT_FILE_DESCRIPTORS 'run_with_limited_open_files true'
+test_lazy_prereq ULIMIT_FILE_DESCRIPTORS '
+       test_have_prereq !MINGW,!CYGWIN &&
+       run_with_limited_open_files true
+'
 
 test_expect_success ULIMIT_FILE_DESCRIPTORS 'large transaction creating branches does not burst open file limit' '
 (