def start(self): self.checkWorkerHasCommand("uploadDirectory") self.checkWorkerHasCommand("uploadFile") self.checkWorkerHasCommand("stat") self.stdio_log = self.addLog("stdio") masterdest = os.path.expanduser(self.masterdest) sources = self.workersrcs if isinstance(self.workersrcs, list) else [self.workersrcs] if self.keepstamp and self.workerVersionIsOlderThan( "uploadFile", "2.13"): m = (("This worker ({}) does not support preserving timestamps. " "Please upgrade the worker.").format(self.build.workername)) raise WorkerTooOldError(m) if not sources: return self.finished(SKIPPED) @defer.inlineCallbacks def globSources(sources): results = yield defer.gatherResults([ self.runGlob(os.path.join(self.workdir, source), abandonOnFailure=False) for source in sources ]) results = [ self.workerPathToMasterPath(p) for p in flatten(results) ] return results @defer.inlineCallbacks def uploadSources(sources): if not sources: return SKIPPED else: for source in sources: result = yield self.startUpload(source, masterdest) if result == FAILURE: return FAILURE return SUCCESS def logUpload(sources): log.msg("MultipleFileUpload started, from worker %r to master %r" % (sources, masterdest)) nsrcs = len(sources) self.descriptionDone = 'uploading {} {}'.format( nsrcs, 'file' if nsrcs == 1 else 'files') return sources if self.glob: s = globSources(sources) else: s = defer.succeed(sources) s.addCallback(logUpload) d = s.addCallback(uploadSources) @d.addCallback def allUploadsDone(result): d = defer.maybeDeferred(self.allUploadsDone, result, sources, masterdest) d.addCallback(lambda _: result) return d d.addCallback(self.finished).addErrback(self.failed)