1402 flags, |
1402 flags, |
1403 backgroundclose=True, |
1403 backgroundclose=True, |
1404 atomictemp=atomictemp, |
1404 atomictemp=atomictemp, |
1405 ) |
1405 ) |
1406 if wantfiledata: |
1406 if wantfiledata: |
|
1407 # XXX note that there is a race window between the time we |
|
1408 # write the clean data into the file and we stats it. So another |
|
1409 # writing process meddling with the file content right after we |
|
1410 # wrote it could cause bad stat data to be gathered. |
|
1411 # |
|
1412 # They are 2 data we gather here |
|
1413 # - the mode: |
|
1414 # That we actually just wrote, we should not need to read |
|
1415 # it from disk, (except not all mode might have survived |
|
1416 # the disk round-trip, which is another issue: we should |
|
1417 # not depends on this) |
|
1418 # - the mtime, |
|
1419 # On system that support nanosecond precision, the mtime |
|
1420 # could be accurate enough to tell the two writes appart. |
|
1421 # However gathering it in a racy way make the mtime we |
|
1422 # gather "unreliable". |
|
1423 # |
|
1424 # (note: we get the size from the data we write, which is sane) |
|
1425 # |
|
1426 # So in theory the data returned here are fully racy, but in |
|
1427 # practice "it works mostly fine". |
|
1428 # |
|
1429 # Do not be surprised if you end up reading this while looking |
|
1430 # for the causes of some buggy status. Feel free to improve |
|
1431 # this in the future, but we cannot simply stop gathering |
|
1432 # information. Otherwise `hg status` call made after a large `hg |
|
1433 # update` runs would have to redo a similar amount of work to |
|
1434 # restore and compare all files content. |
1407 s = wfctx.lstat() |
1435 s = wfctx.lstat() |
1408 mode = s.st_mode |
1436 mode = s.st_mode |
1409 mtime = timestamp.mtime_of(s) |
1437 mtime = timestamp.mtime_of(s) |
1410 # for dirstate.update_file's parentfiledata argument: |
1438 # for dirstate.update_file's parentfiledata argument: |
1411 filedata[f] = (mode, size, mtime) |
1439 filedata[f] = (mode, size, mtime) |