Re: git bugs
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:44:44
Linus Torvalds [off-list ref] writes:
The other approach is to know that an empty blob always has a very specific SHA1. Here's an trial patch.
quoted hunk
read-cache.c | 16 ++++++++++++++++ 1 files changed, 16 insertions(+), 0 deletions(-)diff --git a/read-cache.c b/read-cache.c index 8e5fbb6..f83de8c 100644 --- a/read-cache.c +++ b/read-cache.c...@@ -193,6 +203,12 @@ static int ce_match_stat_basic(struct cache_entry *ce, struct stat *st) if (ce->ce_size != (unsigned int) st->st_size) changed |= DATA_CHANGED; + /* Racily smudged entry? */ + if (!ce->ce_size) { + if (!is_empty_blob_sha1(ce->sha1)) + changed |= DATA_CHANGED; + } + return changed; }
Thanks. This would be a good fix to the issue. The only theoretical worry I can think of is if there is an insane convert_to_worktree() filter that turns a non-empty blob into an empty work tree file. An "In blobs, always store everything as UTF16 with BOM" filter, when badly implemented, might turn an empty work tree file into a blob with BOM and nothing else in it, but we can safely declare that such use case is simply insane and broken ;-).