|
@@ -10,10 +10,8 @@ import time
|
|
|
from ..archive import Archive, TarfileObjectProcessors, ChunksProcessor
|
|
|
from ..compress import CompressionSpec
|
|
|
from ..constants import * # NOQA
|
|
|
-from ..helpers import Manifest
|
|
|
from ..helpers import HardLinkManager
|
|
|
from ..helpers import ProgressIndicatorPercent
|
|
|
-from ..helpers import get_tar_filter
|
|
|
from ..helpers import dash_open
|
|
|
from ..helpers import msgpack
|
|
|
from ..helpers import create_filter_process
|
|
@@ -24,6 +22,7 @@ from ..helpers import remove_surrogates
|
|
|
from ..helpers import timestamp
|
|
|
from ..helpers import basic_json_data, json_print
|
|
|
from ..helpers import log_multi
|
|
|
+from ..manifest import Manifest
|
|
|
|
|
|
from .common import with_repository, with_archive, Highlander, define_exclusion_group
|
|
|
from .common import build_matcher, build_filter
|
|
@@ -33,6 +32,24 @@ from ..logger import create_logger
|
|
|
logger = create_logger(__name__)
|
|
|
|
|
|
|
|
|
+def get_tar_filter(fname, decompress):
|
|
|
+ # Note that filter is None if fname is '-'.
|
|
|
+ if fname.endswith((".tar.gz", ".tgz")):
|
|
|
+ filter = "gzip -d" if decompress else "gzip"
|
|
|
+ elif fname.endswith((".tar.bz2", ".tbz")):
|
|
|
+ filter = "bzip2 -d" if decompress else "bzip2"
|
|
|
+ elif fname.endswith((".tar.xz", ".txz")):
|
|
|
+ filter = "xz -d" if decompress else "xz"
|
|
|
+ elif fname.endswith((".tar.lz4",)):
|
|
|
+ filter = "lz4 -d" if decompress else "lz4"
|
|
|
+ elif fname.endswith((".tar.zstd",)):
|
|
|
+ filter = "zstd -d" if decompress else "zstd"
|
|
|
+ else:
|
|
|
+ filter = None
|
|
|
+ logger.debug("Automatically determined tar filter: %s", filter)
|
|
|
+ return filter
|
|
|
+
|
|
|
+
|
|
|
class TarMixIn:
|
|
|
@with_repository(compatibility=(Manifest.Operation.READ,))
|
|
|
@with_archive
|