Skip to content

Commit

Permalink
Merge branch 'ts/unpacklimit-config-fix'
Browse files Browse the repository at this point in the history
transfer.unpackLimit ought to be used as a fallback, but overrode
fetch.unpackLimit and receive.unpackLimit instead.

* ts/unpacklimit-config-fix:
  transfer.unpackLimit: fetch/receive.unpackLimit takes precedence
  • Loading branch information
gitster committed Aug 30, 2023
2 parents 74a2e88 + f3d33f8 commit cc48906
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 9 deletions.
6 changes: 3 additions & 3 deletions builtin/receive-pack.c
Original file line number Diff line number Diff line change
Expand Up @@ -2527,10 +2527,10 @@ int cmd_receive_pack(int argc, const char **argv, const char *prefix)
if (cert_nonce_seed)
push_cert_nonce = prepare_push_cert_nonce(service_dir, time(NULL));

if (0 <= transfer_unpack_limit)
unpack_limit = transfer_unpack_limit;
else if (0 <= receive_unpack_limit)
if (0 <= receive_unpack_limit)
unpack_limit = receive_unpack_limit;
else if (0 <= transfer_unpack_limit)
unpack_limit = transfer_unpack_limit;

switch (determine_protocol_version_server()) {
case protocol_v2:
Expand Down
6 changes: 3 additions & 3 deletions fetch-pack.c
Original file line number Diff line number Diff line change
Expand Up @@ -1911,10 +1911,10 @@ static void fetch_pack_setup(void)
if (did_setup)
return;
fetch_pack_config();
if (0 <= transfer_unpack_limit)
unpack_limit = transfer_unpack_limit;
else if (0 <= fetch_unpack_limit)
if (0 <= fetch_unpack_limit)
unpack_limit = fetch_unpack_limit;
else if (0 <= transfer_unpack_limit)
unpack_limit = transfer_unpack_limit;
did_setup = 1;
}

Expand Down
46 changes: 46 additions & 0 deletions t/t5510-fetch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1127,6 +1127,52 @@ do
'
done

test_expect_success 'prepare source branch' '
echo one >onebranch &&
git checkout --orphan onebranch &&
git rm --cached -r . &&
git add onebranch &&
git commit -m onebranch &&
git rev-list --objects onebranch -- >actual &&
# 3 objects should be created, at least ...
test 3 -le $(wc -l <actual)
'

validate_store_type () {
git -C dest count-objects -v >actual &&
case "$store_type" in
packed)
grep "^count: 0$" actual ;;
loose)
grep "^packs: 0$" actual ;;
esac || {
echo "store_type is $store_type"
cat actual
false
}
}

test_unpack_limit () {
store_type=$1

case "$store_type" in
packed) fetch_limit=1 transfer_limit=10000 ;;
loose) fetch_limit=10000 transfer_limit=1 ;;
esac

test_expect_success "fetch trumps transfer limit" '
rm -fr dest &&
git --bare init dest &&
git -C dest config fetch.unpacklimit $fetch_limit &&
git -C dest config transfer.unpacklimit $transfer_limit &&
git -C dest fetch .. onebranch &&
validate_store_type
'
}

test_unpack_limit packed
test_unpack_limit loose

setup_negotiation_tip () {
SERVER="$1"
URL="$2"
Expand Down
35 changes: 32 additions & 3 deletions t/t5546-receive-limits.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,26 @@ TEST_PASSES_SANITIZE_LEAK=true
# When the limit is 1, `git receive-pack` will call `git index-pack`.
# When the limit is 10000, `git receive-pack` will call `git unpack-objects`.

validate_store_type () {
git -C dest count-objects -v >actual &&
case "$store_type" in
index)
grep "^count: 0$" actual ;;
unpack)
grep "^packs: 0$" actual ;;
esac || {
echo "store_type is $store_type"
cat actual
false;
}
}

test_pack_input_limit () {
case "$1" in
index) unpack_limit=1 ;;
unpack) unpack_limit=10000 ;;
store_type=$1

case "$store_type" in
index) unpack_limit=1 other_limit=10000 ;;
unpack) unpack_limit=10000 other_limit=1 ;;
esac

test_expect_success 'prepare destination repository' '
Expand Down Expand Up @@ -43,6 +59,19 @@ test_pack_input_limit () {
git --git-dir=dest config receive.maxInputSize 0 &&
git push dest HEAD
'

test_expect_success 'prepare destination repository (once more)' '
rm -fr dest &&
git --bare init dest
'

test_expect_success 'receive trumps transfer' '
git --git-dir=dest config receive.unpacklimit "$unpack_limit" &&
git --git-dir=dest config transfer.unpacklimit "$other_limit" &&
git push dest HEAD &&
validate_store_type
'

}

test_expect_success "create known-size (1024 bytes) commit" '
Expand Down

0 comments on commit cc48906

Please sign in to comment.