| Index: releaseAutomation.py |
| =================================================================== |
| --- a/releaseAutomation.py |
| +++ b/releaseAutomation.py |
| @@ -1,16 +1,46 @@ |
| # coding: utf-8 |
| # This Source Code Form is subject to the terms of the Mozilla Public |
| # License, v. 2.0. If a copy of the MPL was not distributed with this |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| import os, re, codecs, subprocess, tarfile, json |
| -from StringIO import StringIO |
| + |
| +def get_dependencies(prefix, repos): |
| + from ensure_dependencies import read_deps, safe_join |
| + repo = repos[prefix] |
| + deps = read_deps(repo) |
| + if deps: |
| + for subpath in deps: |
| + if subpath.startswith('_'): |
| + continue |
| + depprefix = prefix + subpath + '/' |
| + deppath = safe_join(repo, subpath) |
| + repos[depprefix] = deppath |
| + get_dependencies(depprefix, repos) |
| + |
| +def create_sourcearchive(repo, output): |
| + with tarfile.open(output, mode='w:gz') as archive: |
| + repos = {'': repo} |
| + get_dependencies('', repos) |
| + for prefix, path in repos.iteritems(): |
| + process = subprocess.Popen(['hg', 'archive', '-R', path, '-t', 'tar', '-S', '-'], stdout=subprocess.PIPE) |
| + try: |
| + with tarfile.open(fileobj=process.stdout, mode='r|') as repoarchive: |
| + for fileinfo in repoarchive: |
| + if os.path.basename(fileinfo.name) in ('.hgtags', '.hgignore'): |
| + continue |
| + filedata = repoarchive.extractfile(fileinfo) |
| + fileinfo.name = re.sub(r'^[^/]+/', prefix, fileinfo.name) |
| + archive.addfile(fileinfo, filedata) |
| + finally: |
| + process.stdout.close() |
| + process.wait() |
| def run(baseDir, type, version, keyFiles, downloadsRepo): |
| if type == "gecko": |
| import buildtools.packagerGecko as packager |
| elif type == "chrome": |
| import buildtools.packagerChrome as packager |
| # Replace version number in metadata file "manually", ConfigParser will mess |
| @@ -69,30 +99,17 @@ def run(baseDir, type, version, keyFiles |
| import buildtools.packagerSafari as packagerSafari |
| metadataSafari = packagerSafari.readMetadata(baseDir, "safari") |
| buildPathSafari = os.path.join(downloadsRepo, packagerSafari.getDefaultFileName(baseDir, metadataSafari, version, 'safariextz')) |
| packagerSafari.createBuild(baseDir, type="safari", outFile=buildPathSafari, releaseBuild=True, keyFile=keyFiles[1]) |
| downloads.append(buildPathSafari) |
| # Create source archive |
| archivePath = os.path.splitext(buildPath)[0] + '-source.tgz' |
| - |
| - archiveHandle = open(archivePath, 'wb') |
| - archive = tarfile.open(fileobj=archiveHandle, name=os.path.basename(archivePath), mode='w:gz') |
| - data = subprocess.check_output(['hg', 'archive', '-R', baseDir, '-t', 'tar', '-S', '-']) |
| - repoArchive = tarfile.open(fileobj=StringIO(data), mode='r:') |
| - for fileInfo in repoArchive: |
| - if os.path.basename(fileInfo.name) in ('.hgtags', '.hgignore'): |
| - continue |
| - fileData = repoArchive.extractfile(fileInfo) |
| - fileInfo.name = re.sub(r'^[^/]+/', '', fileInfo.name) |
| - archive.addfile(fileInfo, fileData) |
| - repoArchive.close() |
| - archive.close() |
| - archiveHandle.close() |
| + create_sourcearchive(baseDir, archivePath) |
| downloads.append(archivePath) |
| # Now add the downloads and commit |
| subprocess.check_call(['hg', 'add', '-R', downloadsRepo] + downloads) |
| subprocess.check_call(['hg', 'commit', '-R', downloadsRepo, '-m', 'Releasing %s %s' % (extensionName, version)]) |
| # Push all changes |
| subprocess.check_call(['hg', 'push', '-R', baseDir]) |