Merge branch 'cb/maint-orphan-merge-noclobber'
[gitweb.git] / t / t9300-fast-import.sh
index 2aeed7bd0601a0587f99250377001be6287772e5..14d17691b1c48e2b3211812a16d6dda7e83ad31a 100755 (executable)
@@ -321,7 +321,7 @@ test_expect_success \
        'for p in .git/objects/pack/*.pack;do git verify-pack $p||exit;done'
 test_expect_success \
        'C: validate reuse existing blob' \
-       'test $newf = `git rev-parse --verify branch:file2/newf`
+       'test $newf = `git rev-parse --verify branch:file2/newf` &&
         test $oldf = `git rev-parse --verify branch:file2/oldf`'
 
 cat >expect <<EOF
@@ -853,6 +853,81 @@ test_expect_success \
        'git fast-import <input &&
         test `git rev-parse N2^{tree}` = `git rev-parse N3^{tree}`'
 
+test_expect_success \
+       'N: copy directory by id' \
+       'cat >expect <<-\EOF &&
+       :100755 100755 f1fb5da718392694d0076d677d6d0e364c79b0bc f1fb5da718392694d0076d677d6d0e364c79b0bc C100   file2/newf      file3/newf
+       :100644 100644 7123f7f44e39be127c5eb701e5968176ee9d78b1 7123f7f44e39be127c5eb701e5968176ee9d78b1 C100   file2/oldf      file3/oldf
+       EOF
+        subdir=$(git rev-parse refs/heads/branch^0:file2) &&
+        cat >input <<-INPUT_END &&
+       commit refs/heads/N4
+       committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
+       data <<COMMIT
+       copy by tree hash
+       COMMIT
+
+       from refs/heads/branch^0
+       M 040000 $subdir file3
+       INPUT_END
+        git fast-import <input &&
+        git diff-tree -C --find-copies-harder -r N4^ N4 >actual &&
+        compare_diff_raw expect actual'
+
+test_expect_success \
+       'N: copy root directory by tree hash' \
+       'cat >expect <<-\EOF &&
+       :100755 000000 f1fb5da718392694d0076d677d6d0e364c79b0bc 0000000000000000000000000000000000000000 D      file3/newf
+       :100644 000000 7123f7f44e39be127c5eb701e5968176ee9d78b1 0000000000000000000000000000000000000000 D      file3/oldf
+       EOF
+        root=$(git rev-parse refs/heads/branch^0^{tree}) &&
+        cat >input <<-INPUT_END &&
+       commit refs/heads/N6
+       committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
+       data <<COMMIT
+       copy root directory by tree hash
+       COMMIT
+
+       from refs/heads/branch^0
+       M 040000 $root ""
+       INPUT_END
+        git fast-import <input &&
+        git diff-tree -C --find-copies-harder -r N4 N6 >actual &&
+        compare_diff_raw expect actual'
+
+test_expect_success \
+       'N: modify copied tree' \
+       'cat >expect <<-\EOF &&
+       :100644 100644 fcf778cda181eaa1cbc9e9ce3a2e15ee9f9fe791 fcf778cda181eaa1cbc9e9ce3a2e15ee9f9fe791 C100   newdir/interesting      file3/file5
+       :100755 100755 f1fb5da718392694d0076d677d6d0e364c79b0bc f1fb5da718392694d0076d677d6d0e364c79b0bc C100   file2/newf      file3/newf
+       :100644 100644 7123f7f44e39be127c5eb701e5968176ee9d78b1 7123f7f44e39be127c5eb701e5968176ee9d78b1 C100   file2/oldf      file3/oldf
+       EOF
+        subdir=$(git rev-parse refs/heads/branch^0:file2) &&
+        cat >input <<-INPUT_END &&
+       commit refs/heads/N5
+       committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
+       data <<COMMIT
+       copy by tree hash
+       COMMIT
+
+       from refs/heads/branch^0
+       M 040000 $subdir file3
+
+       commit refs/heads/N5
+       committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
+       data <<COMMIT
+       modify directory copy
+       COMMIT
+
+       M 644 inline file3/file5
+       data <<EOF
+       $file5_data
+       EOF
+       INPUT_END
+        git fast-import <input &&
+        git diff-tree -C --find-copies-harder -r N5^^ N5 >actual &&
+        compare_diff_raw expect actual'
+
 ###
 ### series O
 ###
@@ -1056,11 +1131,10 @@ test_expect_success \
        'P: supermodule & submodule mix' \
        'git fast-import <input &&
         git checkout subuse1 &&
-        rm -rf sub && mkdir sub && cd sub &&
+        rm -rf sub && mkdir sub && (cd sub &&
         git init &&
         git fetch --update-head-ok .. refs/heads/sub:refs/heads/master &&
-        git checkout master &&
-        cd .. &&
+        git checkout master) &&
         git submodule init &&
         git submodule update'