remove a costy is_dir-check on obvious directories to speed up a pull

This commit is contained in:
Tobias Küchel 2019-11-26 00:43:00 +01:00 committed by Evgeny Ezhov
parent 6415617852
commit 6b90e1d16c

View file

@ -691,6 +691,7 @@ class Client(object):
urn = Urn(remote_directory, directory=True) urn = Urn(remote_directory, directory=True)
## here we check for the current directory
if not self.is_dir(urn.path()): if not self.is_dir(urn.path()):
raise OptionNotValid(name="remote_path", value=remote_directory) raise OptionNotValid(name="remote_path", value=remote_directory)
@ -699,6 +700,7 @@ class Client(object):
local_resource_names = listdir(local_directory) local_resource_names = listdir(local_directory)
## here we get all files and directories in the current directory
paths = self.list(urn.path()) paths = self.list(urn.path())
expression = "{begin}{end}".format(begin="^", end=remote_directory) expression = "{begin}{end}".format(begin="^", end=remote_directory)
remote_resource_names = prune(paths, expression) remote_resource_names = prune(paths, expression)
@ -711,9 +713,12 @@ class Client(object):
remote_urn = Urn(remote_path) remote_urn = Urn(remote_path)
if self.is_dir(remote_urn.path()): ## if the string ends with an "/" it *must* be a directory
## no need to check it here
if remote_urn.path().endswith("/"):
if not os.path.exists(local_path): if not os.path.exists(local_path):
os.mkdir(local_path) os.mkdir(local_path)
## nevertheless, since we pull the directory, it will be checked up there
self.pull(remote_directory=remote_path, local_directory=local_path) self.pull(remote_directory=remote_path, local_directory=local_path)
else: else:
if remote_resource_name in local_resource_names: if remote_resource_name in local_resource_names: