From: Michael Tremer Date: Sat, 21 Oct 2017 13:32:20 +0000 (+0100) Subject: Allow jobs to be superseeded by each other X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3f516e417b0e2aeefc48b2e76cbcc8a398f5bdc7;p=people%2Fjschlag%2Fpbs.git Allow jobs to be superseeded by each other Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/jobs.py b/src/buildservice/jobs.py index ee6cad3..f60f44d 100644 --- a/src/buildservice/jobs.py +++ b/src/buildservice/jobs.py @@ -34,7 +34,7 @@ class Jobs(base.Object): for row in res: yield Job(self.backend, row.id, data=row) - def create(self, build, arch, type="build"): + def create(self, build, arch, type="build", superseeds=None): job = self._get_job("INSERT INTO jobs(uuid, type, build_id, arch, time_created) \ VALUES(%s, %s, %s, %s, NOW()) RETURNING *", "%s" % uuid.uuid4(), type, build.id, arch) job.log("created") @@ -42,6 +42,10 @@ class Jobs(base.Object): # Set cache for Build object. job.build = build + # Mark if the new job superseeds some other job + if superseeds: + superseeds.superseeded_by = job + # Jobs are by default in state "new" and wait for being checked # for dependencies. Packages that do have no build dependencies # can directly be forwarded to "pending" state. @@ -234,6 +238,18 @@ class Job(base.DataObject): def distro(self): return self.build.distro + def get_superseeded_by(self): + if self.data.superseeded_by: + return self.backend.jobs.get_by_id(self.data.superseeded_by) + + def set_superseeded_by(self, superseeded_by): + assert isinstance(superseeded_by, self.__class__) + + self._set_attribute("superseeded_by", superseeded_by.id) + self.superseeded_by = superseeded_by + + superseeded_by = lazy_property(get_superseeded_by, set_superseeded_by) + def delete(self): self.__delete_buildroots() self.__delete_history()