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

Side by Side Diff: remoting/host/installer/build-installer-archive.py

Issue 10221027: [Chromoting] Update installer archive to check file extensions in one location. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 7 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/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Creates a zip archive for the Chrome Remote Desktop Host installer. 6 """Creates a zip archive for the Chrome Remote Desktop Host installer.
7 7
8 This script builds a zip file that contains all the files needed to build an 8 This script builds a zip file that contains all the files needed to build an
9 installer for Chrome Remote Desktop Host. 9 installer for Chrome Remote Desktop Host.
10 10
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 zipfile_base = os.path.splitext(os.path.basename(zip_path))[0] 64 zipfile_base = os.path.splitext(os.path.basename(zip_path))[0]
65 zip = zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) 65 zip = zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED)
66 for (root, dirs, files) in os.walk(directory): 66 for (root, dirs, files) in os.walk(directory):
67 for f in files: 67 for f in files:
68 full_path = os.path.join(root, f) 68 full_path = os.path.join(root, f)
69 rel_path = os.path.relpath(full_path, directory) 69 rel_path = os.path.relpath(full_path, directory)
70 zip.write(full_path, os.path.join(zipfile_base, rel_path)) 70 zip.write(full_path, os.path.join(zipfile_base, rel_path))
71 zip.close() 71 zip.close()
72 72
73 73
74 def copyFileIntoArchive(src_file, out_dir, files_root, dst_file, defs): 74 def remapSrcFile(dst_root, src_root, src_file):
75 """Copies the src_file into the out_dir, preserving the directory structure. 75 """Calculates destination file path and creates directory.
76
77 The |src_root| prefix is stripped from |src_file| before
78 appending to |dst_root|.
79
80 For example, given:
81 dst_root = /output
82 src_root = host/installer/mac
83 src_file = host/installer/mac/Scripts/keystone_install.sh
84 The final calculated path is:
85 /output/Scripts/keystone_install.sh
76 86
77 Args: 87 Args:
78 src_file: Full or relative path to source file to copy. 88 dst_root: Target directory where files are copied.
79 out_dir: Target directory where files are copied. 89 src_root: Path prefix which is stripped of |src_file| before appending
80 files_root: Path prefix which is stripped of dst_file before appending 90 it to the |dst_root|.
81 it to the out_dir. 91 src_file: Source file to be copied.
82 dst_file: Relative path (and filename) where src_file should be copied. 92 Returns:
83 defs: Dictionary of variable definitions. 93 Full path to destination file in |dst_root|.
84 """ 94 """
85 root_len = len(files_root) 95 # Strip of directory prefix.
86 local_file_path = dst_file[root_len:] 96 if src_file.startswith(src_root):
87 full_dst_file = os.path.join(out_dir, local_file_path) 97 src_file = src_file[len(src_root):]
88 dst_dir = os.path.dirname(full_dst_file) 98 dst_file = os.path.join(dst_root, src_file)
99 # Make sure target directory exists.
100 dst_dir = os.path.dirname(dst_file)
89 if not os.path.exists(dst_dir): 101 if not os.path.exists(dst_dir):
90 os.makedirs(dst_dir, 0775) 102 os.makedirs(dst_dir, 0775)
91 103 return dst_file
92 (base, ext) = os.path.splitext(src_file)
93 if ext == '.app':
94 shutil.copytree(src_file, full_dst_file)
95 elif ext in ['.sh', '.packproj', '.plist']:
96 copyFileWithDefs(src_file, full_dst_file, defs)
97 else:
98 shutil.copy2(src_file, full_dst_file)
99 104
100 105
101 def copyFileWithDefs(src_file, dst_file, defs): 106 def copyFileWithDefs(src_file, dst_file, defs):
102 """Copies from src_file to dst_file, performing variable substitution. 107 """Copies from src_file to dst_file, performing variable substitution.
103 108
104 Any @@variables@@ in the source are replaced with 109 Any @@VARIABLE@@ in the source is replaced with the value of VARIABLE
105 file with the out_dir, preserving the directory structure. 110 in the |defs| dictionary when written to the destination file.
106 111
107 Args: 112 Args:
108 src_file: Full or relative path to source file to copy. 113 src_file: Full or relative path to source file to copy.
109 dst_file: Relative path (and filename) where src_file should be copied. 114 dst_file: Relative path (and filename) where src_file should be copied.
110 defs: Dictionary of variable definitions. 115 defs: Dictionary of variable definitions.
111 """ 116 """
112 data = open(src_file, 'r').read() 117 data = open(src_file, 'r').read()
113 for key, val in defs.iteritems(): 118 for key, val in defs.iteritems():
114 try: 119 try:
115 data = data.replace('@@' + key + '@@', val) 120 data = data.replace('@@' + key + '@@', val)
(...skipping 15 matching lines...) Expand all
131 base_zip_name = os.path.basename(zip_file) 136 base_zip_name = os.path.basename(zip_file)
132 137
133 # We don't use the 'zipfile' module here because it doesn't restore all the 138 # We don't use the 'zipfile' module here because it doesn't restore all the
134 # file permissions correctly. We use the 'unzip' command manually. 139 # file permissions correctly. We use the 'unzip' command manually.
135 old_dir = os.getcwd(); 140 old_dir = os.getcwd();
136 os.chdir(os.path.dirname(zip_file)) 141 os.chdir(os.path.dirname(zip_file))
137 subprocess.call(['unzip', '-qq', '-o', base_zip_name]) 142 subprocess.call(['unzip', '-qq', '-o', base_zip_name])
138 os.chdir(old_dir) 143 os.chdir(old_dir)
139 144
140 # Unzip into correct dir in out_dir. 145 # Unzip into correct dir in out_dir.
141 root_len = len(files_root) 146 out_zip_path = remapSrcFile(out_dir, files_root, zip_file)
142 relative_zip_path = zip_file[root_len:]
143 out_zip_path = os.path.join(out_dir, relative_zip_path)
144 out_zip_dir = os.path.dirname(out_zip_path) 147 out_zip_dir = os.path.dirname(out_zip_path)
145 148
146 (src_dir, ignore1) = os.path.splitext(zip_file) 149 (src_dir, ignore1) = os.path.splitext(zip_file)
147 (base_dir_name, ignore2) = os.path.splitext(base_zip_name) 150 (base_dir_name, ignore2) = os.path.splitext(base_zip_name)
148 shutil.copytree(src_dir, os.path.join(out_zip_dir, base_dir_name)) 151 shutil.copytree(src_dir, os.path.join(out_zip_dir, base_dir_name))
149 152
150 153
151 def buildHostArchive(temp_dir, zip_path, source_files_root, source_files, 154 def buildHostArchive(temp_dir, zip_path, source_files_root, source_files,
152 gen_files, gen_files_dst, defs): 155 gen_files, gen_files_dst, defs):
153 """Builds a zip archive with the files needed to build the installer. 156 """Builds a zip archive with the files needed to build the installer.
154 157
155 Args: 158 Args:
156 temp_dir: Temporary dir used to build up the contents for the archive. 159 temp_dir: Temporary dir used to build up the contents for the archive.
157 zip_path: Full path to the zip file to create. 160 zip_path: Full path to the zip file to create.
158 source_files_root: Path prefix to strip off |files| when adding to archive. 161 source_files_root: Path prefix to strip off |files| when adding to archive.
159 source_files: The array of files to add to archive. The path structure is 162 source_files: The array of files to add to archive. The path structure is
160 preserved (except for the |files_root| prefix). 163 preserved (except for the |files_root| prefix).
161 gen_files: Full path to binaries to add to archive. 164 gen_files: Full path to binaries to add to archive.
162 gen_files_dst: Relative path of where to add binary files in archive. 165 gen_files_dst: Relative path of where to add binary files in archive.
163 This array needs to parallel |binaries_src|. 166 This array needs to parallel |binaries_src|.
164 defs: Dictionary of variable definitions. 167 defs: Dictionary of variable definitions.
165 """ 168 """
166 cleanDir(temp_dir) 169 cleanDir(temp_dir)
167 170
168 for file in source_files: 171 for f in source_files:
169 base_file = os.path.basename(file) 172 dst_file = remapSrcFile(temp_dir, source_files_root, f)
170 (base, ext) = os.path.splitext(file) 173 base_file = os.path.basename(f)
174 (base, ext) = os.path.splitext(f)
171 if ext == '.zip': 175 if ext == '.zip':
172 copyZipIntoArchive(temp_dir, source_files_root, file) 176 copyZipIntoArchive(temp_dir, source_files_root, f)
177 elif ext in ['.sh', '.packproj', '.plist']:
178 copyFileWithDefs(f, dst_file, defs)
173 else: 179 else:
174 copyFileIntoArchive(file, temp_dir, source_files_root, file, defs) 180 shutil.copy2(src_file, dst_file)
175 181
176 for bs, bd in zip(gen_files, gen_files_dst): 182 for bs, bd in zip(gen_files, gen_files_dst):
177 copyFileIntoArchive(bs, temp_dir, '', bd, {}) 183 dst_file = remapSrcFile(temp_dir, source_files_root, bd)
184 if os.path.isdir(bs):
185 shutil.copytree(bs, dst_file)
186 else:
187 shutil.copy2(bs, dst_file)
178 188
179 createZip(zip_path, temp_dir) 189 createZip(zip_path, temp_dir)
180 190
181 191
182 def error(msg): 192 def error(msg):
183 sys.stderr.write('ERROR: %s' % msg) 193 sys.stderr.write('ERROR: %s' % msg)
184 sys.exit(1) 194 sys.exit(1)
185 195
196
186 def usage(): 197 def usage():
187 """Display basic usage information.""" 198 """Display basic usage information."""
188 print ('Usage: %s\n' 199 print ('Usage: %s\n'
189 ' <temp-dir> <zip-path> <files-root-dir>\n' 200 ' <temp-dir> <zip-path> <files-root-dir>\n'
190 ' --source-files <list of source files...>\n' 201 ' --source-files <list of source files...>\n'
191 ' --generated-files <list of generated target files...>\n' 202 ' --generated-files <list of generated target files...>\n'
192 ' --generated-files-dst <dst for each generated file...>\n' 203 ' --generated-files-dst <dst for each generated file...>\n'
193 ' --defs <list of VARIABLE=value definitions...>' 204 ' --defs <list of VARIABLE=value definitions...>'
194 ) % sys.argv[0] 205 ) % sys.argv[0]
195 206
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 257
247 result = buildHostArchive(temp_dir, zip_path, source_files_root, 258 result = buildHostArchive(temp_dir, zip_path, source_files_root,
248 source_files, generated_files, generated_files_dst, 259 source_files, generated_files, generated_files_dst,
249 defs) 260 defs)
250 261
251 return 0 262 return 0
252 263
253 264
254 if __name__ == '__main__': 265 if __name__ == '__main__':
255 sys.exit(main()) 266 sys.exit(main())
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