On Thu, May 10, 2018 at 7:06 PM, Stefan Beller <sbeller@xxxxxxxxxx> wrote: >> +=== Deltified representation >> + >> +Conceptually there are only four object types: commit, tree, tag and >> +blob. However to save space, an object could be stored as a "delta" of >> +another "base" object. These representations are assigned new types >> +ofs-delta and ref-delta, which is only valid in a pack file. > > ...only valid... > > as opposed to loose objects or as opposed to referencing cross-packs? > I would think the former, not the latter. Yeah. This is pretty much an implementation detail of a pack. The "real" type is always blob/commit/tree/tag. But you only see this when you dig deep down in pack-related code. >> +Both ofs-delta and ref-delta store the "delta" against another >> +object. The difference between them is, ref-delta directly encodes >> +20-byte base object name. If the base object is in the same pack, >> +ofs-delta encodes the offset of the base object in the pack instead. > > Reading this paragraph clears up the question from before. > The ref delta is a delta to another "reference by hash id (sha1)". > What abbreviation is OFS? OFfSet ? I guess so. I never bothered to track down the source for that. >> +The delta data is a sequence of instructions to reconstruct an object >> +from the base object. > > As said before the base object is of type 1..4, we do not "delta-on-delta" > yet, but to construct the object we have to create the base object first, > which itself can be represented as a deltified object leading to a delta > chain. Yeah that's the delta chain concept. I'll just make a note here about base object potentially being a delta object as well. -- Duy