Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: site_scons/site_tools/seven_zip.py

Issue 6740010: Make the 7zip tool more flexible in handling different versions of 7zip. (Closed) Base URL: http://swtoolkit.googlecode.com/svn/trunk/
Patch Set: Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python2.4 1 #!/usr/bin/python2.4
2 # Copyright 2009, Google Inc. 2 # Copyright 2009, Google Inc.
3 # All rights reserved. 3 # All rights reserved.
4 # 4 #
5 # Redistribution and use in source and binary forms, with or without 5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions are 6 # modification, are permitted provided that the following conditions are
7 # met: 7 # met:
8 # 8 #
9 # * Redistributions of source code must retain the above copyright 9 # * Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer. 10 # notice, this list of conditions and the following disclaimer.
(...skipping 15 matching lines...) Expand all
26 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 30
31 31
32 """SCons tool for 7zip.""" 32 """SCons tool for 7zip."""
33 33
34 34
35 import os 35 import os
36 import re
36 import shutil 37 import shutil
37 import subprocess 38 import subprocess
38 import tempfile 39 import tempfile
39 import SCons.Script 40 import SCons.Script
40 41
41 42
42 def SevenZipGetFiles(env, source): 43 def SevenZipGetFiles(env, source):
43 """SCons emitter for 7zip extract. 44 """SCons emitter for 7zip extract.
44 45
45 Examines the source 7z archive to determine the list of files which will be 46 Examines the source 7z archive to determine the list of files which will be
46 created by extract/unzip operation. 47 created by extract/unzip operation.
47 Args: 48 Args:
48 env: The SCons environment to get the 7zip command line from. 49 env: The SCons environment to get the 7zip command line from.
49 source: The 7zip archive to examine. 50 source: The 7zip archive to examine.
50 Returns: 51 Returns:
51 The list of filenames in the archive. 52 The list of filenames in the archive.
52 """ 53 """
53 # Expand the command to list archive contents. 54 # Expand the command to list archive contents.
54 cmd = env.subst('$SEVEN_ZIP l "%s"' % source) 55 cmd = env.subst('$SEVEN_ZIP l "%s"' % source)
55 # Run it and capture output. 56 # Run it and capture output.
56 output = subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()[0] 57 output = subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()[0]
57 # Strip off 7-line header and 3-line trailer from 7zip output. 58 # Remove header + footer.
58 lines = output.split('\r\n')[7:-3] 59 m = re.match('.*[-]{8}[^\n]*\n(.*)\r\n[-]{8}.*', output, re.DOTALL)
59 # Trim out just the files and their names. 60 lines = m.group(1).split('\r\n')
61 # Trim out just the files and their names (skip directories).
60 files = [i[53:] for i in lines if i[20] != 'D'] 62 files = [i[53:] for i in lines if i[20] != 'D']
61 return files 63 return files
62 64
63 65
64 def SevenZipEmitter(target, source, env): 66 def SevenZipEmitter(target, source, env):
65 """An emitter that decides what nodes are vented from a 7zip archive. 67 """An emitter that decides what nodes are vented from a 7zip archive.
66 68
67 Args: 69 Args:
68 target: The target directory node. 70 target: The target directory node.
69 source: The source archive node. 71 source: The source archive node.
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 b = SCons.Script.Builder( 138 b = SCons.Script.Builder(
137 action=('cd $SOURCE && ' 139 action=('cd $SOURCE && '
138 '$SEVEN_ZIP a $SEVEN_ZIP_ARCHIVE_OPTIONS ${TARGET.abspath} ./')) 140 '$SEVEN_ZIP a $SEVEN_ZIP_ARCHIVE_OPTIONS ${TARGET.abspath} ./'))
139 env['BUILDERS']['Archive7zip'] = b 141 env['BUILDERS']['Archive7zip'] = b
140 142
141 b = SCons.Script.Builder( 143 b = SCons.Script.Builder(
142 action=('cd ${SOURCE.dir} && ' 144 action=('cd ${SOURCE.dir} && '
143 '$SEVEN_ZIP a $SEVEN_ZIP_COMPRESS_OPTIONS ' 145 '$SEVEN_ZIP a $SEVEN_ZIP_COMPRESS_OPTIONS '
144 '${TARGET.abspath} ${SOURCE.file}')) 146 '${TARGET.abspath} ${SOURCE.file}'))
145 env['BUILDERS']['Compress7zip'] = b 147 env['BUILDERS']['Compress7zip'] = b
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698