Re: Problem with large files on different OSes
- From
Nicolas Pitre <nico@cam.org>
- Date
- May 28, 2009, 03:26 UTC
- Message-ID
- <alpine.LFD.2.00.0905272312370.3906@xanadu.home>
- In-Reply-To
- <alpine.LFD.2.01.0905271825520.3435@localhost.localdomain>
On Wed, 27 May 2009, Linus Torvalds wrote:
Show 22 quoted lines
> Something like the following may also work, as a more generic "just don't
> even bother trying to delta huge files".
>
> Totally untested. Maybe it works. Maybe it doesn't.
>
> Linus
>
> ---
> Documentation/config.txt | 7 +++++++
> builtin-pack-objects.c | 9 +++++++++
> 2 files changed, 16 insertions(+), 0 deletions(-)
>
> diff --git a/Documentation/config.txt b/Documentation/config.txt
> index 2c03162..8c21027 100644
> --- a/Documentation/config.txt
> +++ b/Documentation/config.txt
> @@ -1238,6 +1238,13 @@ older version of git. If the `{asterisk}.pack` file is smaller than 2 GB, howeve
> you can use linkgit:git-index-pack[1] on the *.pack file to regenerate
> the `{asterisk}.idx` file.
>
> +pack.packDeltaLimit::
> + The default maximum size of objects that we try to delta.The option name feels a bit wrong here, like if it meant the max number of deltas in a pack. Nothing better comes to my mind at the moment though.
Show 19 quoted lines
> diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c > index 9742b45..9a0072b 100644 > --- a/builtin-pack-objects.c > +++ b/builtin-pack-objects.c > @@ -85,6 +85,7 @@ static struct progress *progress_state; > static int pack_compression_level = Z_DEFAULT_COMPRESSION; > static int pack_compression_seen; > > +static unsigned long pack_delta_limit = 64*1024*1024; > static unsigned long delta_cache_size = 0; > static unsigned long max_delta_cache_size = 0; > static unsigned long cache_max_small_delta_size = 1000; > @@ -1270,6 +1271,10 @@ static int try_delta(struct unpacked *trg, struct unpacked *src, > if (trg_entry->type != src_entry->type) > return -1; > > + /* If we limit delta generation, don't even bother for larger blobs */ > + if (pack_delta_limit && trg_entry->size >= pack_delta_limit) > + return -1;
I'd suggest filtering delta candidates out of delta_list up front in prepare_pack() instead.
Nicolas