示例#1
0
文件: daemon.py 项目: seveas/golem
 def read_repos(self):
     self.logger.info("Loading repositories from %s" % self.chems)
     db = self.engine.connect()
     for file in os.listdir(self.chems):
         if not file.endswith('.conf'):
             continue
         repo = golem.repository.Repository(self, os.path.join(self.chems, file), db)
         self.repos[repo.name] = repo
     db.close()
示例#2
0
文件: daemon.py 项目: seveas/golem
    def process_job(self, job):
        try:
            job = json.loads(job.body)
        except ValueError:
            self.logger.warn("Invalid JSON received: %s" % job)
            job.bury()
        if job['repo'] in ('quit', 'exit'):
            self.logger.info("Exiting")
            return False
        else:
            db = self.engine.connect()
            if job['repo'] not in self.repos:
                # Are there new configfiles?
                confs = [x.configfile for x in self.repos.values()]
                for file in os.listdir(self.chems):
                    if not file.endswith('.conf') or file in confs:
                        continue
                    repo = golem.repository.Repository(self, os.path.join(self.chems, file), db)
                    self.repos[repo.name] = repo
                if job['repo'] not in self.repos:
                    self.logger.warning("Ignoring update for unknown repository %s" % job['repo'])
                    return True
            repo = self.repos[job['repo']]
            if not os.path.exists(repo.configfile):
                del self.repos[job['repo']]
                self.logger.warning("Ignoring update for removed repository %s" % job['repo'])
                return True

            self.logger.info("Update found for repo %s" % repo.name)
            if os.path.getmtime(repo.configfile) > repo.mtime:
                self.logger.info("Rereading configuration for %s" % repo.name)
                repo = self.repos[job['repo']] = golem.repository.Repository(self, repo.configfile, db)
            if job['why'] in ('post-receive', 'reschedule'):
                repo.update()
            repo.schedule(job, db)
            db.close()
        os.chdir('/')
        return True