# Copyright (c) 2007 Shawn Pearce
#
-test_description='test git-fast-import utility'
+test_description='test git fast-import utility'
. ./test-lib.sh
-. ../diff-lib.sh ;# test-lib chdir's into trash
+. "$TEST_DIRECTORY"/diff-lib.sh ;# test-lib chdir's into trash
file2_data='file2
second line of EOF'
M 644 :3 file3
M 755 :4 file4
+tag series-A
+from :5
+data <<EOF
+An annotated tag without a tagger
+EOF
+
INPUT_END
test_expect_success \
'A: create pack from stdin' \
- 'git-fast-import --export-marks=marks.out <input &&
+ 'git fast-import --export-marks=marks.out <input &&
git whatchanged master'
test_expect_success \
'A: verify pack' \
'A: verify file4' \
'git cat-file blob master:file4 >actual && test_cmp expect actual'
+cat >expect <<EOF
+object $(git rev-parse refs/heads/master)
+type commit
+tag series-A
+
+An annotated tag without a tagger
+EOF
+test_expect_success 'A: verify tag/series-A' '
+ git cat-file tag tags/series-A >actual &&
+ test_cmp expect actual
+'
+
cat >expect <<EOF
:2 `git rev-parse --verify master:file2`
:3 `git rev-parse --verify master:file3`
test_expect_success \
'A: verify marks import' \
- 'git-fast-import \
+ 'git fast-import \
--import-marks=marks.out \
--export-marks=marks.new \
</dev/null &&
INPUT_END
test_expect_success \
'A: verify marks import does not crash' \
- 'git-fast-import --import-marks=marks.out <input &&
+ 'git fast-import --import-marks=marks.out <input &&
git whatchanged verify--import-marks'
test_expect_success \
'A: verify pack' \
INPUT_END
test_expect_success 'B: fail on invalid blob sha1' '
- test_must_fail git-fast-import <input
+ test_must_fail git fast-import <input
'
rm -f .git/objects/pack_* .git/objects/index_*
INPUT_END
test_expect_success 'B: fail on invalid branch name ".badbranchname"' '
- test_must_fail git-fast-import <input
+ test_must_fail git fast-import <input
'
rm -f .git/objects/pack_* .git/objects/index_*
INPUT_END
test_expect_success 'B: fail on invalid branch name "bad[branch]name"' '
- test_must_fail git-fast-import <input
+ test_must_fail git fast-import <input
'
rm -f .git/objects/pack_* .git/objects/index_*
INPUT_END
test_expect_success \
'B: accept branch name "TEMP_TAG"' \
- 'git-fast-import <input &&
+ 'git fast-import <input &&
test -f .git/TEMP_TAG &&
test `git rev-parse master` = `git rev-parse TEMP_TAG^`'
rm -f .git/TEMP_TAG
### series C
###
-newf=`echo hi newf | git-hash-object -w --stdin`
+newf=`echo hi newf | git hash-object -w --stdin`
oldf=`git rev-parse --verify master:file2`
test_tick
cat >input <<INPUT_END
INPUT_END
test_expect_success \
'C: incremental import create pack from stdin' \
- 'git-fast-import <input &&
+ 'git fast-import <input &&
git whatchanged branch'
test_expect_success \
'C: verify pack' \
INPUT_END
test_expect_success \
'D: inline data in commit' \
- 'git-fast-import <input &&
+ 'git fast-import <input &&
git whatchanged branch'
test_expect_success \
'D: verify pack' \
INPUT_END
test_expect_success 'E: rfc2822 date, --date-format=raw' '
- test_must_fail git-fast-import --date-format=raw <input
+ test_must_fail git fast-import --date-format=raw <input
'
test_expect_success \
'E: rfc2822 date, --date-format=rfc2822' \
- 'git-fast-import --date-format=rfc2822 <input'
+ 'git fast-import --date-format=rfc2822 <input'
test_expect_success \
'E: verify pack' \
'for p in .git/objects/pack/*.pack;do git verify-pack $p||exit;done'
INPUT_END
test_expect_success \
'F: non-fast-forward update skips' \
- 'if git-fast-import <input
+ 'if git fast-import <input
then
echo BAD gfi did not fail
return 1
INPUT_END
test_expect_success \
'G: non-fast-forward update forced' \
- 'git-fast-import --force <input'
+ 'git fast-import --force <input'
test_expect_success \
'G: verify pack' \
'for p in .git/objects/pack/*.pack;do git verify-pack $p||exit;done'
INPUT_END
test_expect_success \
'H: deletall, add 1' \
- 'git-fast-import <input &&
+ 'git fast-import <input &&
git whatchanged H'
test_expect_success \
'H: verify pack' \
INPUT_END
test_expect_success \
'I: export-pack-edges' \
- 'git-fast-import --export-pack-edges=edges.list <input'
+ 'git fast-import --export-pack-edges=edges.list <input'
cat >expect <<EOF
.git/objects/pack/pack-.pack: `git rev-parse --verify export-boundary`
INPUT_END
test_expect_success \
'J: reset existing branch creates empty commit' \
- 'git-fast-import <input'
+ 'git fast-import <input'
test_expect_success \
'J: branch has 1 commit, empty tree' \
'test 1 = `git rev-list J | wc -l` &&
INPUT_END
test_expect_success \
'K: reinit branch with from' \
- 'git-fast-import <input'
+ 'git fast-import <input'
test_expect_success \
'K: verify K^1 = branch^1' \
'test `git rev-parse --verify branch^1` \
test_expect_success \
'L: verify internal tree sorting' \
- 'git-fast-import <input &&
+ 'git fast-import <input &&
git diff-tree --abbrev --raw L^ L >output &&
test_cmp expect output'
EOF
test_expect_success \
'M: rename file in same subdirectory' \
- 'git-fast-import <input &&
+ 'git fast-import <input &&
git diff-tree -M -r M1^ M1 >actual &&
compare_diff_raw expect actual'
EOF
test_expect_success \
'M: rename file to new subdirectory' \
- 'git-fast-import <input &&
+ 'git fast-import <input &&
git diff-tree -M -r M2^ M2 >actual &&
compare_diff_raw expect actual'
EOF
test_expect_success \
'M: rename subdirectory to new subdirectory' \
- 'git-fast-import <input &&
+ 'git fast-import <input &&
git diff-tree -M -r M3^ M3 >actual &&
compare_diff_raw expect actual'
EOF
test_expect_success \
'N: copy file in same subdirectory' \
- 'git-fast-import <input &&
+ 'git fast-import <input &&
git diff-tree -C --find-copies-harder -r N1^ N1 >actual &&
compare_diff_raw expect actual'
EOF
test_expect_success \
'N: copy then modify subdirectory' \
- 'git-fast-import <input &&
+ 'git fast-import <input &&
git diff-tree -C --find-copies-harder -r N2^^ N2 >actual &&
compare_diff_raw expect actual'
test_expect_success \
'N: copy dirty subdirectory' \
- 'git-fast-import <input &&
- test `git-rev-parse N2^{tree}` = `git-rev-parse N3^{tree}`'
+ 'git fast-import <input &&
+ test `git rev-parse N2^{tree}` = `git rev-parse N3^{tree}`'
###
### series O
test_expect_success \
'O: comments are all skipped' \
- 'git-fast-import <input &&
- test `git-rev-parse N3` = `git-rev-parse O1`'
+ 'git fast-import <input &&
+ test `git rev-parse N3` = `git rev-parse O1`'
cat >input <<INPUT_END
commit refs/heads/O2
test_expect_success \
'O: blank lines not necessary after data commands' \
- 'git-fast-import <input &&
- test `git-rev-parse N3` = `git-rev-parse O2`'
+ 'git fast-import <input &&
+ test `git rev-parse N3` = `git rev-parse O2`'
test_expect_success \
'O: repack before next test' \
INPUT_END
test_expect_success \
'O: blank lines not necessary after other commands' \
- 'git-fast-import <input &&
+ 'git fast-import <input &&
test 8 = `find .git/objects/pack -type f | wc -l` &&
test `git rev-parse refs/tags/O3-2nd` = `git rev-parse O3^` &&
git log --reverse --pretty=oneline O3 | sed s/^.*z// >actual &&
INPUT_END
test_expect_success \
'O: progress outputs as requested by input' \
- 'git-fast-import <input >actual &&
+ 'git fast-import <input >actual &&
grep "progress " <input >expect &&
test_cmp expect actual'
test_expect_success \
'P: supermodule & submodule mix' \
- 'git-fast-import <input &&
+ 'git fast-import <input &&
git checkout subuse1 &&
rm -rf sub && mkdir sub && cd sub &&
git init &&
git submodule init &&
git submodule update'
-SUBLAST=$(git-rev-parse --verify sub)
-SUBPREV=$(git-rev-parse --verify sub^)
+SUBLAST=$(git rev-parse --verify sub)
+SUBPREV=$(git rev-parse --verify sub^)
cat >input <<INPUT_END
blob
'P: verbatim SHA gitlinks' \
'git branch -D sub &&
git gc && git prune &&
- git-fast-import <input &&
- test $(git-rev-parse --verify subuse2) = $(git-rev-parse --verify subuse1)'
+ git fast-import <input &&
+ test $(git rev-parse --verify subuse2) = $(git rev-parse --verify subuse1)'
test_tick
cat >input <<INPUT_END
INPUT_END
test_expect_success 'P: fail on inline gitlink' '
- test_must_fail git-fast-import <input'
+ test_must_fail git fast-import <input'
test_tick
cat >input <<INPUT_END
INPUT_END
test_expect_success 'P: fail on blob mark in gitlink' '
- test_must_fail git-fast-import <input'
+ test_must_fail git fast-import <input'
+
+###
+### series Q (notes)
+###
+
+note1_data="Note for the first commit"
+note2_data="Note for the second commit"
+note3_data="Note for the third commit"
+
+test_tick
+cat >input <<INPUT_END
+blob
+mark :2
+data <<EOF
+$file2_data
+EOF
+
+commit refs/heads/notes-test
+mark :3
+committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
+data <<COMMIT
+first (:3)
+COMMIT
+
+M 644 :2 file2
+
+blob
+mark :4
+data $file4_len
+$file4_data
+commit refs/heads/notes-test
+mark :5
+committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
+data <<COMMIT
+second (:5)
+COMMIT
+
+M 644 :4 file4
+
+commit refs/heads/notes-test
+mark :6
+committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
+data <<COMMIT
+third (:6)
+COMMIT
+
+M 644 inline file5
+data <<EOF
+$file5_data
+EOF
+
+M 755 inline file6
+data <<EOF
+$file6_data
+EOF
+
+blob
+mark :7
+data <<EOF
+$note1_data
+EOF
+
+blob
+mark :8
+data <<EOF
+$note2_data
+EOF
+
+commit refs/notes/foobar
+mark :9
+committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
+data <<COMMIT
+notes (:9)
+COMMIT
+
+N :7 :3
+N :8 :5
+N inline :6
+data <<EOF
+$note3_data
+EOF
+
+INPUT_END
+test_expect_success \
+ 'Q: commit notes' \
+ 'git fast-import <input &&
+ git whatchanged notes-test'
+test_expect_success \
+ 'Q: verify pack' \
+ 'for p in .git/objects/pack/*.pack;do git verify-pack $p||exit;done'
+
+commit1=$(git rev-parse notes-test~2)
+commit2=$(git rev-parse notes-test^)
+commit3=$(git rev-parse notes-test)
+
+cat >expect <<EOF
+author $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
+committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
+
+first (:3)
+EOF
+test_expect_success \
+ 'Q: verify first commit' \
+ 'git cat-file commit notes-test~2 | sed 1d >actual &&
+ test_cmp expect actual'
+
+cat >expect <<EOF
+parent $commit1
+author $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
+committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
+
+second (:5)
+EOF
+test_expect_success \
+ 'Q: verify second commit' \
+ 'git cat-file commit notes-test^ | sed 1d >actual &&
+ test_cmp expect actual'
+
+cat >expect <<EOF
+parent $commit2
+author $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
+committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
+
+third (:6)
+EOF
+test_expect_success \
+ 'Q: verify third commit' \
+ 'git cat-file commit notes-test | sed 1d >actual &&
+ test_cmp expect actual'
+
+cat >expect <<EOF
+author $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
+committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
+
+notes (:9)
+EOF
+test_expect_success \
+ 'Q: verify notes commit' \
+ 'git cat-file commit refs/notes/foobar | sed 1d >actual &&
+ test_cmp expect actual'
+
+cat >expect.unsorted <<EOF
+100644 blob $commit1
+100644 blob $commit2
+100644 blob $commit3
+EOF
+cat expect.unsorted | sort >expect
+test_expect_success \
+ 'Q: verify notes tree' \
+ 'git cat-file -p refs/notes/foobar^{tree} | sed "s/ [0-9a-f]* / /" >actual &&
+ test_cmp expect actual'
+
+echo "$note1_data" >expect
+test_expect_success \
+ 'Q: verify note for first commit' \
+ 'git cat-file blob refs/notes/foobar:$commit1 >actual && test_cmp expect actual'
+
+echo "$note2_data" >expect
+test_expect_success \
+ 'Q: verify note for second commit' \
+ 'git cat-file blob refs/notes/foobar:$commit2 >actual && test_cmp expect actual'
+
+echo "$note3_data" >expect
+test_expect_success \
+ 'Q: verify note for third commit' \
+ 'git cat-file blob refs/notes/foobar:$commit3 >actual && test_cmp expect actual'
test_done