| 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 |