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(a)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(a)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()
Show replies by date