The timestamp index (_darcs/index) should not be confused with the patch index. It was introduced in Petr Ročkai’s 2009 Google Summer of Code project and made its way into Darcs around Darcs 2.3.1 or so (TODO: check history)
Darcs tries and save space and make copying faster by hard-linking certain files (this is safe because the files are internal ones that darcs knows will not change). Unfortunately, this hardlinking is a potential source of confusion, because Darcs because it relies on timestamps to know if it should diff a file for whatsnew or not.
The timestamp index is a file which darcs uses to keep track of timestamps itself rather than trusting the filesystem. This means it doesn’t get confused so easily and start trying to diff files left and right.
EYK: there’s something a bit fishy about my explanation. Why would we want these hardlinked files to have different timestamps for each repo? Does that mean darcs deliberately touches the pristine files just to update the timestamps so it knows not to look at them anymore?
You can query the index with the
darcs show index command
The index is written in some binary format that Petr made up. It should be fairly straightforward to work it out backwards, but it could be nice to have it written down somewhere