aboutsummaryrefslogtreecommitdiffstats
path: root/setuptools/archive_util.py
diff options
context:
space:
mode:
authorPJ Eby <distutils-sig@python.org>2005-12-06 03:12:48 +0000
committerPJ Eby <distutils-sig@python.org>2005-12-06 03:12:48 +0000
commit45885095198f5ec1d7e80791a73c7385f2620b38 (patch)
treeeb7e7a1494ffc117e495c53543483ed415aaf279 /setuptools/archive_util.py
parentc8e2cdfc8d142f311d65d0a6de112a0bcad93b13 (diff)
downloadexternal_python_setuptools-45885095198f5ec1d7e80791a73c7385f2620b38.tar.gz
external_python_setuptools-45885095198f5ec1d7e80791a73c7385f2620b38.tar.bz2
external_python_setuptools-45885095198f5ec1d7e80791a73c7385f2620b38.zip
Added an ``unpack_directory()`` driver to ``setuptools.archive_util``, so
that you can process a directory tree through a processing filter as if it were a zipfile or tarfile. --HG-- branch : setuptools extra : convert_revision : svn%3A6015fed2-1504-0410-9fe1-9d1591cc4771/sandbox/trunk/setuptools%4041617
Diffstat (limited to 'setuptools/archive_util.py')
-rwxr-xr-xsetuptools/archive_util.py47
1 files changed, 44 insertions, 3 deletions
diff --git a/setuptools/archive_util.py b/setuptools/archive_util.py
index d24c6c13..4cc80b60 100755
--- a/setuptools/archive_util.py
+++ b/setuptools/archive_util.py
@@ -3,10 +3,10 @@
__all__ = [
"unpack_archive", "unpack_zipfile", "unpack_tarfile", "default_filter",
- "UnrecognizedFormat", "extraction_drivers"
+ "UnrecognizedFormat", "extraction_drivers", "unpack_directory",
]
-import zipfile, tarfile, os
+import zipfile, tarfile, os, shutil
from pkg_resources import ensure_directory
from distutils.errors import DistutilsError
@@ -80,6 +80,47 @@ def unpack_archive(filename, extract_dir, progress_filter=default_filter,
+def unpack_directory(filename, extract_dir, progress_filter=default_filter):
+ """"Unpack" a directory, using the same interface as for archives
+
+ Raises ``UnrecognizedFormat`` if `filename` is not a directory
+ """
+ if not os.path.isdir(filename):
+ raise UnrecognizedFormat("%s is not a directory" % (filename,))
+
+ paths = {filename:('',extract_dir)}
+ for base, dirs, files in os.walk(filename):
+ src,dst = paths[base]
+ for d in dirs:
+ paths[os.path.join(base,d)] = src+d+'/', os.path.join(dst,d)
+ for f in files:
+ name = src+f
+ target = os.path.join(dst,f)
+ target = progress_filter(src+f, target)
+ if not target:
+ continue # skip non-files
+ ensure_directory(target)
+ shutil.copyfile(os.path.join(base,f), target)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
def unpack_zipfile(filename, extract_dir, progress_filter=default_filter):
"""Unpack zip `filename` to `extract_dir`
@@ -156,7 +197,7 @@ def unpack_tarfile(filename, extract_dir, progress_filter=default_filter):
-extraction_drivers = unpack_zipfile, unpack_tarfile
+extraction_drivers = unpack_directory, unpack_zipfile, unpack_tarfile