Bug 1502531: [mozharness] Move abs_upload_dir code to openh264_build script; r=Callek

That variable, and the function that references it is only used by the openh264
code, so move it there.

Differential Revision: https://phabricator.services.mozilla.com/D9967

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Tom Prince 2018-10-29 13:32:10 +00:00
parent 8626b0ef89
commit a8d5331c0b
3 changed files with 79 additions and 73 deletions

View File

@ -2137,7 +2137,6 @@ class BaseScript(ScriptMixin, LogMixin, object):
dirs = {}
dirs['base_work_dir'] = c['base_work_dir']
dirs['abs_work_dir'] = os.path.join(c['base_work_dir'], c['work_dir'])
dirs['abs_upload_dir'] = os.path.join(dirs['abs_work_dir'], 'upload')
dirs['abs_log_dir'] = os.path.join(c['base_work_dir'], c.get('log_dir', 'logs'))
self.abs_dirs = dirs
return self.abs_dirs
@ -2220,75 +2219,6 @@ class BaseScript(ScriptMixin, LogMixin, object):
self.add_summary(message % (success_count, total_count),
level=level)
def copy_to_upload_dir(self, target, dest=None, short_desc="unknown",
long_desc="unknown", log_level=DEBUG,
error_level=ERROR, max_backups=None,
compress=False, upload_dir=None):
"""Copy target file to upload_dir/dest.
Potentially update a manifest in the future if we go that route.
Currently only copies a single file; would be nice to allow for
recursive copying; that would probably done by creating a helper
_copy_file_to_upload_dir().
short_desc and long_desc are placeholders for if/when we add
upload_dir manifests.
"""
dest_filename_given = dest is not None
if upload_dir is None:
upload_dir = self.query_abs_dirs()['abs_upload_dir']
if dest is None:
dest = os.path.basename(target)
if dest.endswith('/'):
dest_file = os.path.basename(target)
dest_dir = os.path.join(upload_dir, dest)
dest_filename_given = False
else:
dest_file = os.path.basename(dest)
dest_dir = os.path.join(upload_dir, os.path.dirname(dest))
if compress and not dest_filename_given:
dest_file += ".gz"
dest = os.path.join(dest_dir, dest_file)
if not os.path.exists(target):
self.log("%s doesn't exist!" % target, level=error_level)
return None
self.mkdir_p(dest_dir)
if os.path.exists(dest):
if os.path.isdir(dest):
self.log("%s exists and is a directory!" % dest, level=error_level)
return -1
if max_backups:
# Probably a better way to do this
oldest_backup = 0
backup_regex = re.compile("^%s\.(\d+)$" % dest_file)
for filename in os.listdir(dest_dir):
r = backup_regex.match(filename)
if r and int(r.groups()[0]) > oldest_backup:
oldest_backup = int(r.groups()[0])
for backup_num in range(oldest_backup, 0, -1):
# TODO more error checking?
if backup_num >= max_backups:
self.rmtree(os.path.join(dest_dir, "%s.%d" % (dest_file, backup_num)),
log_level=log_level)
else:
self.move(os.path.join(dest_dir, "%s.%d" % (dest_file, backup_num)),
os.path.join(dest_dir, "%s.%d" % (dest_file, backup_num + 1)),
log_level=log_level)
if self.move(dest, "%s.1" % dest, log_level=log_level):
self.log("Unable to move %s!" % dest, level=error_level)
return -1
else:
if self.rmtree(dest, log_level=log_level):
self.log("Unable to remove %s!" % dest, level=error_level)
return -1
self.copyfile(target, dest, log_level=log_level, compress=compress)
if os.path.exists(dest):
return dest
else:
self.log("%s doesn't exist after copy!" % dest, level=error_level)
return None
def get_hash_for_file(self, file_path, hash_type="sha512"):
bs = 65536
hasher = hashlib.new(hash_type)

View File

