summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/jsoncpp/devtools/tarball.py
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/jsoncpp/devtools/tarball.py')
-rw-r--r--3rdparty/jsoncpp/devtools/tarball.py47
1 files changed, 23 insertions, 24 deletions
diff --git a/3rdparty/jsoncpp/devtools/tarball.py b/3rdparty/jsoncpp/devtools/tarball.py
index ccbda394255..2e72717aba4 100644
--- a/3rdparty/jsoncpp/devtools/tarball.py
+++ b/3rdparty/jsoncpp/devtools/tarball.py
@@ -1,5 +1,10 @@
-import os.path
-import gzip
+# Copyright 2010 Baptiste Lepilleur
+# Distributed under MIT license, or public domain if desired and
+# recognized in your jurisdiction.
+# See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+from contextlib import closing
+import os
import tarfile
TARGZ_DEFAULT_COMPRESSION_LEVEL = 9
@@ -13,41 +18,35 @@ def make_tarball(tarball_path, sources, base_dir, prefix_dir=''):
prefix_dir: all files stored in the tarball be sub-directory of prefix_dir. Set to ''
to make them child of root.
"""
- base_dir = os.path.normpath( os.path.abspath( base_dir ) )
- def archive_name( path ):
+ base_dir = os.path.normpath(os.path.abspath(base_dir))
+ def archive_name(path):
"""Makes path relative to base_dir."""
- path = os.path.normpath( os.path.abspath( path ) )
- common_path = os.path.commonprefix( (base_dir, path) )
+ path = os.path.normpath(os.path.abspath(path))
+ common_path = os.path.commonprefix((base_dir, path))
archive_name = path[len(common_path):]
- if os.path.isabs( archive_name ):
+ if os.path.isabs(archive_name):
archive_name = archive_name[1:]
- return os.path.join( prefix_dir, archive_name )
+ return os.path.join(prefix_dir, archive_name)
def visit(tar, dirname, names):
for name in names:
path = os.path.join(dirname, name)
if os.path.isfile(path):
path_in_tar = archive_name(path)
- tar.add(path, path_in_tar )
+ tar.add(path, path_in_tar)
compression = TARGZ_DEFAULT_COMPRESSION_LEVEL
- tar = tarfile.TarFile.gzopen( tarball_path, 'w', compresslevel=compression )
- try:
+ with closing(tarfile.TarFile.open(tarball_path, 'w:gz',
+ compresslevel=compression)) as tar:
for source in sources:
source_path = source
- if os.path.isdir( source ):
- os.path.walk(source_path, visit, tar)
+ if os.path.isdir(source):
+ for dirpath, dirnames, filenames in os.walk(source_path):
+ visit(tar, dirpath, filenames)
else:
path_in_tar = archive_name(source_path)
- tar.add(source_path, path_in_tar ) # filename, arcname
- finally:
- tar.close()
+ tar.add(source_path, path_in_tar) # filename, arcname
-def decompress( tarball_path, base_dir ):
+def decompress(tarball_path, base_dir):
"""Decompress the gzipped tarball into directory base_dir.
"""
- # !!! This class method is not documented in the online doc
- # nor is bz2open!
- tar = tarfile.TarFile.gzopen(tarball_path, mode='r')
- try:
- tar.extractall( base_dir )
- finally:
- tar.close()
+ with closing(tarfile.TarFile.open(tarball_path)) as tar:
+ tar.extractall(base_dir)