comparison mercurial/posix.py @ 14927:2aa3e07b2f07

posix, windows: introduce cachestat This class contains a stat result, and possibly other file info to reliably determine between two points in time whether a file has changed. Uniquely identifying a file gives us that reliability because we either atomic rename or append. So one of two will happen: the file 'id' will change, or the size of the file will change. posix implements it simply by calling os.stat() and checking if the result has st_ino. For now on Windows we always assume the path is uncacheable. This can be improved on NTFS due to file IDs: http://msdn.microsoft.com/en-us/library/aa363788(v=vs.85).aspx So we need to find out if a file path is on an NTFS drive, for that we have: - GetVolumeInformation, which unfortunately only works with a root path (but is available on XP) - GetVolumeInformationByHandleW, works on a full file path but requires Vista or higher
author Idan Kamara <idankk86@gmail.com>
date Mon, 25 Jul 2011 15:03:02 +0300
parents 4e7e63fc685a
children 5e44e4b3a0a3
comparison
equal deleted inserted replaced
14926:4e7e63fc685a 14927:2aa3e07b2f07
347 Used to hide the window opened when starting asynchronous 347 Used to hide the window opened when starting asynchronous
348 child process under Windows, unneeded on other systems. 348 child process under Windows, unneeded on other systems.
349 """ 349 """
350 pass 350 pass
351 351
352 class cachestat(object):
353 def __init__(self, path):
354 self.stat = os.stat(path)
355
356 def cacheable(self):
357 return bool(self.stat.st_ino)
358
359 def __eq__(self, other):
360 try:
361 return self.stat == other.stat
362 except AttributeError:
363 return False
364
365 def __ne__(self, other):
366 return not self == other
367
352 def executablepath(): 368 def executablepath():
353 return None # available on Windows only 369 return None # available on Windows only