Comments
Patch
@@ -1404,6 +1404,31 @@
atomictemp=atomictemp,
)
if wantfiledata:
+ # XXX note that there is a race windows between the time we
+ # write the clean data into the file and we stats it. So a
+ # writting process meddling with the file content right as we
+ # writes it could cause bad data to be gathered.
+ #
+ # They are 2 data we gather here
+ # - the mode:
+ # That we actually just wrote, we should not need to read
+ # it from disk, (except not all mode might have survived
+ # the disk round-trip, which is another issue)
+ # - the mtime,
+ # That could be accurate enough on filesystem with
+ # nanosecond precision, but is read in a racy way.
+ #
+ # (note: we get the size from the data we write, which is sane)
+ #
+ # So in theory the data returned here are fully racy, but in
+ # practice "it works mostly fine".
+ #
+ # Do not be surprised if you end up reading this while
+ # looking for the source of some buggy status. Feel free to
+ # improve this in the future, but we cannot simply stop
+ # gathering information otherwise `hg status` call made after a
+ # large `hg update` runs would have to redo a similar amount of
+ # work to restore and compare all files content.
s = wfctx.lstat()
mode = s.st_mode
mtime = timestamp.mtime_of(s)