bodhi/model.py | 6 ++++++
bodhi/overrides.py | 23 +++++++++++++++++++++--
bodhi/tools/client.py | 27 +++++++++++++++++++++++++++
3 files changed, 54 insertions(+), 2 deletions(-)
New commits:
commit 9d1832d830b73a12a863508384041d9e48ec4161
Author: Luke Macken <lmacken(a)redhat.com>
Date: Tue Apr 26 15:05:05 2011 -0400
More buildroot override improvements
This adds --buildroot-override and --expire-override bodhi client options.
diff --git a/bodhi/model.py b/bodhi/model.py
index 7746e6f..0e1fab7 100644
--- a/bodhi/model.py
+++ b/bodhi/model.py
@@ -1442,6 +1442,12 @@ class BuildRootOverride(SQLObject):
self.release.override_tag))
koji.untagBuild(self.release.override_tag, self.build, force=True)
+ def __json__(self):
+ return dict(build=self.build, date_submitted=self.date_submitted,
+ notes=self.notes, expiration=self.expiration,
+ date_expired=self.date_expired, submitter=self.submitter,
+ release=self.release.name)
+
class Releases(Singleton):
""" A cache of frequently used release data.
diff --git a/bodhi/overrides.py b/bodhi/overrides.py
index 706b3e9..2bc9a80 100644
--- a/bodhi/overrides.py
+++ b/bodhi/overrides.py
@@ -18,6 +18,11 @@ from turbogears import (expose, paginate, validate, validators,
redirect,
error_handler, url, flash, identity, config)
from turbogears.controllers import Controller
+try:
+ from fedora.tg.tg1utils import request_format
+except ImportError:
+ from fedora.tg.util import request_format
+
from bodhi.model import BuildRootOverride, Release
from bodhi.buildsys import get_session
from bodhi.util import get_nvr, get_pkg_pushers
@@ -62,9 +67,11 @@ class BuildRootOverrideController(Controller):
build, identity.current.user_name))
flash('Buildroot override for %s successful untagged' % build)
override.destroySelf()
+ if request_format() == 'json':
+ return dict()
raise redirect('/override')
- @expose(template="bodhi.templates.search")
+ @expose('json')
@validate(form=override_form)
@error_handler(new)
def save(self, builds, notes, *args, **kw):
@@ -80,7 +87,13 @@ class BuildRootOverrideController(Controller):
# Make sure the build is tagged correctly
koji = get_session()
- tags = [tag['name'] for tag in koji.listTags(build)]
+ try:
+ tags = [tag['name'] for tag in koji.listTags(build)]
+ except Exception, e:
+ flash(str(e))
+ if request_format() == 'json':
+ return dict()
+ raise redirect('/override/new')
# Determine the release by the tag, and sanity check the builds
for tag in tags:
@@ -90,11 +103,15 @@ class BuildRootOverrideController(Controller):
elif tag in (rel.testing_tag, rel.stable_tag):
flash('Error: %s is already tagged with %s' % (
build, tag))
+ if request_format() == 'json':
+ return dict()
raise redirect('/override/new')
if not release:
flash('Error: Could not determine release for %s with tags %s' %
(builds, tags))
+ if request_format() == 'json':
+ return dict()
raise redirect('/override')
# Create a new overrides object
@@ -111,4 +128,6 @@ class BuildRootOverrideController(Controller):
flash('Your buildroot override has been successfully tagged. '
'It may take up to 20 minutes for the buildroot to regenerate.')
+ if request_format() == 'json':
+ return dict(override.__json__())
raise redirect('/override')
diff --git a/bodhi/tools/client.py b/bodhi/tools/client.py
index 98578e0..864290c 100755
--- a/bodhi/tools/client.py
+++ b/bodhi/tools/client.py
@@ -99,6 +99,12 @@ def get_parser():
parser.add_option("", "--untested",
action="store_true",
help="Display a list of untested critical path updates",
dest="untested", default=False)
+ parser.add_option("-O", "--buildroot-override",
action="store",
+ help="Submit a build as a buildroot override",
+ dest="override", metavar="BUILD")
+ parser.add_option("-E", "--expire-override",
action="store",
+ help="Expire a buildroot override",
+ dest="expire_override", metavar="BUILD")
## Details
parser.add_option("-s", "--status", action="store",
type="string",
@@ -165,6 +171,8 @@ def main():
log.error("Please specifiy a comma-separated list of builds")
sys.exit(-1)
+ override_notes = None
+
while True:
try:
if opts.new:
@@ -418,6 +426,25 @@ def main():
arch == 'i686' and ' --arch=i386
--arch=i586'
or '', build['nvr']),
shell=True)
+ elif opts.override:
+ if not override_notes:
+ override_notes = raw_input('Notes: ').strip()
+ data = bodhi.send_request('override/save', req_params={
+ 'builds': opts.override,
+ 'notes': override_notes,
+ }, auth=True)
+ if data.get('tg_flash'):
+ log.info(data['tg_flash'])
+ else:
+ log.info("No data returned from bodhi?")
+ elif opts.expire_override:
+ data = bodhi.send_request('override/expire', req_params={
+ 'build': opts.expire_override,
+ }, auth=True)
+ if data.get('tg_flash'):
+ log.info(data['tg_flash'])
+ else:
+ log.info("No data returned from bodhi?")
else:
parser.print_help()
break