| #!/bin/sh | 
 |  | 
 | test_description='git archive --format=zip test' | 
 |  | 
 | . ./test-lib.sh | 
 |  | 
 | SUBSTFORMAT=%H%n | 
 |  | 
 | test_lazy_prereq UNZIP_SYMLINKS ' | 
 | 	( | 
 | 		mkdir unzip-symlinks && | 
 | 		cd unzip-symlinks && | 
 | 		"$GIT_UNZIP" "$TEST_DIRECTORY"/t5003/infozip-symlinks.zip && | 
 | 		test -h symlink | 
 | 	) | 
 | ' | 
 |  | 
 | check_zip() { | 
 | 	zipfile=$1.zip | 
 | 	listfile=$1.lst | 
 | 	dir=$1 | 
 | 	dir_with_prefix=$dir/$2 | 
 |  | 
 | 	test_expect_success UNZIP " extract ZIP archive" ' | 
 | 		(mkdir $dir && cd $dir && "$GIT_UNZIP" ../$zipfile) | 
 | 	' | 
 |  | 
 | 	test_expect_success UNZIP " validate filenames" " | 
 | 		(cd ${dir_with_prefix}a && find .) | sort >$listfile && | 
 | 		test_cmp a.lst $listfile | 
 | 	" | 
 |  | 
 | 	test_expect_success UNZIP " validate file contents" " | 
 | 		diff -r a ${dir_with_prefix}a | 
 | 	" | 
 |  | 
 | 	dir=eol_$1 | 
 | 	dir_with_prefix=$dir/$2 | 
 | 	extracted=${dir_with_prefix}a | 
 | 	original=a | 
 |  | 
 | 	test_expect_success UNZIP " extract ZIP archive with EOL conversion" ' | 
 | 		(mkdir $dir && cd $dir && "$GIT_UNZIP" -a ../$zipfile) | 
 | 	' | 
 |  | 
 | 	test_expect_success UNZIP " validate that text files are converted" " | 
 | 		test_cmp_bin $extracted/text.cr $extracted/text.crlf && | 
 | 		test_cmp_bin $extracted/text.cr $extracted/text.lf | 
 | 	" | 
 |  | 
 | 	test_expect_success UNZIP " validate that binary files are unchanged" " | 
 | 		test_cmp_bin $original/binary.cr   $extracted/binary.cr && | 
 | 		test_cmp_bin $original/binary.crlf $extracted/binary.crlf && | 
 | 		test_cmp_bin $original/binary.lf   $extracted/binary.lf | 
 | 	" | 
 |  | 
 | 	test_expect_success UNZIP " validate that diff files are converted" " | 
 | 		test_cmp_bin $extracted/diff.cr $extracted/diff.crlf && | 
 | 		test_cmp_bin $extracted/diff.cr $extracted/diff.lf | 
 | 	" | 
 |  | 
 | 	test_expect_success UNZIP " validate that -diff files are unchanged" " | 
 | 		test_cmp_bin $original/nodiff.cr   $extracted/nodiff.cr && | 
 | 		test_cmp_bin $original/nodiff.crlf $extracted/nodiff.crlf && | 
 | 		test_cmp_bin $original/nodiff.lf   $extracted/nodiff.lf | 
 | 	" | 
 |  | 
 | 	test_expect_success UNZIP " validate that custom diff is unchanged " " | 
 | 		test_cmp_bin $original/custom.cr   $extracted/custom.cr && | 
 | 		test_cmp_bin $original/custom.crlf $extracted/custom.crlf && | 
 | 		test_cmp_bin $original/custom.lf   $extracted/custom.lf | 
 | 	" | 
 | } | 
 |  | 
 | test_expect_success \ | 
 |     'populate workdir' \ | 
 |     'mkdir a && | 
 |      echo simple textfile >a/a && | 
 |      mkdir a/bin && | 
 |      cp /bin/sh a/bin && | 
 |      printf "text\r"	>a/text.cr && | 
 |      printf "text\r\n"	>a/text.crlf && | 
 |      printf "text\n"	>a/text.lf && | 
 |      printf "text\r"	>a/nodiff.cr && | 
 |      printf "text\r\n"	>a/nodiff.crlf && | 
 |      printf "text\n"	>a/nodiff.lf && | 
 |      printf "text\r"	>a/custom.cr && | 
 |      printf "text\r\n"	>a/custom.crlf && | 
 |      printf "text\n"	>a/custom.lf && | 
 |      printf "\0\r"	>a/binary.cr && | 
 |      printf "\0\r\n"	>a/binary.crlf && | 
 |      printf "\0\n"	>a/binary.lf && | 
 |      printf "\0\r"	>a/diff.cr && | 
 |      printf "\0\r\n"	>a/diff.crlf && | 
 |      printf "\0\n"	>a/diff.lf && | 
 |      printf "A\$Format:%s\$O" "$SUBSTFORMAT" >a/substfile1 && | 
 |      printf "A not substituted O" >a/substfile2 && | 
 |      (p=long_path_to_a_file && cd a && | 
 |       for depth in 1 2 3 4 5; do mkdir $p && cd $p; done && | 
 |       echo text >file_with_long_path) | 
 | ' | 
 |  | 
 | test_expect_success SYMLINKS,UNZIP_SYMLINKS 'add symlink' ' | 
 | 	ln -s a a/symlink_to_a | 
 | ' | 
 |  | 
 | test_expect_success 'prepare file list' ' | 
 | 	(cd a && find .) | sort >a.lst | 
 | ' | 
 |  | 
 | test_expect_success \ | 
 |     'add ignored file' \ | 
 |     'echo ignore me >a/ignored && | 
 |      echo ignored export-ignore >.git/info/attributes' | 
 |  | 
 | test_expect_success 'add files to repository' ' | 
 | 	git add a && | 
 | 	GIT_COMMITTER_DATE="2005-05-27 22:00" git commit -m initial | 
 | ' | 
 |  | 
 | test_expect_success 'setup export-subst and diff attributes' ' | 
 | 	echo "a/nodiff.* -diff" >>.git/info/attributes && | 
 | 	echo "a/diff.* diff" >>.git/info/attributes && | 
 | 	echo "a/custom.* diff=custom" >>.git/info/attributes && | 
 | 	git config diff.custom.binary true && | 
 | 	echo "substfile?" export-subst >>.git/info/attributes && | 
 | 	git log --max-count=1 "--pretty=format:A${SUBSTFORMAT}O" HEAD \ | 
 | 		>a/substfile1 | 
 | ' | 
 |  | 
 | test_expect_success 'create bare clone' ' | 
 | 	git clone --bare . bare.git && | 
 | 	cp .git/info/attributes bare.git/info/attributes && | 
 | 	# Recreate our changes to .git/config rather than just copying it, as | 
 | 	# we do not want to clobber core.bare or other settings. | 
 | 	git -C bare.git config diff.custom.binary true | 
 | ' | 
 |  | 
 | test_expect_success \ | 
 |     'remove ignored file' \ | 
 |     'rm a/ignored' | 
 |  | 
 | test_expect_success \ | 
 |     'git archive --format=zip' \ | 
 |     'git archive --format=zip HEAD >d.zip' | 
 |  | 
 | check_zip d | 
 |  | 
 | test_expect_success \ | 
 |     'git archive --format=zip in a bare repo' \ | 
 |     '(cd bare.git && git archive --format=zip HEAD) >d1.zip' | 
 |  | 
 | test_expect_success \ | 
 |     'git archive --format=zip vs. the same in a bare repo' \ | 
 |     'test_cmp_bin d.zip d1.zip' | 
 |  | 
 | test_expect_success 'git archive --format=zip with --output' \ | 
 |     'git archive --format=zip --output=d2.zip HEAD && | 
 |     test_cmp_bin d.zip d2.zip' | 
 |  | 
 | test_expect_success 'git archive with --output, inferring format (local)' ' | 
 | 	git archive --output=d3.zip HEAD && | 
 | 	test_cmp_bin d.zip d3.zip | 
 | ' | 
 |  | 
 | test_expect_success 'git archive with --output, inferring format (remote)' ' | 
 | 	git archive --remote=. --output=d4.zip HEAD && | 
 | 	test_cmp_bin d.zip d4.zip | 
 | ' | 
 |  | 
 | test_expect_success \ | 
 |     'git archive --format=zip with prefix' \ | 
 |     'git archive --format=zip --prefix=prefix/ HEAD >e.zip' | 
 |  | 
 | check_zip e prefix/ | 
 |  | 
 | test_expect_success 'git archive -0 --format=zip on large files' ' | 
 | 	test_config core.bigfilethreshold 1 && | 
 | 	git archive -0 --format=zip HEAD >large.zip | 
 | ' | 
 |  | 
 | check_zip large | 
 |  | 
 | test_expect_success 'git archive --format=zip on large files' ' | 
 | 	test_config core.bigfilethreshold 1 && | 
 | 	git archive --format=zip HEAD >large-compressed.zip | 
 | ' | 
 |  | 
 | check_zip large-compressed | 
 |  | 
 | test_done |