@ -15,7 +15,7 @@ sys.path.insert(1, os.path.dirname(sys.path[0]))
# import the guts
import mozharness
from mozharness.base.vcs.vcsbase import VCSScript
from mozharness.base.log import ERROR
from mozharness.base.log import ERROR, DEBUG
from mozharness.base.transfer import TransferMixin
from mozharness.mozilla.tooltool import TooltoolMixin
@ -110,6 +110,14 @@ class OpenH264Build(TransferMixin, VCSScript, TooltoolMixin):
default_actions=default_actions,
)
def query_abs_dirs(self):
if self.abs_dirs:
return self.abs_dirs
dirs = super(OpenH264Build, self).query_abs_dirs()
dirs['abs_upload_dir'] = os.path.join(dirs['abs_work_dir'], 'upload')
self.abs_dirs = dirs
return self.abs_dirs
def get_tooltool(self):
c = self.config
if not c.get('tooltool_manifest_file'):
@ -315,6 +323,75 @@ class OpenH264Build(TransferMixin, VCSScript, TooltoolMixin):
if retval != 0:
self.fatal("test failures")
def copy_to_upload_dir(self, target, dest=None, short_desc="unknown",
long_desc="unknown", log_level=DEBUG,
error_level=ERROR, max_backups=None,
compress=False, upload_dir=None):
"""Copy target file to upload_dir/dest.
Potentially update a manifest in the future if we go that route.
Currently only copies a single file; would be nice to allow for
recursive copying; that would probably done by creating a helper
_copy_file_to_upload_dir().
short_desc and long_desc are placeholders for if/when we add
upload_dir manifests.
"""
dest_filename_given = dest is not None
if upload_dir is None:
upload_dir = self.query_abs_dirs()['abs_upload_dir']
if dest is None:
dest = os.path.basename(target)
if dest.endswith('/'):
dest_file = os.path.basename(target)
dest_dir = os.path.join(upload_dir, dest)
dest_filename_given = False
else:
dest_file = os.path.basename(dest)
dest_dir = os.path.join(upload_dir, os.path.dirname(dest))
if compress and not dest_filename_given:
dest_file += ".gz"
dest = os.path.join(dest_dir, dest_file)
if not os.path.exists(target):
self.log("%s doesn't exist!" % target, level=error_level)
return None
self.mkdir_p(dest_dir)
if os.path.exists(dest):
if os.path.isdir(dest):
self.log("%s exists and is a directory!" % dest, level=error_level)
return -1
if max_backups:
# Probably a better way to do this
oldest_backup = 0
backup_regex = re.compile("^%s\.(\d+)$" % dest_file)
for filename in os.listdir(dest_dir):
r = backup_regex.match(filename)
if r and int(r.groups()[0]) > oldest_backup:
oldest_backup = int(r.groups()[0])
for backup_num in range(oldest_backup, 0, -1):
# TODO more error checking?
if backup_num >= max_backups:
self.rmtree(os.path.join(dest_dir, "%s.%d" % (dest_file, backup_num)),
log_level=log_level)
else:
self.move(os.path.join(dest_dir, "%s.%d" % (dest_file, backup_num)),
os.path.join(dest_dir, "%s.%d" % (dest_file, backup_num + 1)),
log_level=log_level)
if self.move(dest, "%s.1" % dest, log_level=log_level):
self.log("Unable to move %s!" % dest, level=error_level)
return -1
else:
if self.rmtree(dest, log_level=log_level):
self.log("Unable to remove %s!" % dest, level=error_level)
return -1
self.copyfile(target, dest, log_level=log_level, compress=compress)
if os.path.exists(dest):
return dest
else:
self.log("%s doesn't exist after copy!" % dest, level=error_level)
return None
# main {{{1
if __name__ == '__main__':

View File

@ -28,8 +28,7 @@ class LocalesTest(locales.LocalesMixin, script.BaseScript):
self.log_obj = None
class TestLocalesMixin(unittest.TestCase):
BASE_ABS_DIRS = ['abs_log_dir',
'abs_upload_dir', 'abs_work_dir', 'base_work_dir']
BASE_ABS_DIRS = ['abs_log_dir', 'abs_work_dir', 'base_work_dir']
def setUp(self):
cleanup()