From: Jonathan Tan <[email protected]>
Signed-off-by: Jonathan Tan <[email protected]>
Signed-off-by: Jeff Hostetler <[email protected]>
---
t/t5500-fetch-pack.sh | 60 +++++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 56 insertions(+), 4 deletions(-)
diff --git a/t/t5500-fetch-pack.sh b/t/t5500-fetch-pack.sh
index 7c8339f..86cf653 100755
--- a/t/t5500-fetch-pack.sh
+++ b/t/t5500-fetch-pack.sh
@@ -782,7 +782,7 @@ test_expect_success 'filtering by size has no effect if
support for it is not ad
test_i18ngrep "filtering not recognized by server" err
'
-fetch_blob_max_bytes () {
+setup_blob_max_bytes () {
SERVER="$1"
URL="$2"
@@ -794,7 +794,11 @@ fetch_blob_max_bytes () {
git clone "$URL" client &&
test_config -C client extensions.partialcloneremote origin &&
- test_commit -C "$SERVER" two &&
+ test_commit -C "$SERVER" two
+}
+
+do_blob_max_bytes() {
+ SERVER="$1" &&
git -C client fetch --filter=blobs:limit=0 origin HEAD:somewhere &&
@@ -805,14 +809,62 @@ fetch_blob_max_bytes () {
}
test_expect_success 'fetch with filtering' '
- fetch_blob_max_bytes server server
+ setup_blob_max_bytes server server &&
+ do_blob_max_bytes server
+'
+
+test_expect_success 'fetch respects configured filtering' '
+ setup_blob_max_bytes server server &&
+
+ test_config -C client extensions.partialclonefilter blobs:limit=0 &&
+
+ git -C client fetch origin HEAD:somewhere &&
+
+ # Ensure that commit is fetched, but blob is not
+ test_config -C client extensions.partialcloneremote "arbitrary string"
&&
+ git -C client cat-file -e $(git -C server rev-parse two) &&
+ test_must_fail git -C client cat-file -e $(git hash-object server/two.t)
+'
+
+test_expect_success 'pull respects configured filtering' '
+ setup_blob_max_bytes server server &&
+
+ # Hide two.t from tip so that client does not load it upon the
+ # automatic checkout that pull performs
+ git -C server rm two.t &&
+ test_commit -C server three &&
+
+ test_config -C server uploadpack.allowanysha1inwant 1 &&
+ test_config -C client extensions.partialclonefilter blobs:limit=0 &&
+
+ git -C client pull origin &&
+
+ # Ensure that commit is fetched, but blob is not
+ test_config -C client extensions.partialcloneremote "arbitrary string"
&&
+ git -C client cat-file -e $(git -C server rev-parse two) &&
+ test_must_fail git -C client cat-file -e $(git hash-object server/two.t)
+'
+
+test_expect_success 'clone configures filtering' '
+ rm -rf server client &&
+ test_create_repo server &&
+ test_commit -C server one &&
+ test_commit -C server two &&
+ test_config -C server uploadpack.allowanysha1inwant 1 &&
+
+ git clone --filter=blobs:limit=12345 server client &&
+
+ # Ensure that we can, for example, checkout HEAD^
+ rm -rf client/.git/objects/* &&
+ git -C client checkout HEAD^
'
. "$TEST_DIRECTORY"/lib-httpd.sh
start_httpd
test_expect_success 'fetch with filtering and HTTP' '
- fetch_blob_max_bytes "$HTTPD_DOCUMENT_ROOT_PATH/server"
"$HTTPD_URL/smart/server"
+ setup_blob_max_bytes "$HTTPD_DOCUMENT_ROOT_PATH/server"
"$HTTPD_URL/smart/server" &&
+ do_blob_max_bytes "$HTTPD_DOCUMENT_ROOT_PATH/server"
'
stop_httpd
--
2.9.3