archive: add --add-file

Allow users to append non-tracked files.  This simplifies the generation
of source packages with a few extra files, e.g. containing version
information.  They get the same access times and user information as
tracked files.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
René Scharfe
2020-09-19 23:23:42 +02:00
committed by Junio C Hamano
parent 200589abcb
commit 2947a7930d
5 changed files with 150 additions and 1 deletions

View File

@@ -94,6 +94,16 @@ check_tar() {
'
}
check_added() {
dir=$1
path_in_fs=$2
path_in_archive=$3
test_expect_success " validate extra file $path_in_archive" '
diff -r $path_in_fs $dir/$path_in_archive
'
}
test_expect_success 'setup' '
test_oid_cache <<-EOF
obj sha1:19f9c8273ec45a8938e6999cb59b3ff66739902a
@@ -164,6 +174,25 @@ test_expect_success 'git-archive --prefix=olde-' '
check_tar with_olde-prefix olde-
test_expect_success 'git archive --add-file' '
echo untracked >untracked &&
git archive --add-file=untracked HEAD >with_untracked.tar
'
check_tar with_untracked
check_added with_untracked untracked untracked
test_expect_success 'git archive --add-file twice' '
echo untracked >untracked &&
git archive --prefix=one/ --add-file=untracked \
--prefix=two/ --add-file=untracked \
--prefix= HEAD >with_untracked2.tar
'
check_tar with_untracked2
check_added with_untracked2 untracked one/untracked
check_added with_untracked2 untracked two/untracked
test_expect_success 'git archive on large files' '
test_config core.bigfilethreshold 1 &&
git archive HEAD >b3.tar &&

View File

@@ -72,6 +72,16 @@ check_zip() {
"
}
check_added() {
dir=$1
path_in_fs=$2
path_in_archive=$3
test_expect_success UNZIP " validate extra file $path_in_archive" '
diff -r $path_in_fs $dir/$path_in_archive
'
}
test_expect_success \
'populate workdir' \
'mkdir a &&
@@ -188,4 +198,22 @@ test_expect_success 'git archive --format=zip on large files' '
check_zip large-compressed
test_expect_success 'git archive --format=zip --add-file' '
echo untracked >untracked &&
git archive --format=zip --add-file=untracked HEAD >with_untracked.zip
'
check_zip with_untracked
check_added with_untracked untracked untracked
test_expect_success 'git archive --format=zip --add-file twice' '
echo untracked >untracked &&
git archive --format=zip --prefix=one/ --add-file=untracked \
--prefix=two/ --add-file=untracked \
--prefix= HEAD >with_untracked2.zip
'
check_zip with_untracked2
check_added with_untracked2 untracked one/untracked
check_added with_untracked2 untracked two/untracked
test_done