OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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() |
OLD | NEW |