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()
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