summaryrefslogtreecommitdiffstats
path: root/feed/sse_tar.py
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2005-11-26 18:51:19 +0000
committerLennart Poettering <lennart@poettering.net>2005-11-26 18:51:19 +0000
commitb25ed52fcfd3cb9c81ae4ddf924b35adb6149e89 (patch)
tree1f455323a285774257f8ad9157af86ce016fc4ec /feed/sse_tar.py
parent122016ccea9857c0099edbd3bd78b73d30304e34 (diff)
deal with debian source files containing subarchives
git-svn-id: file:///home/lennart/svn/public/sse/trunk@71 5fbabb74-0606-0410-a5e4-b5cc6a42724e
Diffstat (limited to 'feed/sse_tar.py')
-rwxr-xr-xfeed/sse_tar.py39
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: