diff options
Diffstat (limited to 'feed/sse_tar.py')
-rwxr-xr-x | feed/sse_tar.py | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/feed/sse_tar.py b/feed/sse_tar.py index 8a1a492..d6dcc2b 100755 --- a/feed/sse_tar.py +++ b/feed/sse_tar.py @@ -8,11 +8,19 @@ from sse_defs import * import tarfile, zipfile, sys, os, time, zlib from md5 import new as message_digest -def uncompress_tar(archive, root, package_id, meta = {}): +tar_suffixes = [ ".tar.gz", ".tar.bz2", ".tgz", ".tbz2", ".tar" ] + +def uncompress_tar(archive, root, package_id, meta = {}, fo = None, descend = True, subarchive = None): + global n_depth + n = 0 - f = tarfile.open(archive, "r") - print "Processing TAR file %s." % archive + if fo is None: + f = tarfile.open(archive, "r") + print "Processing TAR file %s." % archive + else: + f = tarfile.open(subarchive, "r", fo) + print "Processing subarchive TAR file %s." % subarchive while True: @@ -24,15 +32,32 @@ def uncompress_tar(archive, root, package_id, meta = {}): if not i.isreg(): continue - if not sse_feed.supported_source(i.name): - continue - - dst = os.path.join(root, i.name) + if subarchive is None: + dst = os.path.join(root, i.name) + else: + dst = os.path.join(root, subarchive, i.name) if os.access(dst, os.F_OK): print "WARNING: File '%s' already extracted." % dst continue + if descend: + for t in tar_suffixes: + if i.name.lower().endswith(t): + print "Found subarchive '%s', descending recursively..." % i.name + + try: + os.makedirs(dst) + except: + pass + + n += uncompress_tar(archive, root, package_id, meta, f.extractfile(i), False, i.name) + print "Subarchive ended, continuing with top level archive..." + continue + + if not sse_feed.supported_source(i.name): + continue + try: os.makedirs(os.path.dirname(dst)) except: |