mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-09 23:10:24 +01:00
Speeds up checkout for 30K files from 6sec to 3.5sec Signed-off-by: Ruslan Kuprieiev <[email protected]>
33 lines
971 B
Python
33 lines
971 B
Python
import os
|
|
import stat
|
|
|
|
from dvc.system import System
|
|
from dvc.command.common.base import CmdBase
|
|
from dvc.logger import Logger
|
|
|
|
|
|
class CmdCheckout(CmdBase):
|
|
def run(self):
|
|
self.remove_untracked_hardlinks()
|
|
self.project.checkout()
|
|
return 0
|
|
|
|
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
|
|
|
|
Logger.info(u'Remove \'{}\''.format(file))
|
|
os.chmod(file, stat.S_IWRITE)
|
|
os.remove(file)
|
|
os.chmod(cache[inode], stat.S_IREAD)
|
|
|
|
dir = os.path.dirname(file)
|
|
if len(dir) != 0 and not os.listdir(dir):
|
|
Logger.info(u'Remove empty directory \'{}\''.format(dir))
|
|
os.removedirs(dir)
|
|
pass
|