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

Side by Side Diff: client/common_lib/base_packages.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 """ 1 """
2 This module defines the BasePackageManager Class which provides an 2 This module defines the BasePackageManager Class which provides an
3 implementation of the packaging system API providing methods to fetch, 3 implementation of the packaging system API providing methods to fetch,
4 upload and remove packages. Site specific extensions to any of these methods 4 upload and remove packages. Site specific extensions to any of these methods
5 should inherit this class. 5 should inherit this class.
6 """ 6 """
7 7
8 import re, os, sys, traceback, subprocess, shutil, time, traceback, urlparse 8 import re, os, sys, traceback, subprocess, shutil, time, traceback, urlparse
9 import fcntl, logging 9 import fcntl, logging
10 from autotest_lib.client.common_lib import error, utils, global_config 10 from autotest_lib.client.common_lib import error, utils, global_config
(...skipping 10 matching lines...) Expand all
21 ''' 21 '''
22 22
23 match = re.search('^ssh://(.*?)(/.*)$', repo) 23 match = re.search('^ssh://(.*?)(/.*)$', repo)
24 if match: 24 if match:
25 return match.groups() 25 return match.groups()
26 else: 26 else:
27 raise error.PackageUploadError( 27 raise error.PackageUploadError(
28 "Incorrect SSH path in global_config: %s" % repo) 28 "Incorrect SSH path in global_config: %s" % repo)
29 29
30 30
31 def repo_run_command(repo, cmd, ignore_status=False): 31 def repo_run_command(repo, cmd, ignore_status=False, cd=True):
32 """Run a command relative to the repos path""" 32 """Run a command relative to the repos path"""
33 repo = repo.strip() 33 repo = repo.strip()
34 run_cmd = None 34 run_cmd = None
35 cd_str = ''
35 if repo.startswith('ssh://'): 36 if repo.startswith('ssh://'):
36 username = None 37 username = None
37 hostline, remote_path = parse_ssh_path(repo) 38 hostline, remote_path = parse_ssh_path(repo)
39 if cd:
40 cd_str = 'cd %s && ' % remote_path
38 if '@' in hostline: 41 if '@' in hostline:
39 username, host = hostline.split('@') 42 username, host = hostline.split('@')
40 run_cmd = 'ssh %s@%s "cd %s && %s"' % (username, host, 43 run_cmd = 'ssh %s@%s "%s%s"' % (username, host, cd_str, cmd)
41 remote_path, cmd)
42 else: 44 else:
43 run_cmd = 'ssh %s "cd %s && %s"' % (host, remote_path, cmd) 45 run_cmd = 'ssh %s "%s%s"' % (host, cd_str, cmd)
44 46
45 else: 47 else:
46 run_cmd = "cd %s && %s" % (repo, cmd) 48 if cd:
49 cd_str = 'cd %s && ' % repo
50 run_cmd = "%s%s" % (cd_str, cmd)
47 51
48 if run_cmd: 52 if run_cmd:
49 return utils.run(run_cmd, ignore_status=ignore_status) 53 return utils.run(run_cmd, ignore_status=ignore_status)
50 54
51 55
56 def create_directory(repo):
57 _, remote_path = parse_ssh_path(repo)
58 repo_run_command(repo, 'mkdir -p %s' % remote_path, cd=False)
59
60
52 def check_diskspace(repo, min_free=None): 61 def check_diskspace(repo, min_free=None):
53 # Note: 1 GB = 10**9 bytes (SI unit). 62 # Note: 1 GB = 10**9 bytes (SI unit).
54 if not min_free: 63 if not min_free:
55 min_free = global_config.global_config.get_config_value('PACKAGES', 64 min_free = global_config.global_config.get_config_value('PACKAGES',
56 'minimum_free_space', 65 'minimum_free_space',
57 type=int) 66 type=int)
58 try: 67 try:
59 df = repo_run_command(repo, 68 df = repo_run_command(repo,
60 'df -PB %d . | tail -1' % 10**9).stdout.split() 69 'df -PB %d . | tail -1' % 10**9).stdout.split()
61 free_space_gb = int(df[3]) 70 free_space_gb = int(df[3])
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 274
266 def repo_check(self, repo): 275 def repo_check(self, repo):
267 ''' 276 '''
268 Check to make sure the repo is in a sane state: 277 Check to make sure the repo is in a sane state:
269 ensure we have at least XX amount of free space 278 ensure we have at least XX amount of free space
270 Make sure we can write to the repo 279 Make sure we can write to the repo
271 ''' 280 '''
272 if not repo.startswith('/') and not repo.startswith('ssh:'): 281 if not repo.startswith('/') and not repo.startswith('ssh:'):
273 return 282 return
274 try: 283 try:
284 # without comment out this, we lost the ability to package into
285 # local directories. -- ericli
286 # create_directory(repo)
275 check_diskspace(repo) 287 check_diskspace(repo)
276 check_write(repo) 288 check_write(repo)
277 except (error.RepoWriteError, error.RepoUnknownError, 289 except (error.RepoWriteError, error.RepoUnknownError,
278 error.RepoDiskFullError), e: 290 error.RepoDiskFullError), e:
279 raise error.RepoError("ERROR: Repo %s: %s" % (repo, e)) 291 raise error.RepoError("ERROR: Repo %s: %s" % (repo, e))
280 292
281 293
282 def upkeep(self, custom_repos=None): 294 def upkeep(self, custom_repos=None):
283 ''' 295 '''
284 Clean up custom upload/download areas 296 Clean up custom upload/download areas
(...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after
854 if not match: 866 if not match:
855 return ('', url) 867 return ('', url)
856 group, filename = match.groups() 868 group, filename = match.groups()
857 # Generate the group prefix. 869 # Generate the group prefix.
858 group = re.sub(r'\W', '_', group) 870 group = re.sub(r'\W', '_', group)
859 # Drop the extension to get the raw test name. 871 # Drop the extension to get the raw test name.
860 testname = re.sub(r'\.tar\.bz2', '', filename) 872 testname = re.sub(r'\.tar\.bz2', '', filename)
861 # Drop any random numbers at the end of the test name if any 873 # Drop any random numbers at the end of the test name if any
862 testname = re.sub(r'\.(\d*)', '', testname) 874 testname = re.sub(r'\.(\d*)', '', testname)
863 return (group, testname) 875 return (group, testname)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698