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

Re: [PATCH 10/13] update delta handling in write_object() for --pack-limit

From
DHDana How <danahow@gmail.com>
Date
Apr 5, 2007, 23:41 UTC
Message-ID
<56b7f5510704051641s69c9bdf1t8ce75385456bb4da@mail.gmail.com>
In-Reply-To
<7v3b3emmv6.fsf@assigned-by-dhcp.cox.net>
On 4/5/07, Junio C Hamano <junkio@cox.net> wrote:
Show 20 quoted lines
> "Dana How" <danahow@gmail.com> writes:
> >       if (!to_reuse) {
> > +             int usable_delta =      !entry->delta ? 0 :
> > +                                     !offset_limit ? 1 :
> > +                                     entry->delta->no_write ? 0 :
> > +                                     entry->delta->offset ? 1 : 0;
> >               buf = read_sha1_file(entry->sha1, &type, &size);
> >               if (!buf)
> >                       die("unable to read %s", sha1_to_hex(entry->sha1));
> >               if (size != entry->size)
> >                       die("object %s size inconsistency (%lu vs %lu)",
> >                           sha1_to_hex(entry->sha1), size, entry->size);
> > -             if (entry->delta) {
> > +             if (usable_delta) {
> >                       buf = delta_against(buf, size, entry);
> >                       size = entry->delta_size;
> >                       obj_type = (allow_ofs_delta && entry->delta->offset) ?
>
> This really needs explanation on *why*, at least in the commit
> log, and perhaps also in the code as comment.

Yes, I need retraining ;-) I'm accustomed to more expensive commits in which the log message describes the objective, not the details. Or, I could have followed the example of the comments on the initialization for "to_reuse".

Show 19 quoted lines
> Here is my attempt to understand that logic (please make
> necessary corrections).
>
>  (1) When there is no delta base found by the earlier
>      find_deltas()/try_delta() loop, obviously we cannot write
>      deltified so we write plain.
>
>  (2) Otherwise if we are not offset limited, then we keep the
>      old way of using that delta base.
>
>  (3) If the delta base is not in this pack (because of
>      offset-limit chomping the pack into two or more), then we
>      cannot use it as the base.
>
>  (4) If the delta has already been written, we can use it as the
>      base for this object, but otherwise we cannot.
>
> (3) makes me wonder if we can still allow it in the thin-pack
> case by just loosening the condition here.

You are correct. In response to someone's previous question I think I said I hadn't handled the --thin-pack cases yet. Do you think these will matter? There is strong sentiment on this list that a pack should be split at the receiver, not the transmitter, so --thin-pack and --pack-limit wouldn't be used together. If you think this combination does matter, I'd prefer to add the extra cases in a separate follow-on patch if that's OK.

> Also I need explanation to understand why (4) is needed --
> doesn't write_one() always write base object out before writing
> a deltified object that depends on it?

Yes, write_one() does that. I was being too cautious, since I had only known (some of) the code for a few hours!

-- 
Dana L. How  danahow@gmail.com  +1 650 804 5991 cell
Previous: Junio C HamanoNext: Nicolas Pitre
Message 3 of 4 in “update delta handling in write_object() for --pack-limit”
  1. 10/13 update delta handling in write_object() for --pack-limitDana How, Apr 5, 2007
  2. Junio C HamanoApr 5, 2007
  3. Dana HowApr 5, 2007
  4. Nicolas PitreApr 6, 2007

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.