Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: releaseAutomation.py

Issue 5193970430771200: Issue 1363 - Make sure source code archives created by release automation consider the new dependen… (Closed)
Patch Set: Addressed remaining comment Created Sept. 18, 2014, 7:23 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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])
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld