bodhi.cfg | 7 ++--
bodhi.spec | 2 +
bodhi/buildsys.py | 4 +-
bodhi/controllers.py | 37 +++++++++++----------
bodhi/new.py | 4 +-
bodhi/templates/new.kid | 2 -
bodhi/tests/test_client.py | 22 ++++++++----
bodhi/tests/test_controllers.py | 17 +++++----
bodhi/tools/client.py | 69 +++++++++++++++++++++++-----------------
bodhi/widgets.py | 18 ++++++----
10 files changed, 107 insertions(+), 75 deletions(-)
New commits:
commit 17acda6c2bc1c64b3b5f94af7827bba8cf9a8fc1
Author: Luke Macken <lmacken(a)redhat.com>
Date: Fri Aug 8 15:20:05 2008 -0400
make the test cases work again
diff --git a/bodhi.cfg b/bodhi.cfg
index 6c3645f..c20145d 100644
--- a/bodhi.cfg
+++ b/bodhi.cfg
@@ -5,7 +5,8 @@
# bodhi/config/app.cfg
# DATABASE
-sqlobject.dburi="sqlite:///var/tmp/bodhi.sqlite"
+#sqlobject.dburi="sqlite:///var/tmp/bodhi.sqlite"
+sqlobject.dburi="postgres://bodhi:b0dh1@localhost/bodhi"
# If you have sqlite, here's a simple default to get you started
# in development
@@ -34,8 +35,8 @@ tg.strict_parameters = True
#base_url_filter.use_x_forwarded_host = True
# MASHER
-masher = None # we are the masher
-#masher = 'http://localhost:8085/updates' # point to an external masher
+#masher = None # we are the masher
+masher = 'http://localhost:8085/updates' # point to an external masher
# Buildsystem. 'koji' or 'dev' (default)
# buildsystem = 'koji'
diff --git a/bodhi/controllers.py b/bodhi/controllers.py
index 3dc35f2..8e183bd 100644
--- a/bodhi/controllers.py
+++ b/bodhi/controllers.py
@@ -427,6 +427,7 @@ class Root(controllers.RootController):
# 'build' : PackageBuild } }
if not bugs: bugs = []
+ if request == 'None': request = None
if request: request = request.lower()
koji = buildsys.get_session()
diff --git a/bodhi/tests/test_controllers.py b/bodhi/tests/test_controllers.py
index 4e2af5e..7919cf6 100644
--- a/bodhi/tests/test_controllers.py
+++ b/bodhi/tests/test_controllers.py
@@ -549,7 +549,7 @@ class TestControllers(testutil.DBTest):
'request' : 'foobar!',
}
self.save_update(params, session)
- assert "Value must be one of: Testing; Stable; None; testing; stable; none
(not u'foobar!')" in cherrypy.response.body[0], cherrypy.response.body[0]
+ assert "Value must be one of: Testing; Stable; None; None; testing; stable;
none (not u'foobar!')" in cherrypy.response.body[0],
cherrypy.response.body[0]
def test_broken_update_path_on_submission(self):
""" Make sure we are unable to break upgrade paths upon submission
"""
@@ -669,7 +669,7 @@ class TestControllers(testutil.DBTest):
params = {
'builds' : 'TurboGears-1.0.2.2-2.fc7',
'release' : 'Fedora 7',
- 'type_' : 'enhancement',
+ 'type_' : 'enhancement',
'bugs' : '1234',
'cves' : 'CVE-2020-0001',
'notes' : 'foobar',
diff --git a/bodhi/widgets.py b/bodhi/widgets.py
index e944332..c2b63ab 100644
--- a/bodhi/widgets.py
+++ b/bodhi/widgets.py
@@ -76,7 +76,7 @@ class NewUpdateForm(Form):
template = "bodhi.templates.new"
submit_text = "Save Update"
update_types = config.get('update_types').split()
- request_types = ['Testing', 'Stable', None]
+ request_types = ['Testing', 'Stable', 'None', None]
fields = [
AutoCompleteField('builds', label='Package',
search_controller=url('/new/search'),
commit f1d411645674b509cd128ae73a42ab5fd301afb0
Author: Luke Macken <lmacken(a)redhat.com>
Date: Fri Aug 8 15:12:40 2008 -0400
Change the build_dir flash to a log.warning
diff --git a/bodhi/new.py b/bodhi/new.py
index 3b9b6a1..ab20274 100644
--- a/bodhi/new.py
+++ b/bodhi/new.py
@@ -13,11 +13,13 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
import os
+import logging
from os.path import join
from bodhi.widgets import NewUpdateForm
from turbogears import expose, controllers, identity, config, url, flash
+log = logging.getLogger(__name__)
update_form = NewUpdateForm()
class NewUpdateController(controllers.Controller):
@@ -30,7 +32,7 @@ class NewUpdateController(controllers.Controller):
try:
self.packages = os.listdir(self.build_dir)
except (OSError, TypeError):
- flash("Warning: build_dir either invalid or not set in app.cfg")
+ log.warning("Warning: build_dir either invalid or not set in
app.cfg")
@identity.require(identity.not_anonymous())
@expose(template="bodhi.templates.form")
commit 55eeae08e3fc7853478cb3b72b19972f9e8dd62a
Author: Luke Macken <lmacken(a)redhat.com>
Date: Fri Aug 8 15:05:05 2008 -0400
Apply a modified patch from Ricky to use an improved update template parser.
diff --git a/bodhi/tests/test_client.py b/bodhi/tests/test_client.py
index 261ef4b..d82a072 100644
--- a/bodhi/tests/test_client.py
+++ b/bodhi/tests/test_client.py
@@ -95,8 +95,8 @@ class TestClient(testutil.DBTest):
assert bz in update.bugs
def __save_update(self, build, opts, bodhi):
- bodhi.save(builds=build, release=opts.release, type_=opts.type_,
- bugs=opts.bugs, notes=opts.notes, request=opts.request)
+ bodhi.save(builds=build, type_=opts.type_, bugs=opts.bugs,
+ notes=opts.notes, request=opts.request)
def test_query(self):
bodhi = self.__get_bodhi_client()
@@ -164,13 +164,21 @@ class TestClient(testutil.DBTest):
opts = self.__get_opts()
out = file(opts.input_file, 'w')
- out.write('type=E\nrequest=T\nbug=123,456\nbar')
+ out.write('''[%s]
+type=enhancement
+request=testing
+bugs=123,456
+notes=bar
+autokarma=True
+stable_karma=10
+unstable_karma=-10
+close_bugs=True
+''' % self.build)
out.close()
- update = bodhi.parse_file(input_file=opts.input_file)
- for key, value in update.items():
- setattr(opts, key, value)
- self.__save_update(self.build, opts, bodhi)
+ updates = bodhi.parse_file(input_file=opts.input_file)
+ for update_args in updates:
+ bodhi.save(**update_args)
update = PackageUpdate.byTitle(self.build)
assert update.type == 'enhancement'
diff --git a/bodhi/tools/client.py b/bodhi/tools/client.py
index 58f4ce7..82da0dc 100755
--- a/bodhi/tools/client.py
+++ b/bodhi/tools/client.py
@@ -126,39 +126,52 @@ def main():
while True:
try:
if opts.new:
- verify_args(args)
- extra_args = {
- 'builds': args[0], 'release': opts.release,
- 'type_': opts.type_, 'bugs': opts.bugs,
'notes': opts.notes,
- 'request': opts.request or 'testing',
- }
+ # Note: All options are ignored if you're passing input from a file.
if opts.input_file:
- extra_args.update(
- bodhi.parse_file(input_file=opts.input_file))
- # hack. remove this with the next version of python-fedora
- if 'type' in extra_args:
- extra_args['type_'] = extra_args['type']
- del(extra_args['type'])
- if not extra_args['release']:
- log.error("Error: No release specified (ie: -r F8)")
- sys.exit(-1)
- if not extra_args['type_']:
- log.error("Error: No update type specified (ie: -t
bugfix)")
- sys.exit(-1)
- log.info("Creating a new update for %s" % args[0])
- data = bodhi.save(**extra_args)
- if data.get('tg_flash'):
- log.info(data['tg_flash'])
- if 'update' in data:
- log.info(data['update'])
+ updates = bodhi.parse_file(input_file=opts.input_file)
+ for update_args in updates:
+ if not update_args['type_']:
+ log.error("Error: No update type specified (ie: "
+ "type=bugfix), skipping.")
+ continue
+ log.info("Creating a new update for %s" %
+ update_args['builds'])
+ data = bodhi.save(**update_args)
+ if data.get('tg_flash'):
+ log.info(data['tg_flash'])
+ if 'updates' in data:
+ for update in data['updates']:
+ log.info(bodhi.update_str(update))
+ else:
+ validate_auth(data)
else:
- validate_auth(data)
+ verify_args(args)
+ extra_args = {
+ 'builds': args[0],
+ 'type_': opts.type_,
+ 'bugs': opts.bugs,
+ 'notes': opts.notes,
+ 'request': opts.request or 'testing',
+ }
+ if not extra_args['type_']:
+ log.error("Error: No update type specified (ie: -t
bugfix)")
+ sys.exit(-1)
+ log.info("Creating a new update for %s" % args[0])
+ data = bodhi.save(**extra_args)
+ print "data =", data
+ if data.get('tg_flash'):
+ log.info(data['tg_flash'])
+ if 'updates' in data:
+ for update in data['updates']:
+ log.info(bodhi.update_str(update))
+ else:
+ validate_auth(data)
elif opts.edit:
verify_args(args)
log.info("Editing update for %s" % args[0])
- data = bodhi.save(builds=args[0], release=opts.release,
- type_=opts.type_, bugs=opts.bugs,
- notes=opts.notes, request=opts.request)
+ data = bodhi.save(builds=args[0], type_=opts.type_,
+ bugs=opts.bugs, notes=opts.notes,
+ request=opts.request)
log.info(data['tg_flash'])
validate_auth(data)
if data.has_key('update'):
commit 2dc8c8e3a9612f460df8326f90a7c46bb7185bb9
Author: Luke Macken <lmacken(a)redhat.com>
Date: Fri Aug 8 14:51:44 2008 -0400
Use the formencode.validators.StringBool instead of Bool in our NewUpdateForm.
I'm really surprised this bug hasn't caused more issues...
diff --git a/bodhi/widgets.py b/bodhi/widgets.py
index 3972322..e944332 100644
--- a/bodhi/widgets.py
+++ b/bodhi/widgets.py
@@ -84,6 +84,7 @@ class NewUpdateForm(Form):
template='bodhi.templates.packagefield',
validator=AutoCompleteValidator()),
CheckBox('inheritance', label='Follow Build inheritance',
+ validator=validators.StringBool(),
default=False, attrs={'title' : 'Build Inheritance -
'
'TODO'}),
SingleSelectField('type_', label='Type',
options=update_types,
@@ -102,19 +103,21 @@ class NewUpdateForm(Form):
'about this update that will appear in '
'the notice'}),
CheckBox(name='close_bugs', help_text='Automatically close
bugs',
+ validator=validators.StringBool(),
default=True, attrs={'title' : 'Close Bugs - '
'Automatically close bugs '
'when this update is '
'pushed as stable'}),
HiddenField('edited', default=None),
CheckBox(name='suggest_reboot', label='Suggest Reboot',
+ validator=validators.StringBool(),
default=False, attrs={'title': 'Suggest Reboot - '
'Recommend that the user '
'restarts their machine '
'after installing this '
'update'}),
CheckBox(name='autokarma', label='Enable karma automatism',
- default=True, validator=validators.Bool(),
+ default=True, validator=validators.StringBool(),
attrs={'onclick':
'$("#form_stable_karma").attr("disabled",
!$("#form_stable_karma").attr("disabled"));'
'$("#form_unstable_karma").attr("disabled",
!$("#form_unstable_karma").attr("disabled"));',
commit cadc765fc7a1bce45b6b82475e7d7cacf2f71e77
Author: Luke Macken <lmacken(a)redhat.com>
Date: Fri Aug 8 14:51:12 2008 -0400
Change our request_types to 'Testing', 'Stable' and None (instead of
'None')
diff --git a/bodhi/widgets.py b/bodhi/widgets.py
index 2712dc4..3972322 100644
--- a/bodhi/widgets.py
+++ b/bodhi/widgets.py
@@ -76,7 +76,7 @@ class NewUpdateForm(Form):
template = "bodhi.templates.new"
submit_text = "Save Update"
update_types = config.get('update_types').split()
- request_types = ['Testing', 'Stable', 'None']
+ request_types = ['Testing', 'Stable', None]
fields = [
AutoCompleteField('builds', label='Package',
search_controller=url('/new/search'),
@@ -90,7 +90,7 @@ class NewUpdateForm(Form):
validator=validators.OneOf(update_types)),
SingleSelectField('request', options=request_types,
validator=validators.OneOf(request_types +
- [r.lower() for r in request_types])),
+ [r.lower() for r in request_types if r])),
TextField('bugs', validator=BugValidator(),
attrs={'title' : 'Bug Numbers - A space or comma '
'delimited list of bug numbers or '
commit f52cff99946d009ceab8a631aff8558b271c2d24
Author: Luke Macken <lmacken(a)redhat.com>
Date: Fri Aug 8 14:49:32 2008 -0400
Fix some more broken test cases
diff --git a/bodhi/tests/test_controllers.py b/bodhi/tests/test_controllers.py
index 57038d1..4e2af5e 100644
--- a/bodhi/tests/test_controllers.py
+++ b/bodhi/tests/test_controllers.py
@@ -151,13 +151,14 @@ class TestControllers(testutil.DBTest):
params = {
'builds' : 'TurboGears-1.0.2.2-2.fc7',
'release' : 'Fedora 7',
- 'type_' : 'REGRESSION!',
+ 'type_' : 'REGRESSION!',
'bugs' : '',
'cves' : '',
'notes' : ''
}
+ cherrypy.config.update({'build_dir': '/tmp'})
self.save_update(params, session)
- assert "Invalid: expected a member of ['security', 'bugfix',
'enhancement', 'newpackage'] in the EnumCol 'type', got
u'REGRESSION!' instead" in cherrypy.response.body[0]
+ assert "Value must be one of: bugfix; enhancement; security; newpackage (not
u'REGRESSION!')" in cherrypy.response.body[0]
def test_user_notes_encoding(self):
session = login(username='guest', display_name='foo\xc3\xa9bar')
@@ -792,7 +793,7 @@ class TestControllers(testutil.DBTest):
params = {
'builds' : 'TurboGears-2.6.23.1-21.fc7',
'release' : 'Fedora 7',
- 'type_' : 'enhancement',
+ 'type_' : 'enhancement',
'bugs' : '321',
'cves' : '',
'notes' : 'foobar',
@@ -803,7 +804,7 @@ class TestControllers(testutil.DBTest):
params = {
'builds' : 'python-sqlobject-1.6.3-13.fc7',
'release' : 'Fedora 7',
- 'type_' : 'enhancement',
+ 'type_' : 'enhancement',
'bugs' : '321',
'cves' : '',
'notes' : 'foobar',
@@ -815,7 +816,7 @@ class TestControllers(testutil.DBTest):
params = {
'builds' : 'nethack-2.10-3.20070831cvs.fc7',
'release' : 'Fedora 7',
- 'type_' : 'enhancement',
+ 'type_' : 'enhancement',
'bugs' : '321',
'cves' : '',
'notes' : 'foobar',
@@ -827,7 +828,7 @@ class TestControllers(testutil.DBTest):
params = {
'builds' : 'xprobe2-1.4.6-1.fc7',
'release' : 'Fedora 7',
- 'type_' : 'enhancement',
+ 'type_' : 'enhancement',
'bugs' : '321',
'cves' : '',
'notes' : 'foobar',
commit 66783403cd3c9295ccb5535bc5836b7c847f5fc1
Author: Luke Macken <lmacken(a)redhat.com>
Date: Fri Aug 8 14:48:56 2008 -0400
Lots of various Controller.save() method cleanups
diff --git a/bodhi/controllers.py b/bodhi/controllers.py
index f626392..3dc35f2 100644
--- a/bodhi/controllers.py
+++ b/bodhi/controllers.py
@@ -427,6 +427,7 @@ class Root(controllers.RootController):
# 'build' : PackageBuild } }
if not bugs: bugs = []
+ if request: request = request.lower()
koji = buildsys.get_session()
# Basic sanity checks
@@ -434,7 +435,7 @@ class Root(controllers.RootController):
flash_log('Unknown update type: %s. Valid types are: %s' % (
type_, config.get('update_types')))
return dict()
- if request not in ('testing', 'stable', 'None', None):
+ if request not in ('testing', 'stable', None):
flash_log('Unknown request: %s. Valid requests are: testing, '
'stable, None' % request)
return dict()
@@ -463,7 +464,7 @@ class Root(controllers.RootController):
else:
flash_log("%s update already exists!" %
link(build, b.get_url()))
- raise redirect('/new', **params)
+ raise redirect('/new', **params)
except SQLObjectNotFound:
pass
@@ -574,11 +575,11 @@ class Root(controllers.RootController):
kojiBuild['release'])
# Check for broken update paths against all releases
+ log.info("Checking for broken update paths")
for release in Release.select():
- tags = ['dist-rawhide', release.dist_tag, release.dist_tag +
- '-updates']
+ tags = ['dist-rawhide', release.dist_tag,
+ release.dist_tag + '-updates']
for tag in tags:
- log.info("Checking for broken update paths in " + tag)
pkg = buildinfo[build]['nvr'][0]
for oldBuild in koji.listTagged(tag, package=pkg,
latest=True):
@@ -612,10 +613,9 @@ class Root(controllers.RootController):
# Create or fetch the PackageBuild object for this build
try:
- pkgBuild = PackageBuild(nvr=build, package=package)
- except (PostgresIntegrityError, SQLiteIntegrityError,
- DuplicateEntryError):
pkgBuild = PackageBuild.byNvr(build)
+ except SQLObjectNotFound:
+ pkgBuild = PackageBuild(nvr=build, package=package)
buildinfo[build]['build'] = pkgBuild
# Obsolete any older pending/testing updates.
@@ -709,9 +709,9 @@ class Root(controllers.RootController):
# If a request is specified, make it. By default we're submitting
# new updates directly into testing
- if request and request != "None" and request != update.request:
+ if request and request != update.request:
try:
- update.set_request(request.lower(), pathcheck=False)
+ update.set_request(request, pathcheck=False)
except InvalidRequest, e:
flash_log(str(e))
if request_format() == 'json': return dict()
commit 81a3601dfeca7d7456b405a1b09a97854cade2e2
Author: Luke Macken <lmacken(a)redhat.com>
Date: Fri Aug 8 14:08:31 2008 -0400
Make a few semantic cleanups
diff --git a/bodhi/controllers.py b/bodhi/controllers.py
index addf4bc..f626392 100644
--- a/bodhi/controllers.py
+++ b/bodhi/controllers.py
@@ -299,7 +299,7 @@ class Root(controllers.RootController):
Request that a specified action be performed on a given update.
Action must be one of: 'testing', 'stable', 'unpush' or
'obsolete'.
"""
- log.debug("request(%s, %s)" % (action, update))
+ log.debug('request(%s)' % locals())
try:
update = PackageUpdate.byTitle(update)
update.set_request(action)
@@ -393,8 +393,8 @@ class Root(controllers.RootController):
""" Save an update.
This entails either creating a new update, or editing an existing one.
- To edit an existing update, you must specify the update title in
- the ``edited`` keyword argument.
+ To edit an existing update, you must specify the update's original
+ title in the ``edited`` keyword argument.
Arguments:
:builds: A list of koji builds for this update.
@@ -417,10 +417,7 @@ class Root(controllers.RootController):
:edited: The update title of the existing update that we are editing.
"""
- log.debug("save(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)" % (
- builds, type_, notes, bugs, close_bugs, edited, request,
- suggest_reboot, inheritance, stable_karma, unstable_karma,
- kw))
+ log.debug('save(%s)' % locals())
note = [] # Messages to flash to the user
updates = [] # PackageUpdate objects
commit f6f63443ad2fa2ddfb8640b3cf39ba04a397b3da
Author: Luke Macken <lmacken(a)redhat.com>
Date: Fri Aug 8 14:07:57 2008 -0400
Fix a couple of bugs when editing updates
diff --git a/bodhi/controllers.py b/bodhi/controllers.py
index b4f295b..addf4bc 100644
--- a/bodhi/controllers.py
+++ b/bodhi/controllers.py
@@ -367,13 +367,16 @@ class Root(controllers.RootController):
'release' : update.release.long_name,
'testing' : update.status == 'testing',
'request' : str(update.request).title(),
- 'type' : update.type,
+ 'type_' : update.type,
'notes' : update.notes,
'bugs' : update.get_bugstring(),
'edited' : update.title,
'close_bugs': update.close_bugs,
'stable_karma' : update.builds[0].package.stable_karma,
'unstable_karma' : update.builds[0].package.unstable_karma,
+ 'suggest_reboot' : update.builds[0].package.suggest_reboot,
+ 'autokarma' : update.builds[0].package.stable_karma != 0 and
+ update.builds[0].package.unstable_karma != 0,
}
if update.status == 'testing':
flash("Editing this update will move it back to a pending state.")
commit 183be020170763ba98286dd5808805bc3ec6f33b
Author: Luke Macken <lmacken(a)redhat.com>
Date: Fri Aug 8 14:06:21 2008 -0400
Re-enable the inheritance widget, but hide it in the template.
Also, rename 'type' to 'type_' in our NewUpdateForm
diff --git a/bodhi/templates/new.kid b/bodhi/templates/new.kid
index c045bd3..d286591 100644
--- a/bodhi/templates/new.kid
+++ b/bodhi/templates/new.kid
@@ -68,7 +68,7 @@
<table border="0" cellspacing="0"
cellpadding="0">
<tr py:for="i, field in enumerate(fields)">
<td class="title">
- <span py:if="i == 5">
+ <span py:if="i in (1, 6)">
<?python continue ?>
</span>
<label class="fieldlabel"
diff --git a/bodhi/widgets.py b/bodhi/widgets.py
index 37e6124..2712dc4 100644
--- a/bodhi/widgets.py
+++ b/bodhi/widgets.py
@@ -83,10 +83,10 @@ class NewUpdateForm(Form):
search_param='name', result_name='pkgs',
template='bodhi.templates.packagefield',
validator=AutoCompleteValidator()),
- #CheckBox('inheritance', label='Follow Build inheritance',
- # default=False, attrs={'title' : 'Build Inheritance -
'
- # 'TODO'}),
- SingleSelectField('type', options=update_types,
+ CheckBox('inheritance', label='Follow Build inheritance',
+ default=False, attrs={'title' : 'Build Inheritance -
'
+ 'TODO'}),
+ SingleSelectField('type_', label='Type',
options=update_types,
validator=validators.OneOf(update_types)),
SingleSelectField('request', options=request_types,
validator=validators.OneOf(request_types +
@@ -114,7 +114,8 @@ class NewUpdateForm(Form):
'after installing this '
'update'}),
CheckBox(name='autokarma', label='Enable karma automatism',
- default=True, attrs={'onclick':
+ default=True, validator=validators.Bool(),
+ attrs={'onclick':
'$("#form_stable_karma").attr("disabled",
!$("#form_stable_karma").attr("disabled"));'
'$("#form_unstable_karma").attr("disabled",
!$("#form_unstable_karma").attr("disabled"));',
'title': 'Karma Automatism - Enable update request '
commit ad330ae9678979144252803bdead26d25a11665d
Author: Luke Macken <lmacken(a)redhat.com>
Date: Fri Aug 8 11:34:13 2008 -0400
Update our fake buildsystem to work with some newer test cases
diff --git a/bodhi/buildsys.py b/bodhi/buildsys.py
index e6e3f83..c8a25ff 100644
--- a/bodhi/buildsys.py
+++ b/bodhi/buildsys.py
@@ -101,7 +101,6 @@ class DevBuildsys(Buildsystem):
'task_id': 127621,
'version': '1.0.2.2'}
-
def listBuildRPMs(self, *args, **kw):
return [{'arch': 'src',
'build_id': 6475,
@@ -146,7 +145,8 @@ class DevBuildsys(Buildsystem):
'dist-f8', 'dist-f8-updates',
'dist-f8-updates-testing',
'dist-fc8', 'dist-fc8-updates',
'dist-fc8-updates-testing',
'dist-f8-updates-candidate',
- 'dist-f9', 'dist-f9-updates',
'dist-f9-updates-testing'):
+ 'dist-f9', 'dist-f9-updates',
'dist-f9-updates-testing',
+ 'dist-f9-updates-candidate'):
raise koji.GenericError
return [self.getBuild(),]
commit ff86ceadcff9f2cb9f9473116ac98ddd7ccdbd63
Author: Luke Macken <lmacken(a)redhat.com>
Date: Fri Aug 8 11:33:35 2008 -0400
Add python-devel to BuildRequires and Require python-decorator
diff --git a/bodhi.spec b/bodhi.spec
index 396477c..e72bc40 100644
--- a/bodhi.spec
+++ b/bodhi.spec
@@ -14,6 +14,7 @@ BuildRoot:
%{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch
BuildRequires: python-setuptools-devel
+BuildRequires: python-devel
BuildRequires: TurboGears
%description
@@ -50,6 +51,7 @@ Requires: python-imaging
Requires: python-crypto
Requires: python-turboflot
Requires: python-tgcaptcha
+Requires: python-decorator
Requires: mod_wsgi