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

Side by Side Diff: utils/packager.py

Issue 6883035: Merge remote branch 'autotest-upstream/master' into autotest-merge (Closed) Base URL: ssh://gitrw.chromium.org:9222/autotest.git@master
Patch Set: patch 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
OLDNEW
1 #!/usr/bin/python -u 1 #!/usr/bin/python -u
2 2
3 """ 3 """
4 Utility to upload or remove the packages from the packages repository. 4 Utility to upload or remove the packages from the packages repository.
5 """ 5 """
6 6
7 import logging, os, sys, optparse, socket, tempfile, shutil 7 import logging, os, sys, optparse, socket, tempfile, shutil
8 import common 8 import common
9 from autotest_lib.client.common_lib import utils as client_utils 9 from autotest_lib.client.common_lib import utils as client_utils
10 from autotest_lib.client.common_lib import global_config, error 10 from autotest_lib.client.common_lib import global_config, error
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 parser.add_option("--all", help="Upload all the files locally " 64 parser.add_option("--all", help="Upload all the files locally "
65 "to all the repos specified in global_config.ini. " 65 "to all the repos specified in global_config.ini. "
66 "(includes the client, tests, deps and profilers)", 66 "(includes the client, tests, deps and profilers)",
67 dest="all", action="store_true", default=False) 67 dest="all", action="store_true", default=False)
68 68
69 options, args = parser.parse_args() 69 options, args = parser.parse_args()
70 return options, args 70 return options, args
71 71
72 72
73 # Method to upload or remove package depending on the flag passed to it. 73 # Method to upload or remove package depending on the flag passed to it.
74 def process_packages(pkgmgr, pkg_type, pkg_names, src_dir, repo_url, 74 def process_packages(pkgmgr, pkg_type, pkg_names, src_dir,
75 remove=False): 75 remove=False):
76 exclude_string = ' .' 76 exclude_string = ' .'
77 names = [p.strip() for p in pkg_names.split(',')] 77 names = [p.strip() for p in pkg_names.split(',')]
78 for name in names: 78 for name in names:
79 print "Processing %s ... " % name 79 print "Processing %s ... " % name
80 if pkg_type=='client': 80 if pkg_type=='client':
81 pkg_dir = src_dir 81 pkg_dir = src_dir
82 exclude_string = get_exclude_string(pkg_dir) 82 exclude_string = get_exclude_string(pkg_dir)
83 elif pkg_type=='test': 83 elif pkg_type=='test':
84 # if the package is a test then look whether it is in client/tests 84 # if the package is a test then look whether it is in client/tests
85 # or client/site_tests 85 # or client/site_tests
86 pkg_dir = os.path.join(get_test_dir(name, src_dir), name) 86 pkg_dir = os.path.join(get_test_dir(name, src_dir), name)
87 else: 87 else:
88 # for the profilers and deps 88 # for the profilers and deps
89 pkg_dir = os.path.join(src_dir, name) 89 pkg_dir = os.path.join(src_dir, name)
90 90
91 pkg_name = pkgmgr.get_tarball_name(name, pkg_type) 91 pkg_name = pkgmgr.get_tarball_name(name, pkg_type)
92 if not remove: 92 if not remove:
93 # Tar the source and upload 93 # Tar the source and upload
94 temp_dir = tempfile.mkdtemp() 94 temp_dir = tempfile.mkdtemp()
95 try: 95 try:
96 try: 96 try:
97 base_packages.check_diskspace(temp_dir) 97 base_packages.check_diskspace(temp_dir)
98 except error.RepoDiskFullError, e: 98 except error.RepoDiskFullError, e:
99 msg = ("Temporary directory for packages %s does not have " 99 msg = ("Temporary directory for packages %s does not have "
100 "enough space available: %s" % (temp_dir, e)) 100 "enough space available: %s" % (temp_dir, e))
101 raise error.RepoDiskFullError(msg) 101 raise error.RepoDiskFullError(msg)
102 tarball_path = pkgmgr.tar_package(pkg_name, pkg_dir, 102 tarball_path = pkgmgr.tar_package(pkg_name, pkg_dir,
103 temp_dir, exclude_string) 103 temp_dir, exclude_string)
104 pkgmgr.upload_pkg(tarball_path, repo_url, update_checksum=True) 104 pkgmgr.upload_pkg(tarball_path, update_checksum=True)
105 finally: 105 finally:
106 # remove the temporary directory 106 # remove the temporary directory
107 shutil.rmtree(temp_dir) 107 shutil.rmtree(temp_dir)
108 else: 108 else:
109 pkgmgr.remove_pkg(pkg_name, repo_url, remove_checksum=True) 109 pkgmgr.remove_pkg(pkg_name, remove_checksum=True)
110 print "Done." 110 print "Done."
111 111
112 112
113 def tar_packages(pkgmgr, pkg_type, pkg_names, src_dir, temp_dir): 113 def tar_packages(pkgmgr, pkg_type, pkg_names, src_dir, temp_dir):
114 """Tar all packages up and return a list of each tar created""" 114 """Tar all packages up and return a list of each tar created"""
115 tarballs = [] 115 tarballs = []
116 exclude_string = ' .' 116 exclude_string = ' .'
117 names = [p.strip() for p in pkg_names.split(',')] 117 names = [p.strip() for p in pkg_names.split(',')]
118 for name in names: 118 for name in names:
119 print "Processing %s ... " % name 119 print "Processing %s ... " % name
(...skipping 10 matching lines...) Expand all
130 130
131 pkg_name = pkgmgr.get_tarball_name(name, pkg_type) 131 pkg_name = pkgmgr.get_tarball_name(name, pkg_type)
132 tarball_path = pkgmgr.tar_package(pkg_name, pkg_dir, 132 tarball_path = pkgmgr.tar_package(pkg_name, pkg_dir,
133 temp_dir, exclude_string) 133 temp_dir, exclude_string)
134 134
135 tarballs.append(tarball_path) 135 tarballs.append(tarball_path)
136 136
137 return tarballs 137 return tarballs
138 138
139 139
140 def process_all_packages(pkgmgr, client_dir, upload_paths, remove=False): 140 def process_all_packages(pkgmgr, client_dir, remove=False):
141 """Process a full upload of packages as a directory upload.""" 141 """Process a full upload of packages as a directory upload."""
142 test_dir = os.path.join(client_dir, "tests") 142 test_dir = os.path.join(client_dir, "tests")
143 site_test_dir = os.path.join(client_dir, "site_tests") 143 site_test_dir = os.path.join(client_dir, "site_tests")
144 dep_dir = os.path.join(client_dir, "deps") 144 dep_dir = os.path.join(client_dir, "deps")
145 prof_dir = os.path.join(client_dir, "profilers") 145 prof_dir = os.path.join(client_dir, "profilers")
146 # Directory where all are kept 146 # Directory where all are kept
147 temp_dir = tempfile.mkdtemp() 147 temp_dir = tempfile.mkdtemp()
148 try: 148 try:
149 base_packages.check_diskspace(temp_dir) 149 base_packages.check_diskspace(temp_dir)
150 except error.RepoDiskFullError, e: 150 except error.RepoDiskFullError, e:
(...skipping 22 matching lines...) Expand all
173 if not remove: 173 if not remove:
174 tar_packages(pkgmgr, 'profiler', profilers, prof_dir, temp_dir) 174 tar_packages(pkgmgr, 'profiler', profilers, prof_dir, temp_dir)
175 tar_packages(pkgmgr, 'dep', deps, dep_dir, temp_dir) 175 tar_packages(pkgmgr, 'dep', deps, dep_dir, temp_dir)
176 tar_packages(pkgmgr, 'test', site_tests, client_dir, temp_dir) 176 tar_packages(pkgmgr, 'test', site_tests, client_dir, temp_dir)
177 tar_packages(pkgmgr, 'test', tests, client_dir, temp_dir) 177 tar_packages(pkgmgr, 'test', tests, client_dir, temp_dir)
178 tar_packages(pkgmgr, 'client', 'autotest', client_dir, temp_dir) 178 tar_packages(pkgmgr, 'client', 'autotest', client_dir, temp_dir)
179 cwd = os.getcwd() 179 cwd = os.getcwd()
180 os.chdir(temp_dir) 180 os.chdir(temp_dir)
181 client_utils.system('md5sum * > packages.checksum') 181 client_utils.system('md5sum * > packages.checksum')
182 os.chdir(cwd) 182 os.chdir(cwd)
183 for path in upload_paths: 183 pkgmgr.upload_pkg(temp_dir)
184 print "Uploading to: " + path
185 pkgmgr.upload_pkg(temp_dir, path)
186 client_utils.run('rm -rf ' + temp_dir) 184 client_utils.run('rm -rf ' + temp_dir)
187 else: 185 else:
188 for repo_url in upload_paths: 186 process_packages(pkgmgr, 'test', tests, client_dir,remove=remove)
189 process_packages(pkgmgr, 'test', tests, client_dir, repo_url, 187 process_packages(pkgmgr, 'test', site_tests, client_dir, remove=remove)
190 remove=remove) 188 process_packages(pkgmgr, 'client', 'autotest', client_dir,
191 process_packages(pkgmgr, 'test', site_tests, client_dir, repo_url, 189 remove=remove)
192 remove=remove) 190 process_packages(pkgmgr, 'dep', deps, dep_dir, remove=remove)
193 process_packages(pkgmgr, 'client', 'autotest', client_dir, repo_url, 191 process_packages(pkgmgr, 'profiler', profilers, prof_dir,
194 remove=remove) 192 remove=remove)
195 process_packages(pkgmgr, 'dep', deps, dep_dir, repo_url,
196 remove=remove)
197 process_packages(pkgmgr, 'profiler', profilers, prof_dir, repo_url,
198 remove=remove)
199 193
200 194
201 # Get the list of sub directories present in a directory 195 # Get the list of sub directories present in a directory
202 def get_subdir_list(name, client_dir): 196 def get_subdir_list(name, client_dir):
203 dir_name = os.path.join(client_dir, name) 197 dir_name = os.path.join(client_dir, name)
204 return [f for f in 198 return [f for f in
205 os.listdir(dir_name) 199 os.listdir(dir_name)
206 if os.path.isdir(os.path.join(dir_name, f)) ] 200 if os.path.isdir(os.path.join(dir_name, f)) ]
207 201
208 202
(...skipping 20 matching lines...) Expand all
229 223
230 # extract the pkg locations from global config 224 # extract the pkg locations from global config
231 repo_urls = c.get_config_value('PACKAGES', 'fetch_location', 225 repo_urls = c.get_config_value('PACKAGES', 'fetch_location',
232 type=list, default=[]) 226 type=list, default=[])
233 upload_paths = c.get_config_value('PACKAGES', 'upload_location', 227 upload_paths = c.get_config_value('PACKAGES', 'upload_location',
234 type=list, default=[]) 228 type=list, default=[])
235 # Having no upload paths basically means you're not using packaging. 229 # Having no upload paths basically means you're not using packaging.
236 if len(upload_paths) == 0: 230 if len(upload_paths) == 0:
237 return 231 return
238 232
239 pkgmgr = packages.PackageManager(autotest_dir, repo_urls=repo_urls,
240 upload_paths=upload_paths,
241 run_function_dargs={'timeout':600})
242
243 client_dir = os.path.join(autotest_dir, "client") 233 client_dir = os.path.join(autotest_dir, "client")
244 234
245 # Bail out if the client directory does not exist 235 # Bail out if the client directory does not exist
246 if not os.path.exists(client_dir): 236 if not os.path.exists(client_dir):
247 sys.exit(0) 237 sys.exit(0)
248 238
249 dep_dir = os.path.join(client_dir, "deps") 239 dep_dir = os.path.join(client_dir, "deps")
250 prof_dir = os.path.join(client_dir, "profilers") 240 prof_dir = os.path.join(client_dir, "profilers")
251 241
252 if len(args)==0 or args[0] not in ['upload','remove']: 242 if len(args)==0 or args[0] not in ['upload','remove']:
253 print("Either 'upload' or 'remove' needs to be specified " 243 print("Either 'upload' or 'remove' needs to be specified "
254 "for the package") 244 "for the package")
255 sys.exit(0) 245 sys.exit(0)
256 246
257 if args[0]=='upload': 247 if args[0]=='upload':
258 remove_flag=False 248 remove_flag=False
259 elif args[0]=='remove': 249 elif args[0]=='remove':
260 remove_flag=True 250 remove_flag=True
261 else: 251 else:
262 # we should not be getting here 252 # we should not be getting here
263 assert(False) 253 assert(False)
264 254
255 if options.repo:
256 upload_path_list = [options.repo]
257 else:
258 upload_path_list = upload_paths
259
260 pkgmgr = packages.PackageManager(autotest_dir, repo_urls=repo_urls,
261 upload_paths=upload_path_list,
262 run_function_dargs={'timeout':600})
263
265 if options.all: 264 if options.all:
266 if options.repo: 265 process_all_packages(pkgmgr, client_dir, remove=remove_flag)
267 upload_path_list = [options.repo]
268 else:
269 upload_path_list = upload_paths
270 process_all_packages(pkgmgr, client_dir, upload_path_list,
271 remove=remove_flag)
272 266
273 if options.client: 267 if options.client:
274 process_packages(pkgmgr, 'client', 'autotest', client_dir, 268 process_packages(pkgmgr, 'client', 'autotest', client_dir,
275 options.repo, remove=remove_flag) 269 remove=remove_flag)
276 270
277 if options.dep: 271 if options.dep:
278 process_packages(pkgmgr, 'dep', options.dep, dep_dir, 272 process_packages(pkgmgr, 'dep', options.dep, dep_dir,
279 options.repo, remove=remove_flag) 273 remove=remove_flag)
280 274
281 if options.test: 275 if options.test:
282 process_packages(pkgmgr, 'test', options.test, client_dir, 276 process_packages(pkgmgr, 'test', options.test, client_dir,
283 options.repo, remove=remove_flag) 277 remove=remove_flag)
284 278
285 if options.prof: 279 if options.prof:
286 process_packages(pkgmgr, 'profiler', options.prof, prof_dir, 280 process_packages(pkgmgr, 'profiler', options.prof, prof_dir,
287 options.repo, remove=remove_flag) 281 remove=remove_flag)
288 282
289 if options.file: 283 if options.file:
290 if remove_flag: 284 if remove_flag:
291 pkgmgr.remove_pkg(options.file, options.repo, remove_checksum=True) 285 pkgmgr.remove_pkg(options.file, remove_checksum=True)
292 else: 286 else:
293 pkgmgr.upload_pkg(options.file, options.repo, update_checksum=True) 287 pkgmgr.upload_pkg(options.file, update_checksum=True)
294 288
295 289
296 if __name__ == "__main__": 290 if __name__ == "__main__":
297 main() 291 main()
OLDNEW
« client/profilers/perf/perf.py ('K') | « tko/parsers/version_1_unittest.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698