def process(self): """Process an upload that is the result of a build. The name of the leaf is the build id of the build. Build uploads always contain a single package per leaf. """ logger = BufferLogger() if self.build.status != BuildStatus.UPLOADING: self.processor.log.warn( "Expected build status to be 'UPLOADING', was %s. Ignoring." % self.build.status.name) return try: # The recipe may have been deleted so we need to flag that here # and will handle below. We check so that we don't go to the # expense of doing an unnecessary upload. We don't just exit here # because we want the standard cleanup to occur. recipe_deleted = (ISourcePackageRecipeBuild.providedBy(self.build) and self.build.recipe is None) if recipe_deleted: result = UploadStatusEnum.FAILED else: self.processor.log.debug("Build %s found" % self.build.id) [changes_file] = self.locateChangesFiles() logger.debug("Considering changefile %s" % changes_file) result = self.processChangesFile(changes_file, logger) except (KeyboardInterrupt, SystemExit): raise except: info = sys.exc_info() message = ( 'Exception while processing upload %s' % self.upload_path) properties = [('error-explanation', message)] request = ScriptRequest(properties) error_utility = ErrorReportingUtility() error_utility.raising(info, request) logger.error('%s (%s)' % (message, request.oopsid)) result = UploadStatusEnum.FAILED if (result != UploadStatusEnum.ACCEPTED or not self.build.verifySuccessfulUpload()): self.build.updateStatus(BuildStatus.FAILEDTOUPLOAD) if self.build.status != BuildStatus.FULLYBUILT: if recipe_deleted: # For a deleted recipe, no need to notify that uploading has # failed - we just log a warning. self.processor.log.warn( "Recipe for build %s was deleted. Ignoring." % self.upload) else: self.build.storeUploadLog(logger.getLogBuffer()) self.build.notify(extra_info="Uploading build %s failed." % self.upload) else: self.build.notify() self.processor.ztm.commit() self.moveProcessedUpload(result, logger)
def process(self): """Process an upload that is the result of a build. The name of the leaf is the build id of the build. Build uploads always contain a single package per leaf. """ logger = BufferLogger() if self.build.status != BuildStatus.UPLOADING: self.processor.log.warn( "Expected build status to be 'UPLOADING', was %s. Ignoring." % self.build.status.name) return try: # The recipe may have been deleted so we need to flag that here # and will handle below. We check so that we don't go to the # expense of doing an unnecessary upload. We don't just exit here # because we want the standard cleanup to occur. recipe_deleted = (ISourcePackageRecipeBuild.providedBy(self.build) and self.build.recipe is None) if recipe_deleted: result = UploadStatusEnum.FAILED else: self.processor.log.debug("Build %s found" % self.build.id) [changes_file] = self.locateChangesFiles() logger.debug("Considering changefile %s" % changes_file) result = self.processChangesFile(changes_file, logger) except (KeyboardInterrupt, SystemExit): raise except: info = sys.exc_info() message = ('Exception while processing upload %s' % self.upload_path) properties = [('error-explanation', message)] request = ScriptRequest(properties) error_utility = ErrorReportingUtility() error_utility.raising(info, request) logger.error('%s (%s)' % (message, request.oopsid)) result = UploadStatusEnum.FAILED if (result != UploadStatusEnum.ACCEPTED or not self.build.verifySuccessfulUpload()): self.build.updateStatus(BuildStatus.FAILEDTOUPLOAD) if self.build.status != BuildStatus.FULLYBUILT: if recipe_deleted: # For a deleted recipe, no need to notify that uploading has # failed - we just log a warning. self.processor.log.warn( "Recipe for build %s was deleted. Ignoring." % self.upload) else: self.build.storeUploadLog(logger.getLogBuffer()) self.build.notify(extra_info="Uploading build %s failed." % self.upload) else: self.build.notify() self.processor.ztm.commit() self.moveProcessedUpload(result, logger)