Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | # |
| 3 | # Copyright (C) 2005 Rene Scharfe |
| 4 | # |
| 5 | |
Junio C Hamano | 5be6007 | 2007-07-02 22:52:14 -0700 | [diff] [blame] | 6 | test_description='git tar-tree and git get-tar-commit-id test |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 7 | |
Rene Scharfe | 5b86040 | 2005-06-03 18:21:23 +0200 | [diff] [blame] | 8 | This test covers the topics of file contents, commit date handling and |
| 9 | commit id embedding: |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 10 | |
| 11 | The contents of the repository is compared to the extracted tar |
| 12 | archive. The repository contains simple text files, symlinks and a |
Pavel Roskin | 3dff537 | 2007-02-03 23:49:16 -0500 | [diff] [blame] | 13 | binary file (/bin/sh). Only paths shorter than 99 characters are |
Rene Scharfe | 5b86040 | 2005-06-03 18:21:23 +0200 | [diff] [blame] | 14 | used. |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 15 | |
Junio C Hamano | 5be6007 | 2007-07-02 22:52:14 -0700 | [diff] [blame] | 16 | git tar-tree applies the commit date to every file in the archive it |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 17 | creates. The test sets the commit date to a specific value and checks |
| 18 | if the tar archive contains that value. |
| 19 | |
Junio C Hamano | 5be6007 | 2007-07-02 22:52:14 -0700 | [diff] [blame] | 20 | When giving git tar-tree a commit id (in contrast to a tree id) it |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 21 | embeds this commit id into the tar archive as a comment. The test |
Junio C Hamano | 5be6007 | 2007-07-02 22:52:14 -0700 | [diff] [blame] | 22 | checks the ability of git get-tar-commit-id to figure it out from the |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 23 | tar file. |
| 24 | |
| 25 | ' |
| 26 | |
| 27 | . ./test-lib.sh |
Rene Scharfe | 62cdce1 | 2006-10-07 01:47:35 +0200 | [diff] [blame] | 28 | UNZIP=${UNZIP:-unzip} |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 29 | |
René Scharfe | 38c9c9b | 2007-09-06 18:51:11 +0200 | [diff] [blame] | 30 | SUBSTFORMAT=%H%n |
René Scharfe | 8460b2f | 2007-09-03 20:07:01 +0200 | [diff] [blame] | 31 | |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 32 | test_expect_success \ |
| 33 | 'populate workdir' \ |
| 34 | 'mkdir a b c && |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 35 | echo simple textfile >a/a && |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 36 | mkdir a/bin && |
Rene Scharfe | 5b86040 | 2005-06-03 18:21:23 +0200 | [diff] [blame] | 37 | cp /bin/sh a/bin && |
René Scharfe | 760da96 | 2007-09-14 00:13:06 +0200 | [diff] [blame] | 38 | printf "A\$Format:%s\$O" "$SUBSTFORMAT" >a/substfile1 && |
| 39 | printf "A not substituted O" >a/substfile2 && |
Johannes Sixt | 704a314 | 2009-03-04 22:38:24 +0100 | [diff] [blame] | 40 | if test_have_prereq SYMLINKS; then |
| 41 | ln -s a a/l1 |
| 42 | else |
| 43 | printf %s a > a/l1 |
| 44 | fi && |
Rene Scharfe | 4c69172 | 2006-03-25 23:21:07 +0100 | [diff] [blame] | 45 | (p=long_path_to_a_file && cd a && |
| 46 | for depth in 1 2 3 4 5; do mkdir $p && cd $p; done && |
| 47 | echo text >file_with_long_path) && |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 48 | (cd a && find .) | sort >a.lst' |
| 49 | |
| 50 | test_expect_success \ |
René Scharfe | 008d896 | 2008-06-08 18:42:33 +0200 | [diff] [blame] | 51 | 'add ignored file' \ |
| 52 | 'echo ignore me >a/ignored && |
René Scharfe | ad94657 | 2009-04-18 00:17:49 +0200 | [diff] [blame] | 53 | echo ignored export-ignore >.git/info/attributes' |
René Scharfe | 008d896 | 2008-06-08 18:42:33 +0200 | [diff] [blame] | 54 | |
| 55 | test_expect_success \ |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 56 | 'add files to repository' \ |
Junio C Hamano | 5be6007 | 2007-07-02 22:52:14 -0700 | [diff] [blame] | 57 | 'find a -type f | xargs git update-index --add && |
| 58 | find a -type l | xargs git update-index --add && |
| 59 | treeid=`git write-tree` && |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 60 | echo $treeid >treeid && |
Junio C Hamano | 5be6007 | 2007-07-02 22:52:14 -0700 | [diff] [blame] | 61 | git update-ref HEAD $(TZ=GMT GIT_COMMITTER_DATE="2005-05-27 22:00:00" \ |
| 62 | git commit-tree $treeid </dev/null)' |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 63 | |
| 64 | test_expect_success \ |
Charles Bailey | ddff856 | 2008-10-25 11:38:14 -0400 | [diff] [blame] | 65 | 'create bare clone' \ |
| 66 | 'git clone --bare . bare.git && |
René Scharfe | ad94657 | 2009-04-18 00:17:49 +0200 | [diff] [blame] | 67 | cp .git/info/attributes bare.git/info/attributes' |
Charles Bailey | ddff856 | 2008-10-25 11:38:14 -0400 | [diff] [blame] | 68 | |
| 69 | test_expect_success \ |
René Scharfe | 008d896 | 2008-06-08 18:42:33 +0200 | [diff] [blame] | 70 | 'remove ignored file' \ |
| 71 | 'rm a/ignored' |
| 72 | |
| 73 | test_expect_success \ |
Junio C Hamano | 5be6007 | 2007-07-02 22:52:14 -0700 | [diff] [blame] | 74 | 'git archive' \ |
| 75 | 'git archive HEAD >b.tar' |
René Scharfe | 8ff21b1 | 2007-04-09 17:12:53 +0200 | [diff] [blame] | 76 | |
| 77 | test_expect_success \ |
Junio C Hamano | 5be6007 | 2007-07-02 22:52:14 -0700 | [diff] [blame] | 78 | 'git tar-tree' \ |
| 79 | 'git tar-tree HEAD >b2.tar' |
René Scharfe | 8ff21b1 | 2007-04-09 17:12:53 +0200 | [diff] [blame] | 80 | |
| 81 | test_expect_success \ |
Junio C Hamano | 5be6007 | 2007-07-02 22:52:14 -0700 | [diff] [blame] | 82 | 'git archive vs. git tar-tree' \ |
Miklos Vajna | 188c382 | 2009-03-16 21:18:42 +0100 | [diff] [blame] | 83 | 'test_cmp b.tar b2.tar' |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 84 | |
| 85 | test_expect_success \ |
Charles Bailey | ddff856 | 2008-10-25 11:38:14 -0400 | [diff] [blame] | 86 | 'git archive in a bare repo' \ |
| 87 | '(cd bare.git && git archive HEAD) >b3.tar' |
| 88 | |
| 89 | test_expect_success \ |
| 90 | 'git archive vs. the same in a bare repo' \ |
| 91 | 'test_cmp b.tar b3.tar' |
| 92 | |
Carlos Manuel Duclos Vergara | aec0c1b | 2009-02-16 18:20:25 +0100 | [diff] [blame] | 93 | test_expect_success 'git archive with --output' \ |
| 94 | 'git archive --output=b4.tar HEAD && |
| 95 | test_cmp b.tar b4.tar' |
| 96 | |
Thomas Rast | 4813926 | 2009-06-27 20:47:43 +0200 | [diff] [blame] | 97 | test_expect_success 'git archive --remote' \ |
| 98 | 'git archive --remote=. HEAD >b5.tar && |
| 99 | test_cmp b.tar b5.tar' |
| 100 | |
Charles Bailey | ddff856 | 2008-10-25 11:38:14 -0400 | [diff] [blame] | 101 | test_expect_success \ |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 102 | 'validate file modification time' \ |
Jeff King | 30684df | 2008-05-13 04:45:32 -0400 | [diff] [blame] | 103 | 'mkdir extract && |
Junio C Hamano | bfce508 | 2008-07-25 12:35:10 -0700 | [diff] [blame] | 104 | "$TAR" xf b.tar -C extract a/a && |
Alex Riesen | 111539a | 2008-10-30 11:20:27 +0100 | [diff] [blame] | 105 | test-chmtime -v +0 extract/a/a |cut -f 1 >b.mtime && |
Jeff King | 30684df | 2008-05-13 04:45:32 -0400 | [diff] [blame] | 106 | echo "1117231200" >expected.mtime && |
Miklos Vajna | 188c382 | 2009-03-16 21:18:42 +0100 | [diff] [blame] | 107 | test_cmp expected.mtime b.mtime' |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 108 | |
| 109 | test_expect_success \ |
Junio C Hamano | 5be6007 | 2007-07-02 22:52:14 -0700 | [diff] [blame] | 110 | 'git get-tar-commit-id' \ |
| 111 | 'git get-tar-commit-id <b.tar >b.commitid && |
Miklos Vajna | 188c382 | 2009-03-16 21:18:42 +0100 | [diff] [blame] | 112 | test_cmp .git/$(git symbolic-ref HEAD) b.commitid' |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 113 | |
| 114 | test_expect_success \ |
| 115 | 'extract tar archive' \ |
Junio C Hamano | bfce508 | 2008-07-25 12:35:10 -0700 | [diff] [blame] | 116 | '(cd b && "$TAR" xf -) <b.tar' |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 117 | |
| 118 | test_expect_success \ |
| 119 | 'validate filenames' \ |
| 120 | '(cd b/a && find .) | sort >b.lst && |
Miklos Vajna | 188c382 | 2009-03-16 21:18:42 +0100 | [diff] [blame] | 121 | test_cmp a.lst b.lst' |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 122 | |
| 123 | test_expect_success \ |
| 124 | 'validate file contents' \ |
| 125 | 'diff -r a b/a' |
| 126 | |
| 127 | test_expect_success \ |
Junio C Hamano | 5be6007 | 2007-07-02 22:52:14 -0700 | [diff] [blame] | 128 | 'git tar-tree with prefix' \ |
| 129 | 'git tar-tree HEAD prefix >c.tar' |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 130 | |
| 131 | test_expect_success \ |
| 132 | 'extract tar archive with prefix' \ |
Junio C Hamano | bfce508 | 2008-07-25 12:35:10 -0700 | [diff] [blame] | 133 | '(cd c && "$TAR" xf -) <c.tar' |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 134 | |
| 135 | test_expect_success \ |
| 136 | 'validate filenames with prefix' \ |
| 137 | '(cd c/prefix/a && find .) | sort >c.lst && |
Miklos Vajna | 188c382 | 2009-03-16 21:18:42 +0100 | [diff] [blame] | 138 | test_cmp a.lst c.lst' |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 139 | |
| 140 | test_expect_success \ |
| 141 | 'validate file contents with prefix' \ |
| 142 | 'diff -r a c/prefix/a' |
| 143 | |
Rene Scharfe | 62cdce1 | 2006-10-07 01:47:35 +0200 | [diff] [blame] | 144 | test_expect_success \ |
René Scharfe | ac7fa27 | 2008-04-09 23:14:43 +0200 | [diff] [blame] | 145 | 'create archives with substfiles' \ |
René Scharfe | ad94657 | 2009-04-18 00:17:49 +0200 | [diff] [blame] | 146 | 'cp .git/info/attributes .git/info/attributes.before && |
| 147 | echo "substfile?" export-subst >>.git/info/attributes && |
René Scharfe | 8460b2f | 2007-09-03 20:07:01 +0200 | [diff] [blame] | 148 | git archive HEAD >f.tar && |
René Scharfe | ac7fa27 | 2008-04-09 23:14:43 +0200 | [diff] [blame] | 149 | git archive --prefix=prefix/ HEAD >g.tar && |
René Scharfe | ad94657 | 2009-04-18 00:17:49 +0200 | [diff] [blame] | 150 | mv .git/info/attributes.before .git/info/attributes' |
René Scharfe | 8460b2f | 2007-09-03 20:07:01 +0200 | [diff] [blame] | 151 | |
| 152 | test_expect_success \ |
René Scharfe | 760da96 | 2007-09-14 00:13:06 +0200 | [diff] [blame] | 153 | 'extract substfiles' \ |
Junio C Hamano | bfce508 | 2008-07-25 12:35:10 -0700 | [diff] [blame] | 154 | '(mkdir f && cd f && "$TAR" xf -) <f.tar' |
René Scharfe | 8460b2f | 2007-09-03 20:07:01 +0200 | [diff] [blame] | 155 | |
| 156 | test_expect_success \ |
René Scharfe | 38c9c9b | 2007-09-06 18:51:11 +0200 | [diff] [blame] | 157 | 'validate substfile contents' \ |
| 158 | 'git log --max-count=1 "--pretty=format:A${SUBSTFORMAT}O" HEAD \ |
René Scharfe | 760da96 | 2007-09-14 00:13:06 +0200 | [diff] [blame] | 159 | >f/a/substfile1.expected && |
Miklos Vajna | 188c382 | 2009-03-16 21:18:42 +0100 | [diff] [blame] | 160 | test_cmp f/a/substfile1.expected f/a/substfile1 && |
| 161 | test_cmp a/substfile2 f/a/substfile2 |
René Scharfe | 760da96 | 2007-09-14 00:13:06 +0200 | [diff] [blame] | 162 | ' |
René Scharfe | 8460b2f | 2007-09-03 20:07:01 +0200 | [diff] [blame] | 163 | |
| 164 | test_expect_success \ |
René Scharfe | ac7fa27 | 2008-04-09 23:14:43 +0200 | [diff] [blame] | 165 | 'extract substfiles from archive with prefix' \ |
Junio C Hamano | bfce508 | 2008-07-25 12:35:10 -0700 | [diff] [blame] | 166 | '(mkdir g && cd g && "$TAR" xf -) <g.tar' |
René Scharfe | ac7fa27 | 2008-04-09 23:14:43 +0200 | [diff] [blame] | 167 | |
| 168 | test_expect_success \ |
| 169 | 'validate substfile contents from archive with prefix' \ |
| 170 | 'git log --max-count=1 "--pretty=format:A${SUBSTFORMAT}O" HEAD \ |
| 171 | >g/prefix/a/substfile1.expected && |
Miklos Vajna | 188c382 | 2009-03-16 21:18:42 +0100 | [diff] [blame] | 172 | test_cmp g/prefix/a/substfile1.expected g/prefix/a/substfile1 && |
| 173 | test_cmp a/substfile2 g/prefix/a/substfile2 |
René Scharfe | ac7fa27 | 2008-04-09 23:14:43 +0200 | [diff] [blame] | 174 | ' |
| 175 | |
| 176 | test_expect_success \ |
Junio C Hamano | 5be6007 | 2007-07-02 22:52:14 -0700 | [diff] [blame] | 177 | 'git archive --format=zip' \ |
| 178 | 'git archive --format=zip HEAD >d.zip' |
Rene Scharfe | 62cdce1 | 2006-10-07 01:47:35 +0200 | [diff] [blame] | 179 | |
Charles Bailey | ddff856 | 2008-10-25 11:38:14 -0400 | [diff] [blame] | 180 | test_expect_success \ |
| 181 | 'git archive --format=zip in a bare repo' \ |
| 182 | '(cd bare.git && git archive --format=zip HEAD) >d1.zip' |
| 183 | |
| 184 | test_expect_success \ |
| 185 | 'git archive --format=zip vs. the same in a bare repo' \ |
| 186 | 'test_cmp d.zip d1.zip' |
| 187 | |
Carlos Manuel Duclos Vergara | aec0c1b | 2009-02-16 18:20:25 +0100 | [diff] [blame] | 188 | test_expect_success 'git archive --format=zip with --output' \ |
| 189 | 'git archive --format=zip --output=d2.zip HEAD && |
| 190 | test_cmp d.zip d2.zip' |
| 191 | |
René Scharfe | 27c96c4 | 2007-06-09 08:31:12 +0200 | [diff] [blame] | 192 | $UNZIP -v >/dev/null 2>&1 |
Johannes Schindelin | 3a86f36 | 2007-06-06 19:57:40 +0100 | [diff] [blame] | 193 | if [ $? -eq 127 ]; then |
Johannes Sixt | fae74a0 | 2009-03-01 19:52:51 +0100 | [diff] [blame] | 194 | say "Skipping ZIP tests, because unzip was not found" |
Johannes Sixt | 552a26c | 2009-03-16 14:44:56 +0100 | [diff] [blame] | 195 | else |
| 196 | test_set_prereq UNZIP |
Johannes Schindelin | 3a86f36 | 2007-06-06 19:57:40 +0100 | [diff] [blame] | 197 | fi |
| 198 | |
Johannes Sixt | 552a26c | 2009-03-16 14:44:56 +0100 | [diff] [blame] | 199 | test_expect_success UNZIP \ |
Rene Scharfe | 62cdce1 | 2006-10-07 01:47:35 +0200 | [diff] [blame] | 200 | 'extract ZIP archive' \ |
| 201 | '(mkdir d && cd d && $UNZIP ../d.zip)' |
| 202 | |
Johannes Sixt | 552a26c | 2009-03-16 14:44:56 +0100 | [diff] [blame] | 203 | test_expect_success UNZIP \ |
Rene Scharfe | 62cdce1 | 2006-10-07 01:47:35 +0200 | [diff] [blame] | 204 | 'validate filenames' \ |
| 205 | '(cd d/a && find .) | sort >d.lst && |
Miklos Vajna | 188c382 | 2009-03-16 21:18:42 +0100 | [diff] [blame] | 206 | test_cmp a.lst d.lst' |
Rene Scharfe | 62cdce1 | 2006-10-07 01:47:35 +0200 | [diff] [blame] | 207 | |
Johannes Sixt | 552a26c | 2009-03-16 14:44:56 +0100 | [diff] [blame] | 208 | test_expect_success UNZIP \ |
Rene Scharfe | 62cdce1 | 2006-10-07 01:47:35 +0200 | [diff] [blame] | 209 | 'validate file contents' \ |
| 210 | 'diff -r a d/a' |
| 211 | |
| 212 | test_expect_success \ |
Junio C Hamano | 5be6007 | 2007-07-02 22:52:14 -0700 | [diff] [blame] | 213 | 'git archive --format=zip with prefix' \ |
| 214 | 'git archive --format=zip --prefix=prefix/ HEAD >e.zip' |
Rene Scharfe | 62cdce1 | 2006-10-07 01:47:35 +0200 | [diff] [blame] | 215 | |
Johannes Sixt | 552a26c | 2009-03-16 14:44:56 +0100 | [diff] [blame] | 216 | test_expect_success UNZIP \ |
Rene Scharfe | 62cdce1 | 2006-10-07 01:47:35 +0200 | [diff] [blame] | 217 | 'extract ZIP archive with prefix' \ |
| 218 | '(mkdir e && cd e && $UNZIP ../e.zip)' |
| 219 | |
Johannes Sixt | 552a26c | 2009-03-16 14:44:56 +0100 | [diff] [blame] | 220 | test_expect_success UNZIP \ |
Rene Scharfe | 62cdce1 | 2006-10-07 01:47:35 +0200 | [diff] [blame] | 221 | 'validate filenames with prefix' \ |
| 222 | '(cd e/prefix/a && find .) | sort >e.lst && |
Miklos Vajna | 188c382 | 2009-03-16 21:18:42 +0100 | [diff] [blame] | 223 | test_cmp a.lst e.lst' |
Rene Scharfe | 62cdce1 | 2006-10-07 01:47:35 +0200 | [diff] [blame] | 224 | |
Johannes Sixt | 552a26c | 2009-03-16 14:44:56 +0100 | [diff] [blame] | 225 | test_expect_success UNZIP \ |
Rene Scharfe | 62cdce1 | 2006-10-07 01:47:35 +0200 | [diff] [blame] | 226 | 'validate file contents with prefix' \ |
| 227 | 'diff -r a e/prefix/a' |
| 228 | |
René Scharfe | 265d528 | 2007-04-05 22:55:43 +0200 | [diff] [blame] | 229 | test_expect_success \ |
Junio C Hamano | 5be6007 | 2007-07-02 22:52:14 -0700 | [diff] [blame] | 230 | 'git archive --list outside of a git repo' \ |
| 231 | 'GIT_DIR=some/non-existing/directory git archive --list' |
René Scharfe | 265d528 | 2007-04-05 22:55:43 +0200 | [diff] [blame] | 232 | |
René Scharfe | ebfbdb3 | 2009-10-08 18:46:54 +0200 | [diff] [blame] | 233 | test_expect_success 'git-archive --prefix=olde-' ' |
| 234 | git archive --prefix=olde- >h.tar HEAD && |
| 235 | ( |
| 236 | mkdir h && |
| 237 | cd h && |
| 238 | "$TAR" xf - <../h.tar |
| 239 | ) && |
| 240 | test -d h/olde-a && |
| 241 | test -d h/olde-a/bin && |
| 242 | test -f h/olde-a/bin/sh |
| 243 | ' |
| 244 | |
Rene Scharfe | d3d49c3 | 2005-06-02 22:50:17 +0200 | [diff] [blame] | 245 | test_done |