def command_FORCE(self, args, who): args = shlex.split(args) # TODO: this requires python2.3 or newer if not args: raise UsageError("try 'force build WHICH <REASON>'") what = args.pop(0) if what != "build": raise UsageError("try 'force build WHICH <REASON>'") opts = ForceOptions() opts.parseOptions(args) which = opts['builder'] branch = opts['branch'] revision = opts['revision'] reason = opts['reason'] if which is None: raise UsageError("you must provide a Builder, " "try 'force build WHICH <REASON>'") # keep weird stuff out of the branch and revision strings. TODO: # centralize this somewhere. if branch and not re.match(r'^[\w\.\-\/]*$', branch): log.msg("bad branch '%s'" % branch) self.send("sorry, bad branch '%s'" % branch) return if revision and not re.match(r'^[\w\.\-\/]*$', revision): log.msg("bad revision '%s'" % revision) self.send("sorry, bad revision '%s'" % revision) return bc = self.getControl(which) r = "forced: by %s: %s" % (self.describeUser(who), reason) # TODO: maybe give certain users the ability to request builds of # certain branches s = SourceStamp(branch=branch, revision=revision) req = BuildRequest(r, s, which) try: bc.requestBuildSoon(req) except interfaces.NoSlaveError: self.send("sorry, I can't force a build: all slaves are offline") return ireq = IrcBuildRequest(self) req.subscribe(ireq.started)
def command_FORCE(self, args, who): errReply = "try 'force build [--branch=BRANCH] [--revision=REVISION] <WHICH> <REASON>'" args = shlex.split(args) if not args: raise UsageError(errReply) what = args.pop(0) if what != "build": raise UsageError(errReply) opts = ForceOptions() opts.parseOptions(args) which = opts["builder"] branch = opts["branch"] revision = opts["revision"] reason = opts["reason"] if which is None: raise UsageError("you must provide a Builder, " + errReply) # keep weird stuff out of the branch and revision strings. branch_validate = self.master.config.validation["branch"] revision_validate = self.master.config.validation["revision"] if branch and not branch_validate.match(branch): log.msg("bad branch '%s'" % branch) self.send("sorry, bad branch '%s'" % branch) return if revision and not revision_validate.match(revision): log.msg("bad revision '%s'" % revision) self.send("sorry, bad revision '%s'" % revision) return bc = self.getControl(which) reason = "forced: by %s: %s" % (self.describeUser(who), reason) ss = SourceStamp(branch=branch, revision=revision) d = bc.submitBuildRequest(ss, reason) def subscribe(buildreq): ireq = IrcBuildRequest(self) buildreq.subscribe(ireq.started) d.addCallback(subscribe) d.addErrback(log.err, "while forcing a build")
def command_FORCE(self, args, who): args = shlex.split(args) if not args: raise UsageError("try 'force build WHICH <REASON>'") what = args.pop(0) if what != "build": raise UsageError("try 'force build WHICH <REASON>'") opts = ForceOptions() opts.parseOptions(args) which = opts['builder'] branch = opts['branch'] revision = opts['revision'] reason = opts['reason'] if which is None: raise UsageError("you must provide a Builder, " "try 'force build WHICH <REASON>'") # keep weird stuff out of the branch and revision strings. # TODO: centralize this somewhere. if branch and not re.match(r'^[\w\.\-\/]*$', branch): log.msg("bad branch '%s'" % branch) self.send("sorry, bad branch '%s'" % branch) return if revision and not re.match(r'^[\w\.\-\/]*$', revision): log.msg("bad revision '%s'" % revision) self.send("sorry, bad revision '%s'" % revision) return bc = self.getControl(which) reason = "forced: by %s: %s" % (self.describeUser(who), reason) ss = SourceStamp(branch=branch, revision=revision) d = bc.submitBuildRequest(ss, reason) def subscribe(bsid): ireq = IrcBuildRequest(self) bss = BuildSetStatus(bsid, self.scheduler.master.status, self.master.db) brs = bss.getBuildRequests()[0] brs.subscribe(ireq.started) d.addCallback(subscribe) d.addErrback(log.err, "while forcing a build")
def command_FORCE(self, args, who): args = shlex.split(args) if not args: raise UsageError("try 'force build WHICH <REASON>'") what = args.pop(0) if what != "build": raise UsageError("try 'force build WHICH <REASON>'") opts = ForceOptions() opts.parseOptions(args) which = opts['builder'] branch = opts['branch'] revision = opts['revision'] reason = opts['reason'] if which is None: raise UsageError("you must provide a Builder, " "try 'force build WHICH <REASON>'") # keep weird stuff out of the branch and revision strings. # TODO: centralize this somewhere. if branch and not re.match(r'^[\w\.\-\/]*$', branch): log.msg("bad branch '%s'" % branch) self.send("sorry, bad branch '%s'" % branch) return if revision and not re.match(r'^[\w\.\-\/]*$', revision): log.msg("bad revision '%s'" % revision) self.send("sorry, bad revision '%s'" % revision) return bc = self.getControl(which) reason = "forced: by %s: %s" % (self.describeUser(who), reason) ss = SourceStamp(branch=branch, revision=revision) d = bc.submitBuildRequest(ss, reason) def subscribe(buildreq): ireq = IrcBuildRequest(self) buildreq.subscribe(ireq.started) d.addCallback(subscribe) d.addErrback(log.err, "while forcing a build")
def command_FORCE(self, args, who): errReply = "try 'force build [--branch=BRANCH] [--revision=REVISION] <WHICH> <REASON>'" args = shlex.split(args) if not args: raise UsageError(errReply) what = args.pop(0) if what != "build": raise UsageError(errReply) opts = ForceOptions() opts.parseOptions(args) which = opts['builder'] branch = opts['branch'] revision = opts['revision'] reason = opts['reason'] if which is None: raise UsageError("you must provide a Builder, " + errReply) # keep weird stuff out of the branch and revision strings. branch_validate = self.master.config.validation['branch'] revision_validate = self.master.config.validation['revision'] if branch and not branch_validate.match(branch): log.msg("bad branch '%s'" % branch) self.send("sorry, bad branch '%s'" % branch) return if revision and not revision_validate.match(revision): log.msg("bad revision '%s'" % revision) self.send("sorry, bad revision '%s'" % revision) return bc = self.getControl(which) reason = "forced: by %s: %s" % (self.describeUser(who), reason) ss = SourceStamp(branch=branch, revision=revision) d = bc.submitBuildRequest(ss, reason) def subscribe(buildreq): ireq = IrcBuildRequest(self) buildreq.subscribe(ireq.started) d.addCallback(subscribe) d.addErrback(log.err, "while forcing a build")
def command_FORCE(self, args, who): errReply = "try 'force build [--branch=BRANCH] [--revision=REVISION] [--props=PROP1=VAL1,PROP2=VAL2...] <WHICH> <REASON>'" args = shlex.split(args) if not args: raise UsageError(errReply) what = args.pop(0) if what != "build": raise UsageError(errReply) opts = ForceOptions() opts.parseOptions(args) which = opts['builder'] branch = opts['branch'] revision = opts['revision'] reason = opts['reason'] props = opts['props'] if which is None: raise UsageError("you must provide a Builder, " + errReply) # keep weird stuff out of the branch, revision, and properties args. branch_validate = self.master.config.validation['branch'] revision_validate = self.master.config.validation['revision'] pname_validate = self.master.config.validation['property_name'] pval_validate = self.master.config.validation['property_value'] if branch and not branch_validate.match(branch): log.msg("bad branch '%s'" % branch) self.send("sorry, bad branch '%s'" % branch) return if revision and not revision_validate.match(revision): log.msg("bad revision '%s'" % revision) self.send("sorry, bad revision '%s'" % revision) return properties = Properties() if props: # split props into name:value dict pdict = {} propertylist = props.split(",") for i in range(0,len(propertylist)): splitproperty = propertylist[i].split("=", 1) pdict[splitproperty[0]] = splitproperty[1] # set properties for prop in pdict: pname = prop pvalue = pdict[prop] if not pname_validate.match(pname) \ or not pval_validate.match(pvalue): log.msg("bad property name='%s', value='%s'" % (pname, pvalue)) self.send("sorry, bad property name='%s', value='%s'" % (pname, pvalue)) return properties.setProperty(pname, pvalue, "Force Build IRC") bc = self.getControl(which) reason = "forced: by %s: %s" % (self.describeUser(who), reason) ss = SourceStamp(branch=branch, revision=revision) d = bc.submitBuildRequest(ss, reason, props=properties.asDict()) def subscribe(buildreq): ireq = IrcBuildRequest(self, self.useRevisions) buildreq.subscribe(ireq.started) d.addCallback(subscribe) d.addErrback(log.err, "while forcing a build")
def command_FORCE(self, args, who): errReply = "try 'force build [--branch=BRANCH] [--revision=REVISION] [--props=PROP1=VAL1,PROP2=VAL2...] <WHICH> <REASON>'" args = shlex.split(args) if not args: raise UsageError(errReply) what = args.pop(0) if what != "build": raise UsageError(errReply) opts = ForceOptions() opts.parseOptions(args) which = opts['builder'] branch = opts['branch'] revision = opts['revision'] reason = opts['reason'] props = opts['props'] if which is None: raise UsageError("you must provide a Builder, " + errReply) # keep weird stuff out of the branch, revision, and properties args. branch_validate = self.master.config.validation['branch'] revision_validate = self.master.config.validation['revision'] pname_validate = self.master.config.validation['property_name'] pval_validate = self.master.config.validation['property_value'] if branch and not branch_validate.match(branch): log.msg("bad branch '%s'" % branch) self.send("sorry, bad branch '%s'" % branch) return if revision and not revision_validate.match(revision): log.msg("bad revision '%s'" % revision) self.send("sorry, bad revision '%s'" % revision) return properties = Properties() if props: # split props into name:value dict pdict = {} propertylist = props.split(",") for i in range(0, len(propertylist)): splitproperty = propertylist[i].split("=", 1) pdict[splitproperty[0]] = splitproperty[1] # set properties for prop in pdict: pname = prop pvalue = pdict[prop] if not pname_validate.match(pname) \ or not pval_validate.match(pvalue): log.msg("bad property name='%s', value='%s'" % (pname, pvalue)) self.send("sorry, bad property name='%s', value='%s'" % (pname, pvalue)) return properties.setProperty(pname, pvalue, "Force Build IRC") bc = self.getControl(which) reason = "forced: by %s: %s" % (self.describeUser(who), reason) ss = SourceStamp(branch=branch, revision=revision) d = bc.submitBuildRequest(ss, reason, props=properties.asDict()) def subscribe(buildreq): ireq = IrcBuildRequest(self, self.useRevisions) buildreq.subscribe(ireq.started) d.addCallback(subscribe) d.addErrback(log.err, "while forcing a build")