Re: BUG in git diff-index
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Mar 31, 2016, 20:39 UTC
- Message-ID
- <xmqqwpoil6vt.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <56FD7AE8.4090905@nglowry.com>
Andy Lowry <andy.work@nglowry.com> writes:
> So I think now that the script should do "update-index --refresh" > followed by "diff-index --quiet HEAD". Sound correct?
Yes. That has always been one of the kosher ways for any script to make sure that the files in the working tree that are tracked have not been modified relative to HEAD (assuming that the index matches HEAD). If you are fuzzy about that assumption, you would also do "diff-index --quiet --cached HEAD" to ensure it, making the whole thing:
update-index --refresh
diff-index --quiet --cached HEAD && diff-index --quiet HEADOur scripts traditionally do the equivalent in a slightly different way. require_clean_work_tree() in git-sh-setup makes sure that (1) your working tree files match what is in your index and that (2) your index matches the HEAD, i.e.
update-index --refresh
diff-files --quiet && diff-index --cached --quiet HEADThey are equivalent in that H==I && H==W (yours) mean H==I==W, while I==W && H==I (ours) also mean H==I==W. Two diff-index would require you to open the tree object of the HEAD twice, so our version may be more efficient but you probably wouldn't be able to measure the difference.