-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
git-pack-objects: Automatically pack annotated tags if object was packed
The new option "--include-tag" allows the caller to request that any annotated tag be included into the packfile if the object the tag references was also included as part of the packfile. This option can be useful on the server side of a native git transport, where the server knows what commits it is including into a packfile to update the client. If new annotated tags have been introduced then we can also include them in the packfile, saving the client from needing to request them through a second connection. This change only introduces the backend option and provides a test. Protocol extensions to make this useful in fetch-pack/upload-pack are still necessary to activate the logic during transport. Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
Shawn O. Pearce
authored and
Junio C Hamano
committed
Mar 5, 2008
1 parent
cf7f929
commit f0a24aa
Showing
3 changed files
with
111 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
#!/bin/sh | ||
|
||
test_description='git-pack-object --include-tag' | ||
. ./test-lib.sh | ||
|
||
TRASH=`pwd` | ||
|
||
test_expect_success setup ' | ||
echo c >d && | ||
git update-index --add d && | ||
tree=`git write-tree` && | ||
commit=`git commit-tree $tree </dev/null` && | ||
echo "object $commit" >sig && | ||
echo "type commit" >>sig && | ||
echo "tag mytag" >>sig && | ||
echo "tagger $(git var GIT_COMMITTER_IDENT)" >>sig && | ||
echo >>sig && | ||
echo "our test tag" >>sig && | ||
tag=`git mktag <sig` && | ||
rm d sig && | ||
git update-ref refs/tags/mytag $tag && { | ||
echo $tree && | ||
echo $commit && | ||
git ls-tree $tree | sed -e "s/.* \\([0-9a-f]*\\) .*/\\1/" | ||
} >obj-list | ||
' | ||
|
||
rm -rf clone.git | ||
test_expect_success 'pack without --include-tag' ' | ||
packname_1=$(git pack-objects \ | ||
--window=0 \ | ||
test-1 <obj-list) | ||
' | ||
|
||
test_expect_success 'unpack objects' ' | ||
( | ||
GIT_DIR=clone.git && | ||
export GIT_DIR && | ||
git init && | ||
git unpack-objects -n <test-1-${packname_1}.pack && | ||
git unpack-objects <test-1-${packname_1}.pack | ||
) | ||
' | ||
|
||
test_expect_success 'check unpacked result (have commit, no tag)' ' | ||
git rev-list --objects $commit >list.expect && | ||
( | ||
GIT_DIR=clone.git && | ||
export GIT_DIR && | ||
test_must_fail git cat-file -e $tag && | ||
git rev-list --objects $commit | ||
) >list.actual && | ||
git diff list.expect list.actual | ||
' | ||
|
||
rm -rf clone.git | ||
test_expect_success 'pack with --include-tag' ' | ||
packname_1=$(git pack-objects \ | ||
--window=0 \ | ||
--include-tag \ | ||
test-2 <obj-list) | ||
' | ||
|
||
test_expect_success 'unpack objects' ' | ||
( | ||
GIT_DIR=clone.git && | ||
export GIT_DIR && | ||
git init && | ||
git unpack-objects -n <test-2-${packname_1}.pack && | ||
git unpack-objects <test-2-${packname_1}.pack | ||
) | ||
' | ||
|
||
test_expect_success 'check unpacked result (have commit, have tag)' ' | ||
git rev-list --objects mytag >list.expect && | ||
( | ||
GIT_DIR=clone.git && | ||
export GIT_DIR && | ||
git rev-list --objects $tag | ||
) >list.actual && | ||
git diff list.expect list.actual | ||
' | ||
|
||
test_done |