Add some tests for git update-ref -d
[gitweb.git] / t / t7003-filter-branch.sh
index 6827249da5182515847d713ae0bb1d23fc58b5c6..1e8a205e536c918569d6537883ee35d3bdcd515f 100755 (executable)
@@ -17,6 +17,8 @@ test_expect_success 'setup' '
        make_commit B
        git checkout -b branch B
        make_commit D
+       mkdir dir
+       make_commit dir/D
        make_commit E
        git checkout master
        make_commit C
@@ -41,9 +43,23 @@ test_expect_success 'rewrite, renaming a specific file' '
 '
 
 test_expect_success 'test that the file was renamed' '
-       test d = $(git show HEAD:doh) &&
+       test d = "$(git show HEAD:doh --)" &&
+       ! test -f d &&
        test -f doh &&
-       test d = $(cat doh)
+       test d = "$(cat doh)"
+'
+
+test_expect_success 'rewrite, renaming a specific directory' '
+       git-filter-branch -f --tree-filter "mv dir diroh || :" HEAD
+'
+
+test_expect_success 'test that the directory was renamed' '
+       test dir/d = "$(git show HEAD:diroh/d --)" &&
+       ! test -d dir &&
+       test -d diroh &&
+       ! test -d diroh/dir &&
+       test -f diroh/d &&
+       test dir/d = "$(cat diroh/d)"
 '
 
 git tag oldD HEAD~4
@@ -109,7 +125,7 @@ test_expect_success 'use index-filter to move into a subdirectory' '
                 "git ls-files -s | sed \"s-\\t-&newsubdir/-\" |
                  GIT_INDEX_FILE=\$GIT_INDEX_FILE.new \
                        git update-index --index-info &&
-                 mv \$GIT_INDEX_FILE.new \$GIT_INDEX_FILE" directorymoved &&
+                 mv \"\$GIT_INDEX_FILE.new\" \"\$GIT_INDEX_FILE\"" directorymoved &&
        test -z "$(git diff HEAD directorymoved:newsubdir)"'
 
 test_expect_success 'stops when msg filter fails' '
@@ -203,4 +219,36 @@ test_expect_success 'Subdirectory filter with disappearing trees' '
        test $(git rev-list master | wc -l) = 3
 '
 
+test_expect_success 'Tag name filtering retains tag message' '
+       git tag -m atag T &&
+       git cat-file tag T > expect &&
+       git filter-branch -f --tag-name-filter cat &&
+       git cat-file tag T > actual &&
+       test_cmp expect actual
+'
+
+faux_gpg_tag='object XXXXXX
+type commit
+tag S
+tagger T A Gger <tagger@example.com> 1206026339 -0500
+
+This is a faux gpg signed tag.
+-----BEGIN PGP SIGNATURE-----
+Version: FauxGPG v0.0.0 (FAUX/Linux)
+
+gdsfoewhxu/6l06f1kxyxhKdZkrcbaiOMtkJUA9ITAc1mlamh0ooasxkH1XwMbYQ
+acmwXaWET20H0GeAGP+7vow=
+=agpO
+-----END PGP SIGNATURE-----
+'
+test_expect_success 'Tag name filtering strips gpg signature' '
+       sha1=$(git rev-parse HEAD) &&
+       sha1t=$(echo "$faux_gpg_tag" | sed -e s/XXXXXX/$sha1/ | git mktag) &&
+       git update-ref "refs/tags/S" "$sha1t" &&
+       echo "$faux_gpg_tag" | sed -e s/XXXXXX/$sha1/ | head -n 6 > expect &&
+       git filter-branch -f --tag-name-filter cat &&
+       git cat-file tag S > actual &&
+       test_cmp expect actual
+'
+
 test_done