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

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

Issue 10071027: [Chromoting] Add target to build archive for remoting_me2me_host files. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 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 | remoting/remoting.gyp » ('j') | remoting/remoting.gyp » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Property Changes:
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
OLDNEW
(Empty)
1 #!/usr/bin/env python
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
4 # found in the LICENSE file.
5
6 """Create a zip archive for the Chrome Remote Desktop Host installer.
alexeypa (please no reviews) 2012/04/13 17:27:13 nit: Create -> Creates?
alexeypa (please no reviews) 2012/04/13 17:27:13 Add TODO about merging this script with the one th
garykac 2012/04/13 18:06:03 Done.
garykac 2012/04/13 18:06:03 Done.
7
8 This script builds a zip file that contains all the files needed to build an
9 installer for Chrome Remote Desktop Host.
10
11 This zip archive is then used by the signing bots to:
12 (1) Sign the binaries
13 (2) Build the final installer
14 """
15
16 import os
17 import shutil
18 import sys
19 import zipfile
20
21
22 def cleanDir(dir):
23 """Delete and recreate the dir to make sure it is clean.
alexeypa (please no reviews) 2012/04/13 17:27:13 nit: Deletes and recreates
garykac 2012/04/13 18:06:03 Done.
24
25 Args:
26 dir: The directory to clean.
27 """
28 try:
29 shutil.rmtree(dir)
30 except OSError:
31 if os.path.exists(dir):
32 raise
33 else:
34 pass
35 os.makedirs(dir, 0775)
36
37
38 def createZip(zip_path, directory):
39 """Creates a zipfile at zip_path for the given directory.
40
41 Args:
42 zip_path: Path to zip file to create.
43 directory: Directory with contents to archive.
44 """
45 zipfile_base = os.path.splitext(os.path.basename(zip_path))[0]
46 zip = zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED)
47 for (root, dirs, files) in os.walk(directory):
48 for f in files:
49 full_path = os.path.join(root, f)
50 rel_path = os.path.relpath(full_path, directory)
51 zip.write(full_path, os.path.join(zipfile_base, rel_path))
52 zip.close()
53
54
55 def copyFileIntoArchive(src_file, out_dir, files_root, dst_file):
56 """Copy the src_file into the out_dir, preserving the directory structure.
alexeypa (please no reviews) 2012/04/13 17:27:13 Copies :-)
garykac 2012/04/13 18:06:03 Done.
57
58 Args:
59 src_file: Full or relative path to source file to copy.
60 out_dir: Target directory where files are copied.
61 files_root: Path prefix which is stripped of dst_file before appending
62 it to the temp_dir.
63 dst_file: Relative path (and filename) where src_file should be copied.
64 """
65 root_len = len(files_root)
66 local_path = dst_file[root_len:]
67 full_dst_file = os.path.join(out_dir, local_path)
68 dst_dir = os.path.dirname(full_dst_file)
69 if not os.path.exists(dst_dir):
70 os.makedirs(dst_dir, 0775)
71 shutil.copy2(src_file, full_dst_file)
72
73
74 def buildHostArchive(temp_dir, zip_path, files_root, files, binaries_src,
75 binaries_dst):
76 """Build a zip archive with the files needed to build the installer.
alexeypa (please no reviews) 2012/04/13 17:27:13 Builds
garykac 2012/04/13 18:06:03 Done.
77
78 Args:
79 temp_dir: Temporary dir used to build up the contents for the archive.
80 zip_path: Full path to the zip file to create.
81 files_root: Path prefix to strip off |files| when adding to archive.
82 files: The array of files to add to archive. The path structure is
83 preserved (except for the |files_root| prefix).
84 binaries_src: Full path to binaries to add to archive.
85 binaries_dst: Relative path of where to add binary files in archive.
86 This array needs to parallel |binaries_src|.
87 """
88 cleanDir(temp_dir)
89
90 for file in files:
91 base_file = os.path.basename(file)
92 if base_file == '*':
93 # Copy entire directory tree.
94 for (root, dirs, files) in os.walk(os.path.dirname(file)):
95 for f in files:
96 full_path = os.path.join(root, f)
97 copyFileIntoArchive(full_path, temp_dir, files_root, full_path)
98 else:
99 copyFileIntoArchive(file, temp_dir, files_root, file)
100
101 for bs, bd in zip(binaries_src, binaries_dst):
102 copyFileIntoArchive(bs, temp_dir, '', bd)
103
104 createZip(zip_path, temp_dir)
105
106
107 def usage():
108 """Display basic usage information."""
109 print ('Usage:', sys.argv[0],
110 '<temp-dir> <zip-path> <files-root-dir>'
111 '--files <files...> '
112 '--binaries-src <src binary files...> '
alexeypa (please no reviews) 2012/04/13 17:27:13 nit: The way we map source files to their location
garykac 2012/04/13 18:06:03 We need a flat array of filenames for gyp dependen
113 '--binaries-dst <dst for binary files...>')
114
115
116 def main():
117 if len(sys.argv) < 5:
118 usage()
119 return 1
120
121 temp_dir = sys.argv[1]
122 zip_path = sys.argv[2]
123 files_root = sys.argv[3]
alexeypa (please no reviews) 2012/04/13 17:27:13 What if there are less arguments than required?
garykac 2012/04/13 18:06:03 Changed above check to ensure 3 or more args.
124
125 arg_mode = ''
126 files = []
127 binaries_src = []
128 binaries_dst = []
129 for arg in sys.argv[4:]:
130 if arg == '--files':
131 arg_mode = 'files'
132 elif arg == '--binaries-src':
133 arg_mode = 'bin-src'
134 elif arg == '--binaries-dst':
135 arg_mode = 'bin-dst'
136
137 elif arg_mode == 'files':
138 files.append(arg)
139 elif arg_mode == 'bin-src':
140 binaries_src.append(arg)
141 elif arg_mode == 'bin-dst':
142 binaries_dst.append(arg)
143 else:
144 usage()
145 return 1
146
147 # Ensure that files_root ends with a directory separator.
148 if files_root[-1:] != os.sep:
149 files_root += os.sep
150
151 # Verify that the 2 'binaries' arrays have the same number of elements.
152 if len(binaries_src) < len(binaries_dst):
153 print "ERROR: --binaries-src and --binaries-dst should be the same length"
154 return 1
155 while len(binaries_src) > len(binaries_dst):
156 binaries_dst.append('')
157
158 result = buildHostArchive(temp_dir, zip_path, files_root, files,
159 binaries_src, binaries_dst)
160
161 return 0
162
163 if __name__ == '__main__':
164 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | remoting/remoting.gyp » ('j') | remoting/remoting.gyp » ('J')

Powered by Google App Engine
This is Rietveld 408576698