From dce19356511b8a90b260c067e1a31dec06745617 Mon Sep 17 00:00:00 2001 From: Ruslan Kuprieiev Date: Sat, 10 Mar 2018 12:49:59 +0200 Subject: [PATCH] checkout: optimize lost hardlink search Speeds up checkout for 30K files from 6sec to 3.5sec Signed-off-by: Ruslan Kuprieiev --- dvc/command/checkout.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/dvc/command/checkout.py b/dvc/command/checkout.py index 690e341a1..cab8201ef 100644 --- a/dvc/command/checkout.py +++ b/dvc/command/checkout.py @@ -1,6 +1,7 @@ import os import stat +from dvc.system import System from dvc.command.common.base import CmdBase from dvc.logger import Logger @@ -13,12 +14,16 @@ class CmdCheckout(CmdBase): def remove_untracked_hardlinks(self): untracked = self.project.scm.untracked_files() + cache = dict((System.inode(c), c) for c in self.project.cache.all()) + for file in untracked: + inode = System.inode(file) + if inode not in cache.keys(): + continue - for file, md5 in self.project.cache.find_cache(untracked).items(): Logger.info(u'Remove \'{}\''.format(file)) os.chmod(file, stat.S_IWRITE) os.remove(file) - os.chmod(self.project.cache.get(md5), stat.S_IREAD) + os.chmod(cache[inode], stat.S_IREAD) dir = os.path.dirname(file) if len(dir) != 0 and not os.listdir(dir):