diff --git a/dvc/system.py b/dvc/system.py index 7ad86f541..7a00dfa31 100644 --- a/dvc/system.py +++ b/dvc/system.py @@ -6,7 +6,7 @@ from builtins import str if os.name == 'nt': import ntfsutils.hardlink as winlink - from ntfsutils.fs import * + from ntfsutils.fs import getdirinfo class System(object): @@ -24,27 +24,13 @@ class System(object): return winlink.create(source, link_name) - @staticmethod - def _getfileinfo(path): - # FIXME: current implementation from ntfsutils doesn't support dirs, - # and until https://github.com/sid0/ntfs/pull/10 is not merged and - # pip package not updated, we have to use our own version. - hfile = CreateFile(path, GENERIC_READ, FILE_SHARE_READ, None, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, None) - if hfile is None: - raise WinError() - info = BY_HANDLE_FILE_INFORMATION() - rv = GetFileInformationByHandle(hfile, info) - CloseHandle(hfile) - if rv == 0: - raise WinError() - return info - @staticmethod def inode(path): if System.is_unix(): return os.stat(path).st_ino - info = System._getfileinfo(path) + # getdirinfo from ntfsutils works on both files and dirs + info = getdirinfo(path) return hash((info.dwVolumeSerialNumber, info.nFileIndexHigh, info.nFileIndexLow)) @staticmethod diff --git a/requirements.txt b/requirements.txt index 3ac6c3e0b..a74e6217a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,7 +10,7 @@ configobj>=5.0.6 networkx>=1.11 pyyaml>=3.12 gitpython>=2.1.8 -ntfsutils>=0.1.3 +ntfsutils>=0.1.4 checksumdir>=1.1.4 setuptools>=34.0.0 nanotime>=0.5.2 diff --git a/setup.py b/setup.py index bd5433af4..6331ddcf8 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ install_requires = [ "networkx>=1.11", "pyyaml>=3.12", "gitpython>=2.1.8", - "ntfsutils>=0.1.3", + "ntfsutils>=0.1.4", "checksumdir>=1.1.4", "setuptools>=34.0.0", "nanotime>=0.5.2",