From 64e35aedcb64674a3a1e45e5f4322a19e7528982 Mon Sep 17 00:00:00 2001 From: Mathieu Comandon Date: Mon, 24 Oct 2016 18:12:38 -0700 Subject: [PATCH] Dispatch extraction methods with 7zip support --- lutris/util/extract.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/lutris/util/extract.py b/lutris/util/extract.py index 1332d4a88..93f8643ff 100644 --- a/lutris/util/extract.py +++ b/lutris/util/extract.py @@ -28,7 +28,9 @@ def is_7zip_supported(path, extractor): def extract_archive(path, to_directory='.', merge_single=True, extractor=None): path = os.path.abspath(path) + mode = None logger.debug("Extracting %s to %s", path, to_directory) + if(path.endswith('.tar.gz') or path.endswith('.tgz') or extractor == 'tgz'): opener, mode = tarfile.open, 'r:gz' @@ -39,7 +41,7 @@ def extract_archive(path, to_directory='.', merge_single=True, extractor=None): or extractor == 'bz2'): opener, mode = tarfile.open, 'r:bz2' elif(is_7zip_supported(path, extractor)): - opener = extract_7zip + opener = '7zip' else: raise RuntimeError( "Could not extract `%s` as no appropriate extractor is found" @@ -47,9 +49,7 @@ def extract_archive(path, to_directory='.', merge_single=True, extractor=None): ) temp_name = ".extract-" + str(uuid.uuid4())[:8] temp_path = temp_dir = os.path.join(to_directory, temp_name) - handler = opener(path, mode) - handler.extractall(temp_path) - handler.close() + _do_extract(path, temp_path, opener, mode) if merge_single: extracted = os.listdir(temp_path) if len(extracted) == 1: @@ -81,6 +81,15 @@ def extract_archive(path, to_directory='.', merge_single=True, extractor=None): return (path, to_directory) +def _do_extract(archive, dest, opener, mode=None): + if opener == '7zip': + extract_7zip(archive, dest) + else: + handler = opener(archive, mode) + handler.extractall(dest) + handler.close() + + def decompress_gz(file_path, dest_path=None): """Decompress a gzip file.""" if dest_path: