tools/unpack.py
changeset 34 d20b10eba317
parent 33 371c8e56136d
child 35 9c84697348fb
--- a/tools/unpack.py	Thu Sep 02 11:08:43 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-#!/usr/bin/python2.6
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-# Copyright (c) 2010, Oracle and/or it's affiliates.  All rights reserved.
-#
-#
-# unpack.py - an archive unpack utility
-#
-#  A simple program to uncompress and unpack source archive files into a target
-#  directory and fix permissions if requested.
-#
-
-import os
-import sys
-
-def uncompress_unpack_commands(filename, verbose=False):
-	import re
-
-	uncompress = "/bin/cat"
-
-	if (re.search("(\.bz2|\.tbz|\.tbz2)$", filename) != None):
-		uncompress = "/usr/bin/bzip2 -dc"
-	elif (re.search("(\.gz|\.tgz)$", filename) != None):
-		uncompress = "/usr/bin/gzip -dc"
-	elif (re.search("(\.Z)$", filename) != None):
-		uncompress = "/usr/bin/uncompress -c"
-	elif (re.search("(\.7z)$", filename) != None):
-		uncompress = "/usr/bin/7z --s"
-	elif (re.search("(\.zip)$", filename) != None):
-		uncompress = "/usr/bin/unzip -qo"
-
-	unpack = " | gtar -xf -"
-
-	if (re.search("(\.zip)$", filename) != None):
-		unpack = ""
-	elif (re.search("(\.jar)$", filename) != None):
-		unpack = " | jar xf -"
-
-	if (verbose == True):
-		print "command: %s %s %s" % (uncompress, filename, unpack)
-
-	return uncompress, unpack
-
-#
-# recurse down a directory tree opening permissions so that others may access
-# files in the tree.
-#
-def fixup_permissions(dir, verbose):
-	for entry in os.listdir(dir):
-		import stat
-
-		path = "%s/%s" % (dir, entry)
-
-		st = os.lstat(path)
-		mode = stat.S_IMODE(st.st_mode)
-		mode |= (stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)
-		if stat.S_ISDIR(st.st_mode):
-			mode |= (stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH)
-
-		if (stat.S_IMODE(st.st_mode) != mode):
-			if (verbose == True):
-				print "Changing %s from %4.4o to %4.4o" % (path,
-						stat.S_IMODE(st.st_mode), mode)
-			os.chmod(path, mode)
-
-		if stat.S_ISDIR(st.st_mode):
-			fixup_permissions(path, verbose)
-
-
-def usage():
-	print "Usage: %s [-v|--verbose] [-f|--fix-permissions] [-r|--relocate-to (dir)] (file)" % (sys.argv[0].split('/')[-1])
-	sys.exit(1)
-
-def main():
-	import getopt
-	import sys
-	import tempfile
-
-	verbose = False
-	permissions = None
-	relocate_to = None
-
-	try:
-		opts, args = getopt.getopt(sys.argv[1:], "fr:v",
-			["fix-permissions", "relocate-to=", "verbose"])
-	except getopt.GetoptError, err:
-		print str(err)
-		usage()
-
-	for opt, arg in opts:
-		if opt in [ "-v", "--verbose" ]:
-			verbose = True
-		elif opt in [ "-f", "--fix-permissions" ]:
-			permissions = True
-		elif opt in [ "-r", "--relocate-to" ]:
-			relocate_to = arg
-		else:
-			assert False, "unknown option"
-
-	filename = ((args[0] == '/') and "%s" or "../%s") % args[0]
-	uncompress, unpack = uncompress_unpack_commands(filename)
-	tempdir = tempfile.mkdtemp(dir='.')
-
-	# extract the archive contents
-	if (verbose == True):	
-		print "cd %s ; %s %s%s" % (tempdir, uncompress, filename,
-						unpack)
-	os.system("cd %s ; %s %s%s" % (tempdir, uncompress, filename, unpack))
-
-	# open up the permissions on what we extracted
-	if permissions:
-		fixup_permissions(tempdir, verbose)
-
-	if (relocate_to == None):
-		# move everything in the tempdir here
-		for entry in os.listdir(tempdir):
-			path= "%s/%s" % (tempdir, entry)
-			os.renames(path, entry)
-	else:
-		# rename the tempdir and open it's permissions
-		os.renames(tempdir, relocate_to)
-		os.chmod(relocate_to, 0755)
-
-
-if __name__ == "__main__":
-	main()