All of lore.kernel.org
 help / color / mirror / Atom feed
* Understanding last ~28 bytes of index file
@ 2019-06-13  6:32 Farhan Khan
  2019-06-13 17:09 ` Jeff King
  0 siblings, 1 reply; 2+ messages in thread
From: Farhan Khan @ 2019-06-13  6:32 UTC (permalink / raw)
  To: git

Hi all,

I am trying to understand how the index (.git/index) file works. When looking through extensions, it loops until it reaches the last 28 bytes (SHA size + 8). This is referenced here. https://github.com/git/git/blob/master/read-cache.c#L1933
What do the last 28 bytes consist of? Where in the source are bytes written?

I am trying to understand how to reproduce the index file and am not sure how this part works.

Thank you,
---
Farhan Khan
PGP Fingerprint: 1312 89CE 663E 1EB2 179C  1C83 C41D 2281 F8DA C0DE

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Understanding last ~28 bytes of index file
  2019-06-13  6:32 Understanding last ~28 bytes of index file Farhan Khan
@ 2019-06-13 17:09 ` Jeff King
  0 siblings, 0 replies; 2+ messages in thread
From: Jeff King @ 2019-06-13 17:09 UTC (permalink / raw)
  To: Farhan Khan; +Cc: git

On Thu, Jun 13, 2019 at 06:32:03AM +0000, Farhan Khan wrote:

> I am trying to understand how the index (.git/index) file works. When
> looking through extensions, it loops until it reaches the last 28
> bytes (SHA size + 8). This is referenced here.
> https://github.com/git/git/blob/master/read-cache.c#L1933
> What do the last 28 bytes consist of? Where in the source are bytes written?

It is not that the last 28 bytes are magical. It is that you must have
at least 28 bytes remaining in the file for there to be any extension.
20 of those are the trailing sha1 hash (which are written as part of the
hashfile code in csum-file.c).

And then for there to be an extension, it must have 8 bytes of name and
length, which will then be followed by however many bytes the length
indicated. After parsing that, we check to see if there are enough bytes
for another extension, and so on.

To find where the index extension blocks themselves are written, perhaps
grep for write_index_ext_header(), which should be called before writing
out the data for each.

-Peff

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2019-06-13 17:09 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-13  6:32 Understanding last ~28 bytes of index file Farhan Khan
2019-06-13 17:09 ` Jeff King

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.