Merge branch 'maint'
[gitweb.git] / t / t7701-repack-unpack-unreachable.sh
index 6a5211f1873be6a8bb80404cda34751c46f26e86..63a8225ae5c7ffc265e28c9bf17bbec87ab339d8 100755 (executable)
@@ -1,10 +1,14 @@
 #!/bin/sh
 
-test_description='git-repack works correctly'
+test_description='git repack works correctly'
 
 . ./test-lib.sh
 
-test_expect_success '-A option leaves unreachable objects unpacked' '
+fsha1=
+csha1=
+tsha1=
+
+test_expect_success '-A with -d option leaves unreachable objects unpacked' '
        echo content > file1 &&
        git add . &&
        git commit -m initial_commit &&
@@ -25,7 +29,7 @@ test_expect_success '-A option leaves unreachable objects unpacked' '
        git repack -A -d -l &&
        # verify objects are packed in repository
        test 3 = $(git verify-pack -v -- .git/objects/pack/*.idx |
-                  grep -e "^$fsha1 " -e "^$csha1 " -e "^$tsha1 " |
+                  egrep "^($fsha1|$csha1|$tsha1) " |
                   sort | uniq | wc -l) &&
        git show $fsha1 &&
        git show $csha1 &&
@@ -37,11 +41,53 @@ test_expect_success '-A option leaves unreachable objects unpacked' '
        git repack -A -d -l &&
        # verify objects are retained unpacked
        test 0 = $(git verify-pack -v -- .git/objects/pack/*.idx |
-                  grep -e "^$fsha1 " -e "^$csha1 " -e "^$tsha1 " |
+                  egrep "^($fsha1|$csha1|$tsha1) " |
                   sort | uniq | wc -l) &&
        git show $fsha1 &&
        git show $csha1 &&
        git show $tsha1
 '
 
+compare_mtimes ()
+{
+       perl -e 'my $reference = shift;
+                foreach my $file (@ARGV) {
+                       exit(1) unless(-f $file && -M $file == -M $reference);
+                }
+                exit(0);
+               ' -- "$@"
+}
+
+test_expect_success '-A without -d option leaves unreachable objects packed' '
+       fsha1path=$(echo "$fsha1" | sed -e "s|\(..\)|\1/|") &&
+       fsha1path=".git/objects/$fsha1path" &&
+       csha1path=$(echo "$csha1" | sed -e "s|\(..\)|\1/|") &&
+       csha1path=".git/objects/$csha1path" &&
+       tsha1path=$(echo "$tsha1" | sed -e "s|\(..\)|\1/|") &&
+       tsha1path=".git/objects/$tsha1path" &&
+       git branch transient_branch $csha1 &&
+       git repack -a -d -l &&
+       test ! -f "$fsha1path" &&
+       test ! -f "$csha1path" &&
+       test ! -f "$tsha1path" &&
+       test 1 = $(ls -1 .git/objects/pack/pack-*.pack | wc -l) &&
+       packfile=$(ls .git/objects/pack/pack-*.pack) &&
+       git branch -D transient_branch &&
+       sleep 1 &&
+       git repack -A -l &&
+       test ! -f "$fsha1path" &&
+       test ! -f "$csha1path" &&
+       test ! -f "$tsha1path" &&
+       git show $fsha1 &&
+       git show $csha1 &&
+       git show $tsha1
+'
+
+test_expect_success 'unpacked objects receive timestamp of pack file' '
+       tmppack=".git/objects/pack/tmp_pack" &&
+       ln "$packfile" "$tmppack" &&
+       git repack -A -l -d &&
+       compare_mtimes "$tmppack" "$fsha1path" "$csha1path" "$tsha1path"
+'
+
 test_done