From: Jeff Hostetler <git@jeffhostetler•com>
To: git@vger•kernel.org
Cc: gitster@pobox•com, peff@peff•net, jonathantanmy@google•com,
Jeff Hostetler <jeffhost@microsoft•com>
Subject: [PATCH v4 06/15] pack-objects: test support for blob filtering
Date: Thu, 16 Nov 2017 18:17:14 +0000 [thread overview]
Message-ID: <20171116181723.62033-7-git@jeffhostetler.com> (raw)
In-Reply-To: <20171116181723.62033-1-git@jeffhostetler.com>
From: Jonathan Tan <jonathantanmy@google•com>
As part of an effort to improve Git support for very large repositories
in which clients typically have only a subset of all version-controlled
blobs, test pack-objects support for --filter=blob:limit=<n>, packing only
blobs not exceeding that size unless the blob corresponds to a file
whose name starts with ".git". upload-pack will eventually be taught to
use this new parameter if needed to exclude certain blobs during a fetch
or clone, potentially drastically reducing network consumption when
serving these very large repositories.
Signed-off-by: Jonathan Tan <jonathantanmy@google•com>
Signed-off-by: Jeff Hostetler <jeffhost@microsoft•com>
---
t/t5300-pack-object.sh | 26 ++++++++++++++++++++++++++
t/test-lib-functions.sh | 12 ++++++++++++
2 files changed, 38 insertions(+)
diff --git a/t/t5300-pack-object.sh b/t/t5300-pack-object.sh
index 9c68b99..8e3db12 100755
--- a/t/t5300-pack-object.sh
+++ b/t/t5300-pack-object.sh
@@ -457,6 +457,32 @@ test_expect_success !PTHREADS,C_LOCALE_OUTPUT 'pack-objects --threads=N or pack.
grep -F "no threads support, ignoring pack.threads" err
'
+lcut () {
+ perl -e '$/ = undef; $_ = <>; s/^.{'$1'}//s; print $_'
+}
+
+test_expect_success 'filtering by size works with multiple excluded' '
+ rm -rf server &&
+ git init server &&
+ printf a > server/a &&
+ printf b > server/b &&
+ printf c-very-long-file > server/c &&
+ printf d-very-long-file > server/d &&
+ git -C server add a b c d &&
+ git -C server commit -m x &&
+
+ git -C server rev-parse HEAD >objects &&
+ git -C server pack-objects --revs --stdout --filter=blob:limit=10 <objects >my.pack &&
+
+ # Ensure that only the small blobs are in the packfile
+ git index-pack my.pack &&
+ git verify-pack -v my.idx >objectlist &&
+ grep $(git hash-object server/a) objectlist &&
+ grep $(git hash-object server/b) objectlist &&
+ ! grep $(git hash-object server/c) objectlist &&
+ ! grep $(git hash-object server/d) objectlist
+'
+
#
# WARNING!
#
diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
index 1701fe2..07b79c7 100644
--- a/t/test-lib-functions.sh
+++ b/t/test-lib-functions.sh
@@ -1020,3 +1020,15 @@ nongit () {
"$@"
)
}
+
+# Converts big-endian pairs of hexadecimal digits into bytes. For example,
+# "printf 61620d0a | hex_pack" results in "ab\r\n".
+hex_pack () {
+ perl -e '$/ = undef; $input = <>; print pack("H*", $input)'
+}
+
+# Converts bytes into big-endian pairs of hexadecimal digits. For example,
+# "printf 'ab\r\n' | hex_unpack" results in "61620d0a".
+hex_unpack () {
+ perl -e '$/ = undef; $input = <>; print unpack("H2" x length($input), $input)'
+}
--
2.9.3
next prev parent reply other threads:[~2017-11-16 18:18 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-16 18:17 [PATCH v4 00/15] Parial clone part 3: clone, fetch, fetch-pack, upload-pack, and tests Jeff Hostetler
2017-11-16 18:17 ` [PATCH v4 01/15] upload-pack: add object filtering for partial clone Jeff Hostetler
2017-11-16 18:17 ` [PATCH v4 02/15] clone, fetch-pack, index-pack, transport: " Jeff Hostetler
2017-11-16 18:17 ` [PATCH v4 03/15] fetch: refactor calculation of remote list Jeff Hostetler
2017-11-16 18:17 ` [PATCH v4 04/15] fetch: add object filtering for partial fetch Jeff Hostetler
2017-11-16 18:17 ` [PATCH v4 05/15] remote-curl: add object filtering for partial clone Jeff Hostetler
2017-11-16 18:17 ` Jeff Hostetler [this message]
2017-11-16 18:17 ` [PATCH v4 07/15] fetch-pack: test support excluding large blobs Jeff Hostetler
2017-11-16 18:17 ` [PATCH v4 08/15] partial-clone: define partial clone settings in config Jeff Hostetler
2017-11-16 18:17 ` [PATCH v4 09/15] fetch-pack: test support excluding large blobs Jeff Hostetler
2017-11-16 18:17 ` [PATCH v4 10/15] fetch: add from_promisor and exclude-promisor-objects parameters Jeff Hostetler
2017-11-16 18:17 ` [PATCH v4 11/15] t5500: add fetch-pack tests for partial clone Jeff Hostetler
2017-11-16 18:17 ` [PATCH v4 12/15] t5601: test " Jeff Hostetler
2017-11-16 18:17 ` [PATCH v4 13/15] t5500: more tests for partial clone and fetch Jeff Hostetler
2017-11-16 18:17 ` [PATCH v4 14/15] unpack-trees: batch fetching of missing blobs Jeff Hostetler
2017-11-16 18:17 ` [PATCH v4 15/15] fetch-pack: restore save_commit_buffer after use Jeff Hostetler
2017-11-17 6:19 ` [PATCH v4 00/15] Parial clone part 3: clone, fetch, fetch-pack, upload-pack, and tests Junio C Hamano
2017-11-21 18:17 ` Jonathan Tan
2017-11-21 20:46 ` Jeff Hostetler
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171116181723.62033-7-git@jeffhostetler.com \
--to=git@jeffhostetler$(echo .)com \
--cc=git@vger$(echo .)kernel.org \
--cc=gitster@pobox$(echo .)com \
--cc=jeffhost@microsoft$(echo .)com \
--cc=jonathantanmy@google$(echo .)com \
--cc=peff@peff$(echo .)net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox