Re: [PATCH] Extend index to save more flags
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:45:16
Nguyễn Thái Ngọc Duy [off-list ref] writes:
The on-disk format of index only saves 16 bit flags, nearly all have been used. The last bit (CE_EXTENDED) is used to for future extension. This patch extends index entry format to save more flags in future. The new entry format will be used when CE_EXTENDED bit is 1. Because older implementation may not understand CE_EXTENDED bit and misread the new format, if there is any extended entry in index, index header version will turn 3, which makes it incompatible for older git. If there is none, header version will return to 2 again.
I think this is a good change.
quoted hunk ↗ jump to hunk
diff --git a/cache.h b/cache.h index f725783..f8578d1 100644 --- a/cache.h +++ b/cache.h@@ -109,6 +109,26 @@ struct ondisk_cache_entry { char name[FLEX_ARRAY]; /* more */ }; +/* + * This struct is used when CE_EXTENDED bit is 1 + * The struct must match ondisk_cache_entry exactly from + * ctime till flags + */ +struct ondisk_cache_entry_extended { + struct cache_time ctime; + struct cache_time mtime; + unsigned int dev; + unsigned int ino; + unsigned int mode; + unsigned int uid; + unsigned int gid; + unsigned int size; + unsigned char sha1[20]; + unsigned short flags; + unsigned short flags2; + char name[FLEX_ARRAY]; /* more */ +}; +
We should change these to more explicitly sized uint32_t both in the original and this extended structure, but after this patch (or later variant of it) lands in the tree.