Commit 301ab114 authored by Thomas Lotze's avatar Thomas Lotze

in the download module, fixed the handling of directories that are pointed to...

in the download module, fixed the handling of directories that are pointed to by file-system paths and URLs
parent 7edd3c0c
[buildout] [buildout]
extends = http://svn.zope.org/repos/main/zopetoolkit/branches/1.0/ztk.cfg
develop = zc.recipe.egg_ . develop = zc.recipe.egg_ .
parts = test oltest py parts = test oltest py
[versions]
zc.buildout =
[py] [py]
recipe = zc.recipe.egg recipe = zc.recipe.egg
eggs = zc.buildout eggs = zc.buildout
......
...@@ -118,7 +118,7 @@ class Download(object): ...@@ -118,7 +118,7 @@ class Download(object):
cached_path = os.path.join(cache_dir, cache_key) cached_path = os.path.join(cache_dir, cache_key)
self.logger.debug('Searching cache at %s' % cache_dir) self.logger.debug('Searching cache at %s' % cache_dir)
if os.path.isfile(cached_path): if os.path.exists(cached_path):
is_temp = False is_temp = False
if self.fallback: if self.fallback:
try: try:
...@@ -244,8 +244,11 @@ def locate_at(source, dest): ...@@ -244,8 +244,11 @@ def locate_at(source, dest):
if dest is None or realpath(dest) == realpath(source): if dest is None or realpath(dest) == realpath(source):
return source return source
try: if os.path.isdir(source):
os.link(source, dest) shutil.copytree(source, dest)
except (AttributeError, OSError): else:
shutil.copyfile(source, dest) try:
os.link(source, dest)
except (AttributeError, OSError):
shutil.copyfile(source, dest)
return dest return dest
...@@ -537,6 +537,25 @@ conversions: ...@@ -537,6 +537,25 @@ conversions:
>>> path, is_temp = Download()(server_url+'foo.txt', md5(text).hexdigest()) >>> path, is_temp = Download()(server_url+'foo.txt', md5(text).hexdigest())
>>> remove(path) >>> remove(path)
When "downloading" a directory given by file-system path or ``file:`` URL and
using a download cache at the same time, the cached directory wasn't handled
correctly. Consequently, the cache was defeated and an attempt to cache the
directory a second time broke. This is how it should work:
>>> download = Download(cache=cache)
>>> dirpath = join(server_data, 'some_directory')
>>> mkdir(dirpath)
>>> dest, _ = download(dirpath)
If we now modify the source tree, the second download will produce the
original one from the cache:
>>> mkdir(join(dirpath, 'foo'))
>>> ls(dirpath)
d foo
>>> dest, _ = download(dirpath)
>>> ls(dest)
Clean up Clean up
-------- --------
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment