bodhi/controllers.py | 37 ++++++++++++++++++++++++------------- bodhi/model.py | 26 ++++++++++++++++++++++++++ bodhi/tests/test_client.py | 8 +++++--- bodhi/tests/test_controllers.py | 20 +++++++++++--------- 4 files changed, 66 insertions(+), 25 deletions(-)
New commits: commit c517276af64bc1df4b628b63cd28e7bc401e2f1a Author: Luke Macken lmacken@redhat.com Date: Mon Jul 19 16:05:58 2010 -0400
Add a PackageBuild.get_tags method that fetches the tag names from koji
diff --git a/bodhi/model.py b/bodhi/model.py index e7c6c58..d1334a8 100644 --- a/bodhi/model.py +++ b/bodhi/model.py @@ -244,6 +244,11 @@ class PackageBuild(SQLObject): """ Return a the url to details about this build """ return '/' + self.nvr
+ def get_tags(self): + """ Return the koji tags for this build """ + koji = buildsys.get_session() + return [tag['name'] for tag in koji.listTags(build=self.nvr)] + def __json__(self): return dict(nvr=self.nvr, package=self.package.__json__())
commit a83245afb74d2ccf23e326d26e82a490eb51951f Author: Luke Macken lmacken@redhat.com Date: Mon Jul 19 16:05:19 2010 -0400
Obsolete updates when they are deleted, as opposed to destroying them.
diff --git a/bodhi/controllers.py b/bodhi/controllers.py index 7635c08..082c90f 100644 --- a/bodhi/controllers.py +++ b/bodhi/controllers.py @@ -443,19 +443,30 @@ class Root(controllers.RootController): flash_log("Cannot delete an update you did not submit") if request_format() == 'json': return dict() raise redirect(update.get_url()) - if not update.pushed: - msg = "Deleted %s" % update.title - map(lambda x: x.destroySelf(), update.comments) - for build in update.builds: - if len(build.updates) == 1: - build.destroySelf() - update.untag() - update.destroySelf() - flash_log(msg) - mail.send_admin('deleted', update) - mail.send(update.people_to_notify(), 'deleted', update) - else: - flash_log("Cannot delete a pushed update") + + # We're no longer deleting anything from our database + # "Deleting" an update will now obsolete it + # In the TG2 port, we should have a seperate state for this + + update.move_to_candidate() + update.status = 'obsolete' + update.comment("This update has been obsoleted") + flash_log('Obsoleted <a href="%s">%s</a>' % (update.get_url(), + update.title)) + + #if not update.pushed: + # msg = "Deleted %s" % update.title + # map(lambda x: x.destroySelf(), update.comments) + # for build in update.builds: + # if len(build.updates) == 1: + # build.destroySelf() + # update.untag() + # update.destroySelf() + # flash_log(msg) + # mail.send_admin('deleted', update) + # mail.send(update.people_to_notify(), 'deleted', update) + #else: + # flash_log("Cannot delete a pushed update") except SQLObjectNotFound: flash_log("Update %s does not exist" % update) if request_format() == 'json': return dict() diff --git a/bodhi/model.py b/bodhi/model.py index 187bec1..e7c6c58 100644 --- a/bodhi/model.py +++ b/bodhi/model.py @@ -812,6 +812,27 @@ class PackageUpdate(SQLObject): self.status = 'pending' mail.send_admin('unpushed', self)
+ def move_to_candidate(self): + """ Move this update back to the candidate tag """ + log.info("Moving %s back to %s" % (self.title, + self.release.candidate_tag)) + koji = buildsys.get_session() + known_tags = (self.release.candidate_tag, self.release.testing_tag) + for build in self.builds: + for tag in build.get_tags(): + if tag in known_tags: + try: + koji.moveBuild(tag, self.release.candidate_tag, + build.nvr, force=True) + break + except Exception, e: + log.exception(e) + log.error('There was a problem moving %s' % build.nvr) + else: + log.warning("Not moving tag: %s" % tag) + if self.pushed: + self.pushed = False + def untag(self): """ Untag all of the builds in this update """ log.info("Untagging %s" % self.title) diff --git a/bodhi/tests/test_client.py b/bodhi/tests/test_client.py index a46f3bf..2213e6b 100644 --- a/bodhi/tests/test_client.py +++ b/bodhi/tests/test_client.py @@ -114,11 +114,13 @@ class TestClient(testutil.DBTest): bodhi = self.__get_bodhi_client() opts = self.__get_opts() self.__save_update(self.build, opts, bodhi) - assert PackageUpdate.byTitle(self.build) + up = PackageUpdate.byTitle(self.build) + assert up.status == 'pending' data = bodhi.delete(update=self.build) try: - PackageUpdate.byTitle(self.build) - assert False, "Update not deleted properly" + up = PackageUpdate.byTitle(self.build) + assert up.status == 'obsolete' + #assert False, "Update not deleted properly" except SQLObjectNotFound: pass
diff --git a/bodhi/tests/test_controllers.py b/bodhi/tests/test_controllers.py index 8151317..6c06242 100644 --- a/bodhi/tests/test_controllers.py +++ b/bodhi/tests/test_controllers.py @@ -573,18 +573,20 @@ class TestControllers(testutil.DBTest): headers=session) try: update = PackageUpdate.byTitle(params['builds']) - print update - assert False, "Update never deleted!" + assert update.status == 'obsolete', update.status + #print update + #assert False, "Update never deleted!" except SQLObjectNotFound: pass
- for build in params['builds'].split(','): - try: - build = PackageBuild.byNvr(build) - print build - assert False, "Build never deleted!" - except SQLObjectNotFound: - pass + # We're not deleting any builds or updates anymore... + #for build in params['builds'].split(','): + # try: + # build = PackageBuild.byNvr(build) + # print build + # assert False, "Build never deleted!" + # except SQLObjectNotFound: + # pass
def test_requests(self): session = login()