Exemplo n.º 1
0
 def __init__(self, maildir, prefix=None, category="", repository=""):
     MaildirService.__init__(self, maildir)
     self.prefix = prefix
     self.category = category
     self.repository = repository
     if prefix and not prefix.endswith("/"):
         log.msg("%s: you probably want your prefix=('%s') to end with " "a slash")
Exemplo n.º 2
0
 def __init__(self, maildir, prefix=None, category='', repository=''):
     MaildirService.__init__(self, maildir)
     self.prefix = prefix
     self.category = category
     self.repository = repository
     if prefix and not prefix.endswith("/"):
         log.msg("%s: you probably want your prefix=('%s') to end with "
                 "a slash")
Exemplo n.º 3
0
 def __init__(self, scheduler, basedir=None):
     self.scheduler = scheduler
     MaildirService.__init__(self, basedir)
Exemplo n.º 4
0
 def __init__(self, scheduler, basedir=None):
     self.scheduler = scheduler
     MaildirService.__init__(self, basedir)
Exemplo n.º 5
0
 def __init__(self, name, builderNames, jobdir,
              properties={}):
     base.BaseScheduler.__init__(self, name, builderNames, properties)
     self.jobdir = jobdir
     self.watcher = MaildirService()
     self.watcher.setServiceParent(self)
Exemplo n.º 6
0
class Try_Jobdir(TryBase):
    compare_attrs = ( 'name', 'builderNames', 'jobdir', 'properties' )

    def __init__(self, name, builderNames, jobdir,
                 properties={}):
        base.BaseScheduler.__init__(self, name, builderNames, properties)
        self.jobdir = jobdir
        self.watcher = MaildirService()
        self.watcher.setServiceParent(self)

    def setServiceParent(self, parent):
        sm = parent
        m = sm.parent
        self.watcher.setBasedir(os.path.join(m.basedir, self.jobdir))
        TryBase.setServiceParent(self, parent)

    def parseJob(self, f):
        # jobfiles are serialized build requests. Each is a list of
        # serialized netstrings, in the following order:
        #  "1", the version number of this format
        #  buildsetID, arbitrary string, used to find the buildSet later
        #  branch name, "" for default-branch
        #  base revision, "" for HEAD
        #  patchlevel, usually "1"
        #  patch
        #  builderNames...
        p = netstrings.NetstringParser()
        try:
            p.dataReceived(f.read())
        except basic.NetstringParseError:
            raise BadJobfile("unable to parse netstrings")
        ver = p.strings.pop(0)
        if ver == "1":
            buildsetID, branch, baserev, patchlevel, diff = p.strings[:5]
            builderNames = p.strings[5:]
            if branch == "":
                branch = None
            if baserev == "":
                baserev = None
            patchlevel = int(patchlevel)
            patch = (patchlevel, diff)
            ss = SourceStamp("Old client", branch, baserev, patch)
        elif ver == "2": # introduced the repository and project property
            buildsetID, branch, baserev, patchlevel, diff, repository, project = p.strings[:7]
            builderNames = p.strings[7:]
            if branch == "":
                branch = None
            if baserev == "":
                baserev = None
            patchlevel = int(patchlevel)
            patch = (patchlevel, diff)
            ss = SourceStamp(branch, baserev, patch, repository=repository,
                             project=project)
        else:
            raise BadJobfile("unknown version '%s'" % ver)
        return builderNames, ss, buildsetID

    def messageReceived(self, filename):
        md = os.path.join(self.parent.parent.basedir, self.jobdir)
        if runtime.platformType == "posix":
            # open the file before moving it, because I'm afraid that once
            # it's in cur/, someone might delete it at any moment
            path = os.path.join(md, "new", filename)
            f = open(path, "r")
            os.rename(os.path.join(md, "new", filename),
                      os.path.join(md, "cur", filename))
        else:
            # do this backwards under windows, because you can't move a file
            # that somebody is holding open. This was causing a Permission
            # Denied error on bear's win32-twisted1.3 buildslave.
            os.rename(os.path.join(md, "new", filename),
                      os.path.join(md, "cur", filename))
            path = os.path.join(md, "cur", filename)
            f = open(path, "r")

        try:
            builderNames, ss, jobid = self.parseJob(f)
        except BadJobfile:
            log.msg("%s reports a bad jobfile in %s" % (self, filename))
            log.err()
            return defer.succeed(None)
        # Validate/fixup the builder names.
        builderNames = self.filterBuilderList(builderNames)
        if not builderNames:
            return defer.succeed(None)
        reason = "'try' job"
        d = self.parent.db.runInteraction(self._try, ss, builderNames, reason)
        def _done(ign):
            self.parent.loop_done() # so it will notify builder loop
        d.addCallback(_done)
        return d

    def _try(self, t, ss, builderNames, reason):
        db = self.parent.db
        ssid = db.get_sourcestampid(ss, t)
        bsid = self.create_buildset(ssid, reason, t, builderNames=builderNames)
        return bsid