From 13e0e9d2e415b626d0f2fb3e0121d814a9b800c9 Mon Sep 17 00:00:00 2001 From: Ruslan Kuprieiev Date: Thu, 22 Mar 2018 13:26:45 +0200 Subject: [PATCH] dvc: use getdirinfo from ntfsutils We can now use getdirinfo directly, since our patch https://github.com/sid0/ntfs/pull/10 is now merged and released in ntfsutils 0.1.4. Signed-off-by: Ruslan Kuprieiev --- dvc/system.py | 20 +++----------------- requirements.txt | 2 +- setup.py | 2 +- 3 files changed, 5 insertions(+), 19 deletions(-) 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",