git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 3/5] pack-objects: clamp negative window size to 0

From
Jeff King <peff@peff.net>
Date
May 4, 2021, 21:38 UTC
Message-ID
<YJG+xp2b1rUzBaws@coredump.intra.peff.net>
In-Reply-To
<02a66bfb-aac0-c05e-dab3-366bc312d900@web.de>
On Tue, May 04, 2021 at 08:47:56PM +0200, René Scharfe wrote:
Show 33 quoted lines
> >> This seems like a reasonable approach. It takes existing "undefined"
> >> behavior and turns it into well-understood, "defined" behavior.
> >
> > I was on the fence on doing that, or just:
> >
> >   if (window < 0)
> > 	die("sorry dude, negative windows are nonsense");
> >
> > So if anybody has a strong preference, I could be easily persuaded. Part
> > of what led me to being forgiving was that we similarly clamp too-large
> > depth values (with a warning; I didn't think it was really necessary
> > here, though).
> 
> There's another option: Mapping -1 or all negative values to the
> maximum:
> 
> 	if (window < 0)
> 		window = INT_MAX;
> 	if (depth < 0)
> 		depth = (1 << OE_DEPTH_BITS) - 1;
> 
> That's allows saying "gimme all you got" without knowing or being
> willing to type out the exact maximum value, which may change between
> versions.  Not all that useful for --window, I guess.  That convention
> has been used elsewhere I'm sure, but can't point out a concrete
> example.  $arr[-1] get the last item of the array $arr in PowerShell,
> though, which is kind of similar.
> 
> Sure, you get the same effect in both cases by typing 2147483647, but
> -1 is more convenient.
> 
> Not a strong preference, but I thought it was at least worth
> mentioning that particular bike shed color. :)

Thanks for thinking about this. In general, yeah, allowing "-1" as "unlimited" is a sensible thing for many options. But for these two variables, I don't think "unlimited" is ever a good idea:

  - for --window, it makes the amount of work quadratic in the number of
    objects in the repository (and likewise, memory usage equivalent to
    the uncompressed contents of the repo). Going beyond about 250 or so
    gives diminishing returns.
  - for --depth, going beyond about 50 provides diminishing space
    returns, and makes the run-time performance of accessing the deltas
    horrible.

So certainly INT_MAX or the max allowable by OE_DEPTH_BITS is a very bad idea in both cases, and the use would probably be happier if we just hit a die() instead. :) We _could_ make "-1" mean "the maximum sensible valuable", but I think there's a lot of wiggle room for "sensible" there. I much prefer using and advertising the actual values there (as we do for "gc --aggressive").

-Peff
Previous: René ScharfeNext: Ævar Arnfjörð Bjarmason
Message 10 of 15 in “pack-objects: better handling of negative options”
  1. 0/5 pack-objects: better handling of negative optionsJeff King, May 1, 2021
  2. 1/5 t5300: modernize basic testsJeff King, May 1, 2021
  3. Junio C HamanoMay 3, 2021
  4. Jeff KingMay 3, 2021
  5. 2/5 t5300: check that we produced expected number of deltasJeff King, May 1, 2021
  6. 3/5 pack-objects: clamp negative window size to 0Jeff King, May 1, 2021
  7. Derrick StoleeMay 3, 2021
  8. Jeff KingMay 3, 2021
  9. René ScharfeMay 4, 2021
  10. Jeff KingMay 4, 2021
  11. Ævar Arnfjörð BjarmasonMay 5, 2021
  12. René ScharfeMay 5, 2021
  13. 4/5 t5316: check behavior of pack-objects --depth=0Jeff King, May 1, 2021
  14. 5/5 pack-objects: clamp negative depth to 0Jeff King, May 1, 2021
  15. Derrick StoleeMay 3, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.