| Index: sitescripts/extensions/bin/createNightlies.py | 
| =================================================================== | 
| --- a/sitescripts/extensions/bin/createNightlies.py | 
| +++ b/sitescripts/extensions/bin/createNightlies.py | 
| @@ -59,43 +59,42 @@ class NightlyBuild(object): | 
| def hasChanges(self): | 
| return self.revision != self.previousRevision | 
| def getCurrentRevision(self): | 
| """ | 
| retrieves the current revision number from the repository | 
| """ | 
| command = ['hg', 'log', '-R', self.config.repository, '-r', 'default', '--template', '{rev}'] | 
| - (result, dummy) = subprocess.Popen(command, stdout=subprocess.PIPE).communicate() | 
| - return result | 
| + return subprocess.check_output(command) | 
| def getChanges(self): | 
| """ | 
| retrieve changes between the current and previous ("first") revision | 
| """ | 
| command = ['hg', 'log', '-R', self.config.repository, '-r', 'tip:0', | 
| '-b', 'default', '-l', '50', | 
| '--template', '{date|isodate}\\0{author|person}\\0{rev}\\0{desc}\\0\\0'] | 
| - (result, dummy) = subprocess.Popen(command, stdout=subprocess.PIPE).communicate() | 
| + result = subprocess.check_output(command) | 
| for change in result.split('\0\0'): | 
| if change: | 
| date, author, revision, description = change.split('\0') | 
| yield {'date': date, 'author': author, 'revision': revision, 'description': description} | 
| def copyRepository(self): | 
| ''' | 
| Create a repository copy in a temporary directory | 
| ''' | 
| # We cannot use hg archive here due to | 
| # http://bz.selenic.com/show_bug.cgi?id=3747, have to clone properly :-( | 
| self.tempdir = tempfile.mkdtemp(prefix=self.config.repositoryName) | 
| command = ['hg', 'clone', '-q', self.config.repository, '-u', 'default', self.tempdir] | 
| - subprocess.Popen(command).communicate() | 
| + subprocess.check_call(command) | 
| def writeChangelog(self, changes): | 
| """ | 
| write the changelog file into the cloned repository | 
| """ | 
| baseDir = os.path.join(self.config.nightliesDirectory, self.basename) | 
| if not os.path.exists(baseDir): | 
| os.makedirs(baseDir) | 
| @@ -257,30 +256,30 @@ class NightlyBuild(object): | 
| if not os.path.exists(baseDir): | 
| os.makedirs(baseDir) | 
| outputFile = "%s-%s%s" % (self.basename, self.version, self.config.packageSuffix) | 
| outputPath = os.path.join(baseDir, outputFile) | 
| self.updateURL = urlparse.urljoin(self.config.nightliesURL, self.basename + '/' + outputFile + '?update') | 
| if self.config.type == 'android': | 
| apkFile = open(outputPath, 'wb') | 
| + | 
| try: | 
| - port = get_config().get('extensions', 'androidBuildPort') | 
| - except ConfigParser.NoOptionError: | 
| - port = '22' | 
| - buildCommand = ['ssh', '-p', port, get_config().get('extensions', 'androidBuildHost')] | 
| - buildCommand += map(pipes.quote, ['/home/android/bin/makedebugbuild.py', '--revision', self.revision, '--version', self.version, '--stdout']) | 
| - process = subprocess.Popen(buildCommand, stdout=apkFile, stderr=None) | 
| - status = process.wait() | 
| - apkFile.close() | 
| - if status: | 
| + try: | 
| + port = get_config().get('extensions', 'androidBuildPort') | 
| + except ConfigParser.NoOptionError: | 
| + port = '22' | 
| + buildCommand = ['ssh', '-p', port, get_config().get('extensions', 'androidBuildHost')] | 
| + buildCommand += map(pipes.quote, ['/home/android/bin/makedebugbuild.py', '--revision', self.revision, '--version', self.version, '--stdout']) | 
| + subprocess.check_call(buildCommand, stdout=apkFile, close_fds=True) | 
| + except: | 
| # clear broken output if any | 
| - # exception will be raised later | 
| if os.path.exists(outputPath): | 
| os.remove(outputPath) | 
| + raise | 
| elif self.config.type == 'chrome' or self.config.type == 'opera': | 
| import buildtools.packagerChrome as packager | 
| packager.createBuild(self.tempdir, type=self.config.type, outFile=outputPath, buildNum=self.revision, keyFile=self.config.keyFile, experimentalAPI=self.config.experimental) | 
| else: | 
| import buildtools.packagerGecko as packager | 
| packager.createBuild(self.tempdir, outFile=outputPath, buildNum=self.revision, keyFile=self.config.keyFile) | 
| if not os.path.exists(outputPath): | 
| @@ -346,28 +345,22 @@ class NightlyBuild(object): | 
| template.stream({'config': self.config, 'links': links}).dump(outputPath) | 
| def updateDocs(self): | 
| if not self.config.type == 'gecko': | 
| return | 
| docsdir = tempfile.mkdtemp(prefix='jsdoc') | 
| command = ['hg', 'archive', '-R', get_config().get('extensions', 'jsdocRepository'), '-r', 'default', docsdir] | 
| - subprocess.Popen(command).communicate() | 
| + subprocess.check_call(command) | 
| 
 
Sebastian Noack
2013/07/04 13:57:51
If you actually don't have to check the return cod
 
Sebastian Noack
2013/07/04 14:03:25
Ignore that one. I thought I had discarded this co
 
 | 
| try: | 
| + import buildtools.build as build | 
| outputPath = os.path.join(self.config.docsDirectory, self.basename) | 
| - command = ['perl', os.path.join(docsdir, 'jsrun.pl'), | 
| - '-t=' + os.path.join(docsdir, 'templates', 'jsdoc'), | 
| - '-d=' + outputPath, | 
| - '-a', | 
| - '-p', | 
| - '-x=js', | 
| - os.path.join(self.tempdir, 'lib')] | 
| - subprocess.Popen(command, stdout=subprocess.PIPE).communicate() | 
| + build.generateDocs(self.tempdir, None, {"-t": docsdir, "-q": True}, [outputPath], self.config.type) | 
| finally: | 
| shutil.rmtree(docsdir, ignore_errors=True) | 
| def run(self): | 
| """ | 
| Run the nightly build process for one extension | 
| """ | 
| try: |