Fix extracting of several archives.
- Archive already existing must not stop download of other archives. - Use copytree instead of rename to use second archive as patch on existing directory. (No need to remove tmpdir, as it is a temporary directory)
This commit is contained in:
parent
941cbc8310
commit
04942020d7
|
@ -131,8 +131,17 @@ class ReleaseDownload(Source):
|
||||||
|
|
||||||
def _download(self, context):
|
def _download(self, context):
|
||||||
context.try_skip(neutralEnv("archive_dir"), self.full_name)
|
context.try_skip(neutralEnv("archive_dir"), self.full_name)
|
||||||
for archive in self.archives:
|
archive_iter = iter(self.archives)
|
||||||
neutralEnv("download")(archive)
|
archive = next(archive_iter, None)
|
||||||
|
while archive:
|
||||||
|
try:
|
||||||
|
neutralEnv("download")(archive)
|
||||||
|
except SkipCommand as e:
|
||||||
|
archive = next(archive_iter, None)
|
||||||
|
if not archive:
|
||||||
|
raise e
|
||||||
|
continue
|
||||||
|
archive = next(archive_iter, None)
|
||||||
|
|
||||||
def _extract(self, context):
|
def _extract(self, context):
|
||||||
context.try_skip(self.extract_path)
|
context.try_skip(self.extract_path)
|
||||||
|
|
|
@ -275,7 +275,19 @@ def extract_archive(archive_path, dest_dir, topdir=None, name=None):
|
||||||
perm = (member.external_attr >> 16) & 0x1FF
|
perm = (member.external_attr >> 16) & 0x1FF
|
||||||
os.chmod(pj(tmpdir, getname(member)), perm)
|
os.chmod(pj(tmpdir, getname(member)), perm)
|
||||||
name = name or topdir
|
name = name or topdir
|
||||||
os.rename(pj(tmpdir, topdir), pj(dest_dir, name))
|
shutil.copytree(
|
||||||
|
pj(tmpdir, topdir),
|
||||||
|
pj(dest_dir, name),
|
||||||
|
symlinks=True,
|
||||||
|
dirs_exist_ok=True,
|
||||||
|
)
|
||||||
|
# Be sure that all directory in tmpdir are writable to allow correct suppersion of it
|
||||||
|
for root, dirs, _files in os.walk(tmpdir):
|
||||||
|
for d in dirs:
|
||||||
|
os.chmod(
|
||||||
|
pj(root, d), stat.S_IWRITE | stat.S_IREAD | stat.S_IEXEC
|
||||||
|
)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
if name:
|
if name:
|
||||||
dest_dir = pj(dest_dir, name)
|
dest_dir = pj(dest_dir, name)
|
||||||
|
|
Loading…
Reference in New Issue