1
0
mirror of https://github.com/git/git.git synced 2024-10-18 21:48:33 +02:00

Merge branch 'ts/unpacklimit-config-fix'

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
This commit is contained in:
Junio C Hamano 2023-08-30 13:50:41 -07:00
commit cc48906c3b
4 changed files with 84 additions and 9 deletions

@ -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:

@ -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;
}

@ -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"

@ -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' '
@ -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" '