diff options
-rw-r--r-- | Documentation/RelNotes-1.7.0.txt | 8 | ||||
-rw-r--r-- | Documentation/config.txt | 11 | ||||
-rw-r--r-- | Documentation/git-pack-objects.txt | 5 | ||||
-rw-r--r-- | Documentation/git-repack.txt | 8 | ||||
-rw-r--r-- | builtin-pack-objects.c | 11 | ||||
-rwxr-xr-x | t/t5300-pack-object.sh | 14 |
6 files changed, 36 insertions, 21 deletions
diff --git a/Documentation/RelNotes-1.7.0.txt b/Documentation/RelNotes-1.7.0.txt index 323ae5400..e66945cb6 100644 --- a/Documentation/RelNotes-1.7.0.txt +++ b/Documentation/RelNotes-1.7.0.txt @@ -38,7 +38,7 @@ Notes on behaviour change whitespaces is reported with zero exit status when run with --exit-code, and there is no "diff --git" header for such a change. - * external diff and textconv helpers are now executed using the shell. + * External diff and textconv helpers are now executed using the shell. This makes them consistent with other programs executed by git, and allows you to pass command-line parameters to the helpers. Any helper paths containing spaces or other metacharacters now need to be @@ -46,6 +46,12 @@ Notes on behaviour change environment, and diff.*.command and diff.*.textconv in the config file. + * The --max-pack-size argument to 'git repack' and 'git pack-objects' was + assuming the provided size to be expressed in MiB, unlike the + corresponding config variable and other similar options accepting a size + value. It is now expecting a size expressed in bytes, with a possible + unit suffix of 'k', 'm', or 'g'. + Updates since v1.6.6 -------------------- diff --git a/Documentation/config.txt b/Documentation/config.txt index 36ad992a5..4c36aa95b 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -1368,10 +1368,13 @@ you can use linkgit:git-index-pack[1] on the *.pack file to regenerate the `{asterisk}.idx` file. pack.packSizeLimit:: - The default maximum size of a pack. This setting only affects - packing to a file, i.e. the git:// protocol is unaffected. It - can be overridden by the `\--max-pack-size` option of - linkgit:git-repack[1]. + The maximum size of a pack. This setting only affects + packing to a file when repacking, i.e. the git:// protocol + is unaffected. It can be overridden by the `\--max-pack-size` + option of linkgit:git-repack[1]. The minimum size allowed is + limited to 1 MiB. The default is unlimited. + Common unit suffixes of 'k', 'm', or 'g' are + supported. pager.<cmd>:: Allows turning on or off pagination of the output of a diff --git a/Documentation/git-pack-objects.txt b/Documentation/git-pack-objects.txt index 097a14773..ffd5025f7 100644 --- a/Documentation/git-pack-objects.txt +++ b/Documentation/git-pack-objects.txt @@ -105,8 +105,9 @@ base-name:: `--window-memory=0` makes memory usage unlimited, which is the default. ---max-pack-size=<n>:: - Maximum size of each output packfile, expressed in MiB. +--max-pack-size=[N]:: + Maximum size of each output pack file. The size can be suffixed with + "k", "m", or "g". The minimum size allowed is limited to 1 MiB. If specified, multiple packfiles may be created. The default is unlimited, unless the config variable `pack.packSizeLimit` is set. diff --git a/Documentation/git-repack.txt b/Documentation/git-repack.txt index 538895c50..e2f2fa203 100644 --- a/Documentation/git-repack.txt +++ b/Documentation/git-repack.txt @@ -98,10 +98,12 @@ other objects in that pack they already have locally. `--window-memory=0` makes memory usage unlimited, which is the default. ---max-pack-size=<n>:: - Maximum size of each output packfile, expressed in MiB. +--max-pack-size=[N]:: + Maximum size of each output pack file. The size can be suffixed with + "k", "m", or "g". The minimum size allowed is limited to 1 MiB. If specified, multiple packfiles may be created. - The default is unlimited. + The default is unlimited, unless the config variable + `pack.packSizeLimit` is set. Configuration diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c index 3186035fb..dcfe62aa0 100644 --- a/builtin-pack-objects.c +++ b/builtin-pack-objects.c @@ -77,7 +77,7 @@ static int allow_ofs_delta; static const char *base_name; static int progress = 1; static int window = 10; -static uint32_t pack_size_limit, pack_size_limit_cfg; +static unsigned long pack_size_limit, pack_size_limit_cfg; static int depth = 50; static int delta_search_threads; static int pack_to_stdout; @@ -2192,10 +2192,8 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) continue; } if (!prefixcmp(arg, "--max-pack-size=")) { - char *end; pack_size_limit_cfg = 0; - pack_size_limit = strtoul(arg+16, &end, 0) * 1024 * 1024; - if (!arg[16] || *end) + if (!git_parse_ulong(arg+16, &pack_size_limit)) usage(pack_usage); continue; } @@ -2335,9 +2333,12 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) if (!pack_to_stdout && !pack_size_limit) pack_size_limit = pack_size_limit_cfg; - if (pack_to_stdout && pack_size_limit) die("--max-pack-size cannot be used to build a pack for transfer."); + if (pack_size_limit && pack_size_limit < 1024*1024) { + warning("minimum pack size limit is 1 MiB"); + pack_size_limit = 1024*1024; + } if (!pack_to_stdout && thin) die("--thin cannot be used to build an indexable pack."); diff --git a/t/t5300-pack-object.sh b/t/t5300-pack-object.sh index 7c6231c66..1058d981d 100755 --- a/t/t5300-pack-object.sh +++ b/t/t5300-pack-object.sh @@ -16,7 +16,9 @@ test_expect_success \ perl -e "print \"a\" x 4096;" > a && perl -e "print \"b\" x 4096;" > b && perl -e "print \"c\" x 4096;" > c && - git update-index --add a b c && + test-genrandom "seed a" 2097152 > a_big && + test-genrandom "seed b" 2097152 > b_big && + git update-index --add a a_big b b_big c && cat c >d && echo foo >>d && git update-index --add d && tree=`git write-tree` && commit=`git commit-tree $tree </dev/null` && { @@ -375,19 +377,19 @@ test_expect_success 'index-pack with --strict' ' ' test_expect_success 'honor pack.packSizeLimit' ' - git config pack.packSizeLimit 200 && + git config pack.packSizeLimit 3m && packname_10=$(git pack-objects test-10 <obj-list) && - test 3 = $(ls test-10-*.pack | wc -l) + test 2 = $(ls test-10-*.pack | wc -l) ' test_expect_success 'verify resulting packs' ' git verify-pack test-10-*.pack ' -test_expect_success 'tolerate absurdly small packsizelimit' ' - git config pack.packSizeLimit 2 && +test_expect_success 'tolerate packsizelimit smaller than biggest object' ' + git config pack.packSizeLimit 1 && packname_11=$(git pack-objects test-11 <obj-list) && - test $(wc -l <obj-list) = $(ls test-11-*.pack | wc -l) + test 3 = $(ls test-11-*.pack | wc -l) ' test_expect_success 'verify resulting packs' ' |