11 commits - bodhi/controllers.py bodhi/metadata.py bodhi/metrics.py bodhi/rss.py bodhi/templates
by Luke Macken
bodhi/controllers.py | 44 ++++++++++++++-------
bodhi/metadata.py | 2
bodhi/metrics.py | 3 +
bodhi/rss.py | 90 +++++++++++++++++++++++++++++++++++++++----
bodhi/templates/critpath.kid | 11 ++++-
bodhi/templates/pkg.kid | 29 +++++++++++--
bodhi/templates/testing.kid | 3 +
bodhi/templates/user.kid | 11 +++++
8 files changed, 167 insertions(+), 26 deletions(-)
New commits:
commit 3181865245f8fe36b82b412043dc5d0cc4ae58c3
Merge: 9aa3b9a... 3c6d2b6...
Author: Luke Macken <lmacken(a)redhat.com>
Date: Thu Jul 15 13:02:07 2010 -0400
Merge branch 'master' of git+ssh://git.fedorahosted.org/git/bodhi
commit 9aa3b9aff1f542cc7b1cefd801e2790eabd3c8a8
Author: Luke Macken <lmacken(a)redhat.com>
Date: Thu Jul 15 13:01:23 2010 -0400
Add links to our critpath tables from the testing and critpath templates
diff --git a/bodhi/templates/critpath.kid b/bodhi/templates/critpath.kid
index 8d1a7d2..4a42506 100644
--- a/bodhi/templates/critpath.kid
+++ b/bodhi/templates/critpath.kid
@@ -8,7 +8,16 @@
</head>
<body>
- <b>${title}</b>
+ <b>${title}</b> <a href="${tg.url('/rss/rss2.0?critpath=True%s' % (release_name and '&release=%s' % release_name or ''))}"><img src="${tg.url('/static/images/rss.png')}" border="0"/></a>
+ <ul>
+ <li py:if="release_name"><a href="${tg.url('/critpath?release=' + release_name)}">Show all critical path updates for ${release_name}</a></li>
+ <!--
+ <li py:if="not release_name"><a href="${tg.url('/critpath')}">Show all critical path updates</a></li>
+ <li py:if="unapproved">
+ <a href="${tg.url('/critpath')}">Show all critical path updates</a>
+ </li>
+ -->
+ </ul>
<div class="list">
<span py:for="page in tg.paginate.pages">
<a py:if="page != tg.paginate.current_page"
diff --git a/bodhi/templates/testing.kid b/bodhi/templates/testing.kid
index 8f63743..36dad0a 100644
--- a/bodhi/templates/testing.kid
+++ b/bodhi/templates/testing.kid
@@ -9,6 +9,9 @@
<body>
<b>${title}</b>
+ <ul>
+ <li><a href="${tg.url('/critpath?untested=True&release=' + updates[0].release.name)}">Show unapproved ${updates[0].release.name} Critical Path updates</a> <a href="${tg.url('/rss/rss2.0?critpath=True&release=' + updates[0].release.name)}"><img src="${tg.url('/static/images/rss.png')}" border="0"/></a></li>
+ </ul>
<div class="list">
<span py:for="page in tg.paginate.pages">
<a py:if="page != tg.paginate.current_page"
commit 6baf75eee21a5f69346940cedfa715b9e5b449d1
Author: Luke Macken <lmacken(a)redhat.com>
Date: Thu Jul 15 13:01:05 2010 -0400
Have our RSS FeeController spit out critpath feeds
diff --git a/bodhi/rss.py b/bodhi/rss.py
index 1d19705..fb4849e 100644
--- a/bodhi/rss.py
+++ b/bodhi/rss.py
@@ -26,15 +26,19 @@ class Feed(FeedController):
def get_feed_data(self, release=None, type=None, status=None,
comments=False, submitter=None, builds=None,
- user=None, package=None, critpath=False, *args, **kw):
+ user=None, package=None, critpath=False,
+ unapproved=None, *args, **kw):
query = []
entries = []
date = lambda update: update.date_pushed
order = PackageUpdate.q.date_pushed
title = []
+ critpath = critpath in (True, 'True', 'true')
+ unapproved = unapproved in (True, 'True', 'true')
if critpath:
- return self.get_critpath_updates(release=release)
+ return self.get_critpath_updates(release=release,
+ unapproved=unapproved)
if comments:
return self.get_latest_comments(user=user)
if package:
@@ -149,25 +153,31 @@ class Feed(FeedController):
entries = entries
)
- def get_critpath_updates(self, release=None):
+ def get_critpath_updates(self, release=None, unapproved=None):
+ i = 0
entries = []
base = config.get('base_address')
title = 'Latest Critical Path Updates'
+ query = [PackageUpdate.q.status != 'obsolete']
if release:
release = Release.byName(release)
releases = [release]
title = title + ' for %s' % release.long_name
else:
releases = Release.select()
- i = 0
+ if unapproved:
+ query.append(PackageUpdate.q.status != 'stable')
for update in PackageUpdate.select(
- AND(PackageUpdate.q.status != 'obsolete',
- OR(*[PackageUpdate.q.releaseID == release.id
- for release in releases])),
- orderBy=PackageUpdate.q.date_submitted):
+ AND(OR(*[PackageUpdate.q.releaseID == release.id
+ for release in releases]),
+ *query),
+ orderBy=PackageUpdate.q.date_submitted).reversed():
if i >= 20:
break
if update.critpath:
+ if unapproved:
+ if update.critpath_approved:
+ continue
entries.append({
'id' : base + url(update.get_url()),
'summary' : update.notes,
commit 6e9503dbcac2ddf4665639b4c1e4d77bfa9ad85d
Author: Luke Macken <lmacken(a)redhat.com>
Date: Thu Jul 15 13:00:37 2010 -0400
Tweak our /critpath controller method a little
diff --git a/bodhi/controllers.py b/bodhi/controllers.py
index 730c7ea..ad644c0 100644
--- a/bodhi/controllers.py
+++ b/bodhi/controllers.py
@@ -1319,26 +1319,40 @@ class Root(controllers.RootController):
return builds
@expose(template='bodhi.templates.critpath', allow_json=True)
- @validate(validators={'untested': validators.StringBool()})
+ @validate(validators={
+ 'untested': validators.StringBool(),
+ 'unapproved': validators.StringBool(),
+ })
@paginate('updates', limit=1000, max_limit=1000)
- def critpath(self, untested=False, release=None, *args, **kw):
+ def critpath(self, untested=False, unapproved=False, release=None, *args,
+ **kw):
updates = []
+ title = '%d %sCritical Path Updates'
+ query = [PackageUpdate.q.status != 'obsolete']
+ release_name = None
if release and release != u'None':
- releases = [Release.byName(release)]
+ release = Release.byName(release)
+ releases = [release]
+ release_name = release.name
+ title = title + ' for ' + release.long_name
else:
releases = Release.select()
+ if untested or unapproved:
+ query.append(PackageUpdate.q.status != 'stable')
for update in PackageUpdate.select(
- AND(PackageUpdate.q.status != 'stable',
- PackageUpdate.q.status != 'obsolete',
- OR(*[PackageUpdate.q.releaseID == release.id
- for release in releases]))):
+ AND(OR(*[PackageUpdate.q.releaseID == release.id
+ for release in releases]),
+ *query),
+ orderBy=PackageUpdate.q.date_submitted).reversed():
if update.critpath:
- if untested:
+ if untested or unapproved:
if not update.critpath_approved:
updates.append(update)
else:
updates.append(update)
num_items = len(updates)
return dict(updates=updates, num_items=num_items,
- title='%d %sCritical Path Updates' % (num_items,
- untested and 'Untested ' or ''))
+ title=title % (num_items, (untested or unapproved) and
+ 'Unapproved ' or ''),
+ unapproved=unapproved or untested,
+ release_name=release_name)
commit 16ad8ab7ba2f63eaac6cd4d59debfa9f53d4c7ad
Author: Luke Macken <lmacken(a)redhat.com>
Date: Thu Jul 15 12:59:15 2010 -0400
Track the number of critpath updates in our metrics generator
diff --git a/bodhi/metrics.py b/bodhi/metrics.py
index 09552ea..a93df98 100644
--- a/bodhi/metrics.py
+++ b/bodhi/metrics.py
@@ -390,12 +390,15 @@ class UpdateTypeMetric(Metric):
'num_bugfix': 0,
'num_enhancement': 0,
'num_newpackage': 0,
+ 'num_critpath': 0,
}
def update(self, update):
self.release['num_%s' % update.status] += 1
if update.pushed:
self.release['num_%s' % update.type] += 1
+ if update.critpath:
+ self.release['num_critpath'] += 1
def done(self):
pass
commit 40f7e65264dad4ac6b520811a74d7e5170bfaaf4
Author: Luke Macken <lmacken(a)redhat.com>
Date: Wed Jul 14 19:15:27 2010 -0400
Add RSS feeds for critpath updates, with the ability to query by release
diff --git a/bodhi/rss.py b/bodhi/rss.py
index c444d96..1d19705 100644
--- a/bodhi/rss.py
+++ b/bodhi/rss.py
@@ -16,7 +16,7 @@ import logging
from turbogears.feed import FeedController
from turbogears import config, url
from sqlobject import SQLObjectNotFound
-from sqlobject.sqlbuilder import AND
+from sqlobject.sqlbuilder import AND, OR
from bodhi.model import Release, PackageUpdate, Comment, Package
@@ -26,13 +26,15 @@ class Feed(FeedController):
def get_feed_data(self, release=None, type=None, status=None,
comments=False, submitter=None, builds=None,
- user=None, package=None, *args, **kw):
+ user=None, package=None, critpath=False, *args, **kw):
query = []
entries = []
date = lambda update: update.date_pushed
order = PackageUpdate.q.date_pushed
title = []
+ if critpath:
+ return self.get_critpath_updates(release=release)
if comments:
return self.get_latest_comments(user=user)
if package:
@@ -146,3 +148,38 @@ class Feed(FeedController):
link = config.get('base_address') + url('/'),
entries = entries
)
+
+ def get_critpath_updates(self, release=None):
+ entries = []
+ base = config.get('base_address')
+ title = 'Latest Critical Path Updates'
+ if release:
+ release = Release.byName(release)
+ releases = [release]
+ title = title + ' for %s' % release.long_name
+ else:
+ releases = Release.select()
+ i = 0
+ for update in PackageUpdate.select(
+ AND(PackageUpdate.q.status != 'obsolete',
+ OR(*[PackageUpdate.q.releaseID == release.id
+ for release in releases])),
+ orderBy=PackageUpdate.q.date_submitted):
+ if i >= 20:
+ break
+ if update.critpath:
+ entries.append({
+ 'id' : base + url(update.get_url()),
+ 'summary' : update.notes,
+ 'link' : base + url(update.get_url()),
+ 'published' : update.date_submitted,
+ 'updated' : update.date_submitted,
+ 'title' : update.title,
+ })
+ i += 1
+ return dict(
+ title = title,
+ subtitle = "",
+ link = config.get('base_address') + url('/'),
+ entries = entries
+ )
commit bb16e3032a9dbce07f6ab04769b8b4caac3901a4
Author: Luke Macken <lmacken(a)redhat.com>
Date: Wed Jul 14 19:09:00 2010 -0400
Allow for /comments?user=$USERNAME web-based queries
diff --git a/bodhi/controllers.py b/bodhi/controllers.py
index d26ffc6..730c7ea 100644
--- a/bodhi/controllers.py
+++ b/bodhi/controllers.py
@@ -1207,9 +1207,13 @@ class Root(controllers.RootController):
@expose(template='bodhi.templates.comments')
@paginate('comments', limit=20, max_limit=20)
- def comments(self):
- data = Comment.select(Comment.q.author != 'bodhi',
- orderBy=Comment.q.timestamp).reversed()
+ def comments(self, user=None):
+ if user:
+ data = Comment.select(Comment.q.author == user,
+ orderBy=Comment.q.timestamp).reversed()
+ else:
+ data = Comment.select(Comment.q.author != 'bodhi',
+ orderBy=Comment.q.timestamp).reversed()
return dict(comments=data, num_items=data.count())
@expose(template='bodhi.templates.confirmation')
commit 66d235560529b0a50f80deb214dde35cf0a380ee
Author: Luke Macken <lmacken(a)redhat.com>
Date: Wed Jul 14 18:18:24 2010 -0400
Improve our package links
diff --git a/bodhi/templates/pkg.kid b/bodhi/templates/pkg.kid
index 18fad91..5540687 100644
--- a/bodhi/templates/pkg.kid
+++ b/bodhi/templates/pkg.kid
@@ -13,10 +13,31 @@
<blockquote>
<h1>${pkg.name}</h1>
- <ul>
- <li><a href="${tg.url('http://bugz.fedoraproject.org/%s' % (pkg.name,))}">Open Bugs</a></li>
- <li><a href="${tg.url('https://admin.fedoraproject.org/pkgdb/acls/name/%s' % (pkg.name,))}">Package Database</a></li>
- <li><a href="http://koji.fedoraproject.org/koji/search?terms=${pkg.name}&type=pack...">Koji Buildsystem</a></li>
+ <ul type="none">
+ <li>
+ <img src="${tg.url('/static/images/rss.png')}" border="0"/>
+ <a href="${tg.url('/rss/rss2.0?package=%s' % pkg.name)}">RSS Feed</a>
+ </li>
+ <li>
+ <img src="https://admin.fedoraproject.org/community/images/16_bodhi.png"/>
+ <a href="https://admin.fedoraproject.org/community/?package=${pkg.name}#package_ma...">Fedora Community</a>
+ </li>
+ <li>
+ <img src="https://admin.fedoraproject.org/community/images/16_bugs.png"/>
+ <a href="${tg.url('http://bugz.fedoraproject.org/%s' % (pkg.name,))}">Open Bugs</a>
+ </li>
+ <li>
+ <img src="https://fedoraproject.org/static/css/../images/icons/fedora-infra-icon_pk..."/>
+ <a href="${tg.url('https://admin.fedoraproject.org/pkgdb/acls/name/%s' % (pkg.name,))}">Package Database</a>
+ </li>
+ <li>
+ <img src="https://fedoraproject.org/static/images/icons/fedora-infra-icon_koji.png"/>
+ <a href="http://koji.fedoraproject.org/koji/search?terms=${pkg.name}&type=pack...">Koji Buildsystem</a>
+ </li>
+ <li>
+ <img src="https://fedoraproject.org/static/css/../images/icons/fedora-infra-icon_so..."/>
+ <a href="http://cvs.fedoraproject.org/viewcvs/rpms/${pkg.name}">Package Source</a>
+ </li>
</ul>
</blockquote>
commit 79b3a8644a6c88ce28115a860daacbdd2d8d7a0f
Author: Luke Macken <lmacken(a)redhat.com>
Date: Wed Jul 14 18:17:29 2010 -0400
Allow for indivudual RSS feeds of updates for each package
diff --git a/bodhi/rss.py b/bodhi/rss.py
index ed3f805..c444d96 100644
--- a/bodhi/rss.py
+++ b/bodhi/rss.py
@@ -18,7 +18,7 @@ from turbogears import config, url
from sqlobject import SQLObjectNotFound
from sqlobject.sqlbuilder import AND
-from bodhi.model import Release, PackageUpdate, Comment
+from bodhi.model import Release, PackageUpdate, Comment, Package
log = logging.getLogger(__name__)
@@ -26,7 +26,7 @@ class Feed(FeedController):
def get_feed_data(self, release=None, type=None, status=None,
comments=False, submitter=None, builds=None,
- user=None, *args, **kw):
+ user=None, package=None, *args, **kw):
query = []
entries = []
date = lambda update: update.date_pushed
@@ -35,6 +35,8 @@ class Feed(FeedController):
if comments:
return self.get_latest_comments(user=user)
+ if package:
+ return self.get_package_updates(package)
if release:
try:
rel = Release.byName(release.upper())
@@ -122,3 +124,25 @@ class Feed(FeedController):
link = config.get('base_address') + url('/'),
entries = entries,
)
+
+ def get_package_updates(self, package):
+ entries = []
+ pkg = Package.byName(package)
+ base = config.get('base_address')
+ for i, update in enumerate(pkg.updates()):
+ if i >= 20:
+ break
+ entries.append({
+ 'id' : base + url(update.get_url()),
+ 'summary' : update.notes,
+ 'link' : base + url(update.get_url()),
+ 'published' : update.date_submitted,
+ 'updated' : update.date_submitted,
+ 'title' : update.title,
+ })
+ return dict(
+ title = 'Latest Updates for %s' % package,
+ subtitle = "",
+ link = config.get('base_address') + url('/'),
+ entries = entries
+ )
commit a4953930dec4d1020027a7a110ca99ce435953fd
Author: Luke Macken <lmacken(a)redhat.com>
Date: Wed Jul 14 18:15:50 2010 -0400
Add ability to our FeedController to query comments by user (#445)
diff --git a/bodhi/rss.py b/bodhi/rss.py
index decea86..ed3f805 100644
--- a/bodhi/rss.py
+++ b/bodhi/rss.py
@@ -25,7 +25,8 @@ log = logging.getLogger(__name__)
class Feed(FeedController):
def get_feed_data(self, release=None, type=None, status=None,
- comments=False, submitter=None, builds=None, *args, **kw):
+ comments=False, submitter=None, builds=None,
+ user=None, *args, **kw):
query = []
entries = []
date = lambda update: update.date_pushed
@@ -33,7 +34,7 @@ class Feed(FeedController):
title = []
if comments:
- return self.get_latest_comments()
+ return self.get_latest_comments(user=user)
if release:
try:
rel = Release.byName(release.upper())
@@ -95,10 +96,14 @@ class Feed(FeedController):
entries = entries
)
- def get_latest_comments(self):
+ def get_latest_comments(self, user=None):
entries = []
- comments = Comment.select(Comment.q.author != 'bodhi',
- orderBy=Comment.q.timestamp).reversed()[:20]
+ if user:
+ comments = Comment.select(Comment.q.author == user,
+ orderBy=Comment.q.timestamp).reversed()[:20]
+ else:
+ comments = Comment.select(Comment.q.author != 'bodhi',
+ orderBy=Comment.q.timestamp).reversed()[:20]
for comment in comments:
entries.append({
'id' : config.get('base_address') + \
diff --git a/bodhi/templates/user.kid b/bodhi/templates/user.kid
index 2244e3c..1945217 100644
--- a/bodhi/templates/user.kid
+++ b/bodhi/templates/user.kid
@@ -18,6 +18,17 @@ from bodhi.model import Release, PackageUpdate, Releases
<body>
<b>${"%s's %d updates" % (username, num_items)}</b>
+
+ <ul type="none">
+ <li>
+ <img src="${tg.url('/static/images/rss.png')}" border="0"/>
+ <a href="${tg.url('/rss/rss2.0?submitter=%s' % username)}">RSS Feed of Updates</a>
+ </li>
+ <li>
+ <img src="${tg.url('/static/images/rss.png')}" border="0"/>
+ <a href="${tg.url('/rss/rss2.0?comments=True&user=%s' % username)}">RSS Feed of Comments</a>
+ </li>
+ </ul>
<div py:if="num_items" class="list">
<span py:for="page in tg.paginate.pages">
<a py:if="page != tg.paginate.current_page"
commit 5d4233530144b6240ed05236093b0b2502ab268b
Author: Luke Macken <lmacken(a)redhat.com>
Date: Wed Jul 14 18:03:32 2010 -0400
new-style classes are good
diff --git a/bodhi/metadata.py b/bodhi/metadata.py
index b996e71..465ada0 100644
--- a/bodhi/metadata.py
+++ b/bodhi/metadata.py
@@ -33,7 +33,7 @@ from yum.update_md import UpdateMetadata
log = logging.getLogger(__name__)
-class ExtendedMetadata:
+class ExtendedMetadata(object):
def __init__(self, repo, cacheduinfo=None):
self.tag = get_repo_tag(repo)
13 years, 10 months
4 commits - bodhi/controllers.py bodhi/templates bodhi/tests bodhi/tools bodhi/util.py
by Luke Macken
bodhi/controllers.py | 8 ++++----
bodhi/templates/testing.kid | 2 +-
bodhi/tests/test_controllers.py | 29 +++++++++++++++++++++++++++++
bodhi/tools/client.py | 24 ++++++++++++------------
bodhi/util.py | 12 ++++++++++++
5 files changed, 58 insertions(+), 17 deletions(-)
New commits:
commit 3c6d2b61d714dc158286d70e01b6e1518310613b
Author: Luke Macken <lmacken(a)redhat.com>
Date: Tue Jul 13 18:18:54 2010 -0400
Add a unit test to ensure we don't allow updates with
multiple versions of the same package (#264). This test currently fails..
diff --git a/bodhi/tests/test_controllers.py b/bodhi/tests/test_controllers.py
index ed06a03..8151317 100644
--- a/bodhi/tests/test_controllers.py
+++ b/bodhi/tests/test_controllers.py
@@ -2215,3 +2215,32 @@ class TestControllers(testutil.DBTest):
self.save_update(params, session)
update = PackageUpdate.byTitle(params['builds'])
assert update.request == 'stable', update.request
+
+ def test_duplicate_packages(self):
+ """
+ Ensure that bodhi disallows submitting an update with two versions
+ of the same package (#264).
+ """
+ session = login()
+ create_release()
+ params = {
+ 'builds' : 'TurboGears-1.0.8-1.fc7,TurboGears-1.0.8-2.fc7',
+ 'release' : 'Fedora 7',
+ 'type_' : 'bugfix',
+ 'bugs' : '',
+ 'notes' : 'foobar',
+ 'request' : 'Stable',
+ 'suggest_reboot' : True,
+ 'autokarma' : True,
+ 'stable_karma' : 5,
+ 'unstable_karma' : -5
+ }
+ testutil.capture_log(['bodhi.controller', 'bodhi.util'])
+ self.save_update(params, session)
+ log = testutil.get_log()
+ assert "You cannot submit an update containing multiple versions of TurboGears" in log, log
+ try:
+ up = PackageUpdate.byTitle(params['builds'])
+ assert False, "Update with duplicate packages was saved!"
+ except SQLObjectNotFound, e:
+ pass
commit 44f5d5a0ab0e6a638ac0b9722d773f388057a8e8
Author: Till Maas <opensource(a)till.name>
Date: Sun Jul 4 10:15:12 2010 +0200
print query results to stdout instead of stderr
This allows to use the information one is interested in other scripts
using a pipe, e.g. to get a list of critpath builds that are not yet
approved, one can use:
./client.py 2>/dev/null --critpath --untested --release F13 | cut -d" "
-f 2
diff --git a/bodhi/tools/client.py b/bodhi/tools/client.py
index c796abb..fb058b2 100755
--- a/bodhi/tools/client.py
+++ b/bodhi/tools/client.py
@@ -157,7 +157,7 @@ def main():
log.info(data['tg_flash'])
if 'updates' in data:
for update in data['updates']:
- log.info(bodhi.update_str(update))
+ print(bodhi.update_str(update).encode("UTF-8"))
else:
verify_args(args)
@@ -177,7 +177,7 @@ def main():
log.info(data['tg_flash'])
if 'updates' in data:
for update in data['updates']:
- log.info(bodhi.update_str(update))
+ print(bodhi.update_str(update).encode("UTF-8"))
elif opts.edit:
verify_args(args)
@@ -187,14 +187,14 @@ def main():
request=opts.request)
log.info(data['tg_flash'])
if data.has_key('update'):
- log.info(bodhi.update_str(data['update']))
+ print(bodhi.update_str(data['update']).encode("UTF-8"))
elif opts.request:
verify_args(args)
data = bodhi.request(update=args[0], request=opts.request)
log.info(data['tg_flash'])
if data.has_key('update'):
- log.info(bodhi.update_str(data['update']))
+ print(bodhi.update_str(data['update']).encode("UTF-8"))
elif opts.delete:
verify_args(args)
@@ -283,7 +283,7 @@ def main():
if opts.type_:
if not update['type'] == opts.type_:
continue
- log.info(bodhi.update_str(update, minimal=opts.verbose))
+ print(bodhi.update_str(update, minimal=opts.verbose).encode("UTF-8"))
elif opts.candidates:
for build in bodhi.candidates():
@@ -298,7 +298,7 @@ def main():
if data['tg_flash']:
log.info(data['tg_flash'])
if data.has_key('update'):
- log.info(bodhi.update_str(data['update']))
+ print(bodhi.update_str(data['update']).encode("UTF-8"))
elif opts.latest:
data = bodhi.latest_builds(package=opts.latest)
@@ -310,7 +310,7 @@ def main():
data.sort(cmp=lambda x, y: cmp(x[0].split('-')[1],
y[0].split('-')[1]))
for dist, build in data:
- log.info('%26s %s' % (dist, build))
+ print('%26s %s' % (dist, build))
elif opts.critpath:
log.info("Getting a list of critical path updates...")
@@ -321,14 +321,14 @@ def main():
if data['tg_flash']:
log.info(data['tg_flash'])
for update in data['updates']:
- log.info(bodhi.update_str(update, minimal=not opts.verbose))
+ print(bodhi.update_str(update, minimal=not opts.verbose).encode("UTF-8"))
log.info("%d pending critical path updates found" % (
len(data['updates'])))
elif opts.mine and not args:
data = bodhi.query(mine=opts.mine)
for update in data['updates']:
- log.info(bodhi.update_str(update, minimal=True))
+ print(bodhi.update_str(update, minimal=True).encode("UTF-8"))
log.debug(data)
log.info(data['title'])
@@ -340,12 +340,12 @@ def main():
sys.exit(-1)
if data['num_items'] > 1:
for update in data['updates']:
- log.info(bodhi.update_str(update, minimal=True))
+ print(bodhi.update_str(update, minimal=True).encode("UTF-8"))
log.info("%d updates found (%d shown)" % (
data['num_items'], len(data['updates'])))
else:
for update in data['updates']:
- log.info(bodhi.update_str(update))
+ print(bodhi.update_str(update).encode("UTF-8"))
if args:
for arg in args:
data = bodhi.query(package=arg, release=opts.release,
@@ -369,7 +369,7 @@ def main():
log.info("%d possible updates were found" %
len(data['updates']))
for update in data['updates']:
- log.info(bodhi.update_str(update, minimal=True))
+ print(bodhi.update_str(update, minimal=True).encode("UTF-8"))
else:
update = data['updates'][0]
log.info("Downloading %s..." % update['title'])
commit 902da8129903a0390a8f591e1ab7b3dedf10a776
Author: Till Maas <opensource(a)till.name>
Date: Tue Jul 13 22:43:03 2010 +0200
link to submitter and release on home page
diff --git a/bodhi/controllers.py b/bodhi/controllers.py
index d26ffc6..bdbfd3e 100644
--- a/bodhi/controllers.py
+++ b/bodhi/controllers.py
@@ -43,7 +43,7 @@ from fedora.tg.controllers import logout as fc_logout
from bodhi import buildsys, util
from bodhi.rss import Feed
from bodhi.new import NewUpdateController, update_form
-from bodhi.util import make_update_link, make_type_icon, make_karma_icon, link
+from bodhi.util import make_update_link, make_type_icon, make_karma_icon, link, make_release_link, make_submitter_link
from bodhi.util import flash_log, get_pkg_pushers, make_request_icon
from bodhi.util import json_redirect, url, get_nvr
from bodhi.admin import AdminController
@@ -115,12 +115,12 @@ class Root(controllers.RootController):
).reversed(),
[
('Update', make_update_link),
- ('Release', lambda row: row.release.long_name),
+ ('Release', make_release_link),
('Status', lambda row: row.status),
('Type', make_type_icon),
('Request', make_request_icon),
('Karma', make_karma_icon),
- ('Submitter', lambda row: row.submitter),
+ ('Submitter', make_submitter_link),
('Age', lambda row: row.get_submitted_age()),
]
]
@@ -133,7 +133,7 @@ class Root(controllers.RootController):
).reversed(),
[
('Update', make_update_link),
- ('Release', lambda row: row.release.long_name),
+ ('Release', make_release_link),
('Status', lambda row: row.status),
('Type', make_type_icon),
('Request', make_request_icon),
diff --git a/bodhi/util.py b/bodhi/util.py
index 7c1de11..ae70da6 100644
--- a/bodhi/util.py
+++ b/bodhi/util.py
@@ -167,6 +167,18 @@ def make_karma_icon(update):
karma = 0
return Element('img', src=url('/static/images/karma%d.png' % karma))
+def make_link(text, href):
+ link = Element('a', href=url(href))
+ link.text = text
+ return link
+
+def make_release_link(update):
+ return make_link(update.release.long_name, '/' + update.release.name)
+
+def make_submitter_link(update):
+ return make_link(update.submitter, '/user/' + update.submitter)
+
+
def get_age(date):
age = datetime.utcnow() - date
if age.days == 0:
commit 0dc7352d1b67d1545a61912ec0c5e6dea365501f
Author: Till Maas <opensource(a)till.name>
Date: Tue Jul 13 22:16:22 2010 +0200
Link to submitter page in testing updates list
diff --git a/bodhi/templates/testing.kid b/bodhi/templates/testing.kid
index 8f63743..8cd6f57 100644
--- a/bodhi/templates/testing.kid
+++ b/bodhi/templates/testing.kid
@@ -58,7 +58,7 @@
<img src="${tg.url('/static/images/karma%d.png' % karma)}" align="top"/> <b>${update.karma}</b>
</td>
<td class="list">
- ${update.submitter}
+ <a href="${tg.url('/user/' + update.submitter)}">${update.submitter}</a>
</td>
<td class="list">
${update.date_pushed}
13 years, 10 months
bodhi.egg-info/PKG-INFO bodhi.egg-info/requires.txt bodhi/release.py bodhi.spec
by Luke Macken
bodhi.egg-info/PKG-INFO | 2 +-
bodhi.egg-info/requires.txt | 3 ++-
bodhi.spec | 5 ++++-
bodhi/release.py | 2 +-
4 files changed, 8 insertions(+), 4 deletions(-)
New commits:
commit 0eb028d58b1e9d2ccac509c90f92c4255e01964e
Author: Luke Macken <lmacken(a)redhat.com>
Date: Mon Jul 12 16:18:34 2010 -0400
Prep for 0.7.6
diff --git a/bodhi.egg-info/PKG-INFO b/bodhi.egg-info/PKG-INFO
index e0c55ca..3395b9a 100644
--- a/bodhi.egg-info/PKG-INFO
+++ b/bodhi.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: bodhi
-Version: 0.7.5
+Version: 0.7.6
Summary: Bodhi is a modular web-system that facilitates the process of publishing updates for a Fedora-based software distribution
Home-page: https://fedorahosted.org/bodhi
Author: Luke Macken
diff --git a/bodhi.egg-info/requires.txt b/bodhi.egg-info/requires.txt
index 053d119..86dd549 100644
--- a/bodhi.egg-info/requires.txt
+++ b/bodhi.egg-info/requires.txt
@@ -1,4 +1,5 @@
TurboGears >= 1.0
TurboMail
python_fedora
-markdown
\ No newline at end of file
+markdown
+hashlib
\ No newline at end of file
diff --git a/bodhi.spec b/bodhi.spec
index bf400ad..101142f 100644
--- a/bodhi.spec
+++ b/bodhi.spec
@@ -2,7 +2,7 @@
%{!?pyver: %define pyver %(%{__python} -c "import sys ; print sys.version[:3]")}
Name: bodhi
-Version: 0.7.5
+Version: 0.7.6
Release: 1%{?dist}
Summary: A modular framework that facilitates publishing software updates
Group: Applications/Internet
@@ -118,6 +118,9 @@ rm -rf bodhi/tests bodhi/tools/test-bodhi.py
%changelog
+* Mon Jul 12 2010 Luke Macken <lmacken(a)redhat.com> - 0.7.6-1
+- 0.7.6 release
+
* Tue Jun 29 2010 Luke Macken <lmacken(a)redhat.com> - 0.7.5-1
- 0.7.5 release
diff --git a/bodhi/release.py b/bodhi/release.py
index 1313e39..3325cfc 100644
--- a/bodhi/release.py
+++ b/bodhi/release.py
@@ -1,4 +1,4 @@
-VERSION = '0.7.5'
+VERSION = '0.7.6'
NAME = 'bodhi'
DESCRIPTION = 'Bodhi is a modular web-system that facilitates the process of publishing updates for a Fedora-based software distribution'
AUTHOR = 'Luke Macken'
13 years, 10 months
bodhi/config bodhi/new.py
by Luke Macken
bodhi/config/app.cfg | 3 +++
bodhi/new.py | 3 +++
2 files changed, 6 insertions(+)
New commits:
commit ceeece2163a123ca596fb6c5680878c998de1411
Author: Luke Macken <lmacken(a)redhat.com>
Date: Mon Jul 12 16:11:53 2010 -0400
Add the ability to flash messages above our New Update form
diff --git a/bodhi/config/app.cfg b/bodhi/config/app.cfg
index b67bbb0..d85c9d7 100644
--- a/bodhi/config/app.cfg
+++ b/bodhi/config/app.cfg
@@ -13,6 +13,9 @@
# A notice to flash on the front page
frontpage_notice = ''
+# A notice to flash on the New Update page
+newupdate_notice = ''
+
##
## Mash settings
##
diff --git a/bodhi/new.py b/bodhi/new.py
index 02369dd..a628032 100644
--- a/bodhi/new.py
+++ b/bodhi/new.py
@@ -39,6 +39,9 @@ class NewUpdateController(controllers.Controller):
@identity.require(identity.not_anonymous())
@expose(template="bodhi.templates.form")
def index(self, *args, **kw):
+ notice = config.get('newupdate_notice')
+ if notice:
+ flash(notice)
self.build_pkglist()
return dict(form=update_form, values=kw, action=url("/save"),
title='New Update Form')
13 years, 10 months
bodhi/config bodhi/controllers.py
by Luke Macken
bodhi/config/app.cfg | 3 +++
bodhi/controllers.py | 4 ++++
2 files changed, 7 insertions(+)
New commits:
commit 7b243fb7612e1a6aa7a8015c9038f80c2b50f6df
Author: Luke Macken <lmacken(a)redhat.com>
Date: Mon Jul 12 16:08:45 2010 -0400
Add the ability to flash messages on the front page using our config file
diff --git a/bodhi/config/app.cfg b/bodhi/config/app.cfg
index 87e4c6f..b67bbb0 100644
--- a/bodhi/config/app.cfg
+++ b/bodhi/config/app.cfg
@@ -10,6 +10,9 @@
[global]
+# A notice to flash on the front page
+frontpage_notice = ''
+
##
## Mash settings
##
diff --git a/bodhi/controllers.py b/bodhi/controllers.py
index 0627ebf..d26ffc6 100644
--- a/bodhi/controllers.py
+++ b/bodhi/controllers.py
@@ -88,6 +88,10 @@ class Root(controllers.RootController):
RESULTS, FIELDS, GRID = range(3)
updates = None
+ notice = config.get('frontpage_notice')
+ if notice:
+ flash(notice)
+
# { 'Title' : [SelectResults, [(row, row_callback),]], ... }
grids = {
'comments' : [
13 years, 10 months
2 commits - bodhi/buildsys.py bodhi/model.py bodhi/tests
by Luke Macken
bodhi/buildsys.py | 31 ++++++++++++++++++++++++++++++-
bodhi/model.py | 4 ++++
bodhi/tests/test_controllers.py | 18 +++++++++++++++++-
3 files changed, 51 insertions(+), 2 deletions(-)
New commits:
commit e446bb7ca65954b853aeb9914d3c7453e64de0c4
Author: Luke Macken <lmacken(a)redhat.com>
Date: Mon Jul 12 16:00:30 2010 -0400
Disable our strict critpath policy for EPEL
diff --git a/bodhi/model.py b/bodhi/model.py
index 1f4495a..187bec1 100644
--- a/bodhi/model.py
+++ b/bodhi/model.py
@@ -898,6 +898,10 @@ class PackageUpdate(SQLObject):
@property
def critpath(self):
""" Return whether or not this update is in the critical path """
+ # HACK: Avoid the current critpath policy for EPEL
+ if self.release.name.startswith('EL'):
+ return False
+
critical = False
critpath_pkgs = config.get('critpath').split()
for build in self.builds:
diff --git a/bodhi/tests/test_controllers.py b/bodhi/tests/test_controllers.py
index 9989790..ed06a03 100644
--- a/bodhi/tests/test_controllers.py
+++ b/bodhi/tests/test_controllers.py
@@ -2198,4 +2198,20 @@ class TestControllers(testutil.DBTest):
# Ensure the flag gets unset properly
assert not PackageUpdate.byTitle(params['builds']).builds[0].package.suggest_reboot
-
+ def test_push_critpath_to_EPEL(self):
+ session = login()
+ rel = Release(name='EL5', long_name='Fedora EPEL 5',
+ id_prefix='FEDORA-EPEL', dist_tag='dist-5E-epel')
+ params = {
+ 'builds' : 'kernel-2.6.31-1.el5',
+ 'release' : 'Fedora EPEL 5',
+ 'type_' : 'bugfix',
+ 'bugs' : '',
+ 'notes' : 'foobar',
+ 'stable_karma' : 1,
+ 'request': 'stable',
+ 'unstable_karma' : -1,
+ }
+ self.save_update(params, session)
+ update = PackageUpdate.byTitle(params['builds'])
+ assert update.request == 'stable', update.request
commit 97cfb9e08ee1ba19b384cd50854791db8d438976
Author: Luke Macken <lmacken(a)redhat.com>
Date: Mon Jul 12 15:46:49 2010 -0400
Add some EPEL data to our buildsystem test harness
diff --git a/bodhi/buildsys.py b/bodhi/buildsys.py
index f0f9a0b..28dcea8 100644
--- a/bodhi/buildsys.py
+++ b/bodhi/buildsys.py
@@ -81,6 +81,26 @@ class DevBuildsys(Buildsystem):
'tag_name': 'dist-fc7-updates-testing',
'task_id': 127621,
'version': '1.0.2.2'}
+
+ elif 'el5' in build:
+ return {'build_id': 16058,
+ 'completion_time': '2007-08-24 23:26:10.890319',
+ 'creation_event_id': 151517,
+ 'creation_time': '2007-08-24 19:38:29.422344',
+ 'epoch': None,
+ 'id': 16058,
+ 'name': 'kernel',
+ 'nvr': 'kernel-2.6.31-1.el5',
+ 'owner_id': 388,
+ 'owner_name': 'lmacken',
+ 'package_id': 8,
+ 'package_name': 'kernel',
+ 'release': '1.el5',
+ 'state': 1,
+ 'tag_id': 19,
+ 'tag_name': 'dist-5E-epel-testing-candidate',
+ 'task_id': 127621,
+ 'version': '2.6.31'}
else:
return {'build_id': 16058,
'completion_time': '2007-08-24 23:26:10.890319',
@@ -135,6 +155,13 @@ class DevBuildsys(Buildsystem):
'name': 'dist-fc7-updates-testing', 'perm': None, 'perm_id': None},
{'arches': 'i386 x86_64 ppc ppc64', 'id': 5, 'locked': True,
'name': 'dist-fc7', 'perm': None, 'perm_id': None}]
+ elif 'el5' in build:
+ return [{'arches': 'i386 x86_64 ppc ppc64', 'id': 10, 'locked': True,
+ 'name': 'dist-5E-epel-testing-candidate', 'perm': None, 'perm_id': None},
+ {'arches': 'i386 x86_64 ppc ppc64', 'id': 10, 'locked': True,
+ 'name': 'dist-5E-epel-testing-candidate', 'perm': None, 'perm_id': None},
+ {'arches': 'i386 x86_64 ppc ppc64', 'id': 5, 'locked': True,
+ 'name': 'dist-5E-epel', 'perm': None, 'perm_id': None}]
else:
return [{'arches': 'i386 x86_64 ppc ppc64', 'id': 10, 'locked': True,
'name': 'dist-f8-updates-candidate', 'perm': None, 'perm_id': None},
@@ -150,7 +177,9 @@ class DevBuildsys(Buildsystem):
'dist-fc8', 'dist-fc8-updates',
'dist-fc8-updates-testing', 'dist-f8-updates-candidate',
'dist-f9', 'dist-f9-updates', 'dist-f9-updates-testing',
- 'dist-f9-updates-candidate'):
+ 'dist-f9-updates-candidate',
+ 'dist-5E-epel-testing-candidate', 'dist-5E-epel',
+ 'dist-5E-epel-testing'):
raise koji.GenericError
return [self.getBuild(),]
13 years, 10 months
2 commits - bodhi/model.py bodhi/tests
by Luke Macken
bodhi/model.py | 66 +++++++++++++++++--------
bodhi/tests/test_controllers.py | 105 ++++++++++++++++++++++++++++++++++++++--
2 files changed, 147 insertions(+), 24 deletions(-)
New commits:
commit f50cdef90823a8246614c886d332d3617576a20f
Author: Luke Macken <lmacken(a)redhat.com>
Date: Fri Jul 9 15:31:54 2010 -0400
Refactor the critpath approval code, and improve the tests
diff --git a/bodhi/model.py b/bodhi/model.py
index 240ed01..1f4495a 100644
--- a/bodhi/model.py
+++ b/bodhi/model.py
@@ -740,21 +740,40 @@ class PackageUpdate(SQLObject):
Comment(text=text, karma=karma, update=self, author=author,
anonymous=anonymous)
- if self.stable_karma != 0 and self.stable_karma == self.karma:
- # If we're a criticalpath update to a pending release that is
- # not yet approved, ensure that this karma can't cause it
- # to go to stable.
- if self.critpath and not self.critpath_approved:
- pass
- else:
- if 'stable' not in (self.status, self.request):
- log.info("Automatically marking %s as stable" % self.title)
+ if self.critpath:
+ min_karma = config.get('critpath.min_karma')
+ # If we weren't approved before, but are now...
+ if not critpath_approved and self.critpath_approved:
+ self.comment('Critical path update approved', author='bodhi')
+ mail.send_admin('critpath_approved', self)
+ # Karma automatism enabled
+ if self.stable_karma != 0:
+ # If this update has a stable karma threshold that is lower
+ # than the critpath.min_karma, then automatically push it to
+ # stable once it has met the requirements.
+ if (self.stable_karma < min_karma and self.critpath_approved and
+ self.karma >= min_karma and self.pushable):
+ self.request = 'stable'
+ mail.send(self.submitter, 'stablekarma', self)
+ mail.send_admin('stablekarma', self)
+ # If we're approved and meet the minimum requirements, then
+ # automatically push this update to the stable repository
+ if (self.critpath_approved and self.pushable and
+ self.karma >= self.stable_karma and
+ self.karma >= min_karma):
self.request = 'stable'
- self.pushed = False
- #self.date_pushed = None
mail.send(self.submitter, 'stablekarma', self)
mail.send_admin('stablekarma', self)
+ if self.stable_karma != 0 and self.stable_karma == self.karma:
+ if self.pushable:
+ log.info("Automatically marking %s as stable" % self.title)
+ self.request = 'stable'
+ self.pushed = False
+ #self.date_pushed = None
+ mail.send(self.submitter, 'stablekarma', self)
+ mail.send_admin('stablekarma', self)
+
if self.status == 'testing' and self.unstable_karma != 0 and \
self.karma == self.unstable_karma:
log.info("Automatically unpushing %s" % self.title)
@@ -762,15 +781,6 @@ class PackageUpdate(SQLObject):
'being unpushed and marked as unstable' % self.karma)
mail.send(self.submitter, 'unstable', self)
- # If we're a Critical Path update
- if self.critpath:
- # If we weren't approved before, and now are, push to stable
- if not critpath_approved and self.critpath_approved:
- self.comment('Critical path update approved', author='bodhi')
- mail.send_admin('critpath_approved', self)
- if self.stable_karma != 0:
- self.request = 'stable'
-
# Send a notification to everyone that has commented on this update
mail.send(self.people_to_notify(), 'comment', self)
@@ -864,6 +874,8 @@ class PackageUpdate(SQLObject):
request=self.request,
comments=[comment.__json__() for comment in self.comments],
karma=self.karma,
+ stable_karma=self.stable_karma,
+ unstable_karma=self.unstable_karma,
close_bugs=self.close_bugs,
nagged=self.nagged,
approved=self.approved,
@@ -932,6 +944,17 @@ class PackageUpdate(SQLObject):
# people.add(person)
return people
+ @property
+ def pushable(self):
+ """ Return whether or not this update is in a pushable state.
+
+ Note that this does not take into account critical path or karma
+ policies.
+ """
+ return self.status != 'obsolete' and 'stable' not in (self.request,
+ self.status)
+
+
class Comment(SQLObject):
timestamp = DateTimeCol(default=datetime.utcnow)
update = ForeignKey("PackageUpdate", notNone=True)
diff --git a/bodhi/tests/test_controllers.py b/bodhi/tests/test_controllers.py
index f3b7777..9989790 100644
--- a/bodhi/tests/test_controllers.py
+++ b/bodhi/tests/test_controllers.py
@@ -1578,7 +1578,7 @@ class TestControllers(testutil.DBTest):
print update.stable_karma, update.unstable_karma
assert update.request == None
- def test_critpath_to_pending_release_num_approved_comments(self):
+ def test_critpath_num_approved_comments_with_autokarma(self):
"""
Ensure releng/qa can push critpath updates to stable for pending releases
after 1 releng/qa karma, and 1 other karma
@@ -1592,9 +1592,10 @@ class TestControllers(testutil.DBTest):
'bugs' : '',
'notes' : 'foobar',
'autokarma': True,
- 'stable_karma' : 10,
+ 'stable_karma' : 3,
'request': None,
- 'unstable_karma' : -10,
+ 'unstable_karma' : -3,
+ 'autokarma': True,
}
self.save_update(params, releng)
update = PackageUpdate.byTitle(params['builds'])
@@ -1665,6 +1666,97 @@ class TestControllers(testutil.DBTest):
update = PackageUpdate.byTitle(params['builds'])
assert update.request == 'stable'
+ def test_critpath_num_approved_comments_with_high_stable_threshold(self):
+ """
+ Ensure releng/qa can push critpath updates to stable
+ after 1 releng/qa karma, and 1 other karma -- but ensure that
+ it doesn't get pushed to stable automatically because it has yet to
+ reach the stable_karma threshold.
+ """
+ releng = login(group='proventesters')
+ create_release(locked=True)
+ params = {
+ 'builds' : 'kernel-2.6.31-1.fc7',
+ 'release' : 'Fedora 7',
+ 'type_' : 'bugfix',
+ 'bugs' : '',
+ 'notes' : 'foobar',
+ 'autokarma': True,
+ 'stable_karma' : 10,
+ 'request': None,
+ 'unstable_karma' : -10,
+ 'autokarma': True,
+ }
+ self.save_update(params, releng)
+ update = PackageUpdate.byTitle(params['builds'])
+ testutil.create_request('/updates/%s' % params['builds'],
+ method='GET', headers=releng)
+
+ # Ensure releng/QA can't push critpath updates alone
+ assert "Push to Testing" in cherrypy.response.body[0]
+ assert "Push Critical Path update to Stable" not in cherrypy.response.body[0]
+
+ # Have a developer +1 the update
+ developer = login(username='bob')
+ testutil.create_request('/updates/comment?text=foobar&title=%s&karma=1' %
+ params['builds'], method='POST', headers=developer)
+ testutil.create_request('/updates/%s' % params['builds'],
+ method='GET', headers=developer)
+ assert "Push Critical Path update to Stable" not in cherrypy.response.body[0]
+ update = PackageUpdate.byTitle(params['builds'])
+ assert not update.request
+ assert len(update.comments) == 1
+ assert update.comments[0].author == 'bob'
+
+ # Make sure not even releng can submit it to stable until it gets another
+ # approval
+ testutil.create_request('/updates/request/stable/%s' % params['builds'],
+ method='GET', headers=releng)
+ update = PackageUpdate.byTitle(params['builds'])
+ assert update.request == 'testing'
+ assert update.karma == 1
+ update.request = None
+
+ # Have another developer +1 it, so it gets up to +2
+ # Ensure we can't push it to stable, until we get admin approval
+ testutil.create_request('/updates/comment?text=foobar&title=%s&karma=1' %
+ params['builds'], method='POST',
+ headers=login(username='foobar'))
+ testutil.create_request('/updates/%s' % params['builds'],
+ method='GET', headers=login(username='foobar'))
+ assert "Push Critical Path update to Stable" not in cherrypy.response.body[0]
+ update = PackageUpdate.byTitle(params['builds'])
+ assert update.karma == 2
+ assert update.request != 'stable', update.request
+
+ # Ensure we're not yet approved
+ assert not update.critpath_approved
+
+ # Have releng try again, and ensure it can be pushed to stable
+ testutil.capture_log(['bodhi.controllers', 'bodhi.util', 'bodhi.model'])
+ testutil.create_request('/updates/comment?text=foobar&title=%s&karma=1' %
+ params['builds'], method='POST', headers=releng)
+ update = PackageUpdate.byTitle(params['builds'])
+ print update.stable_karma, update.unstable_karma
+
+ assert update.request == None, "Auto-karma kicked in even though it didn't reach the stable threshold yet!"
+
+ assert update.critpath
+ assert update.critpath_approved
+
+ # 7 more comments
+ for user in range(7):
+ dev_user = login(username='user%d' % user)
+ testutil.create_request('/updates/comment?text=yay&title=%s&karma=1'
+ % params['builds'], method='POST',
+ headers=dev_user)
+
+ update = PackageUpdate.byTitle(params['builds'])
+ logs = testutil.get_log()
+ print logs
+ #assert False, logs
+ assert update.request == 'stable', update.__json__()
+
def test_critpath_to_frozen_release_testing(self):
"""
Ensure devs can *not* push critpath updates directly to stable
@@ -1742,6 +1834,7 @@ class TestControllers(testutil.DBTest):
'stable_karma' : 1,
'request': None,
'unstable_karma' : -1,
+ 'autokarma': True,
}
self.save_update(params, session)
update = PackageUpdate.byTitle(params['builds'])
@@ -1763,11 +1856,15 @@ class TestControllers(testutil.DBTest):
assert "Mark Critical Path update as Stable" not in cherrypy.response.body[0]
+ #testutil.capture_log(['bodhi.controllers', 'bodhi.util', 'bodhi.model'])
testutil.create_request('/updates/comment?text=foobar&title=%s&karma=1' %
params['builds'], method='POST',
headers=login(username='bob'))
update = PackageUpdate.byTitle(params['builds'])
+ assert update.critpath
+ assert update.critpath_approved
+ #assert False, testutil.get_log()
assert len(update.comments) == 3, update.comments
assert update.comments[1].author == 'bob', update.comments
assert update.comments[2].author == 'bodhi', update.comments
@@ -2100,3 +2197,5 @@ class TestControllers(testutil.DBTest):
# Ensure the flag gets unset properly
assert not PackageUpdate.byTitle(params['builds']).builds[0].package.suggest_reboot
+
+
commit da231da257ceb36201a2754fc5a58560bddc5918
Author: Luke Macken <lmacken(a)redhat.com>
Date: Fri Jul 9 14:05:07 2010 -0400
When determining 'mycomments', only pay attention to authenticated ones...
diff --git a/bodhi/model.py b/bodhi/model.py
index 35ad8c2..240ed01 100644
--- a/bodhi/model.py
+++ b/bodhi/model.py
@@ -727,7 +727,8 @@ class PackageUpdate(SQLObject):
if not anonymous and karma != 0 and \
not filter(lambda c: c.author == author and c.karma == karma,
self.comments):
- mycomments = [c.karma for c in self.comments if c.author == author]
+ mycomments = [c.karma for c in self.comments if c.author == author
+ and not c.anonymous]
if karma == 1 and -1 in mycomments:
self.karma += 2
elif karma == -1 and 1 in mycomments:
13 years, 10 months
bodhi/controllers.py bodhi/tests
by Luke Macken
bodhi/controllers.py | 4 ++++
bodhi/tests/test_controllers.py | 37 +++++++++++++++++++++++++++++++++++++
2 files changed, 41 insertions(+)
New commits:
commit f5111b88c2f90c81e73f4b9d7b3f27414e370d35
Author: Luke Macken <lmacken(a)redhat.com>
Date: Wed Jul 7 19:53:23 2010 -0400
Make the suggest_reboot flag actually configurable (#352)
diff --git a/bodhi/controllers.py b/bodhi/controllers.py
index c602b0e..0627ebf 100644
--- a/bodhi/controllers.py
+++ b/bodhi/controllers.py
@@ -546,6 +546,7 @@ class Root(controllers.RootController):
'autokarma' : autokarma,
'stable_karma': stable_karma,
'unstable_karma': unstable_karma,
+ 'suggest_reboot': suggest_reboot,
}
# Basic sanity checks
@@ -769,6 +770,9 @@ class Root(controllers.RootController):
# Update our ACL cache for this pkg
package.committers = buildinfo[build]['people']
+ # Set the reboot suggested flag
+ package.suggest_reboot = suggest_reboot
+
# If new karma thresholds are specified, save them
if not autokarma:
stable_karma = unstable_karma = 0
diff --git a/bodhi/tests/test_controllers.py b/bodhi/tests/test_controllers.py
index 6b660ce..f3b7777 100644
--- a/bodhi/tests/test_controllers.py
+++ b/bodhi/tests/test_controllers.py
@@ -2063,3 +2063,40 @@ class TestControllers(testutil.DBTest):
params['builds'], method='POST', headers=session)
up = PackageUpdate.byTitle(params['builds'])
assert up.karma == 3
+
+ def test_suggest_reboot(self):
+ session = login()
+ create_release()
+ params = {
+ 'builds' : 'TurboGears-1.0.8-1.fc7',
+ 'release' : 'Fedora 7',
+ 'type_' : 'security',
+ 'bugs' : '',
+ 'notes' : 'foobar',
+ 'request' : 'Stable',
+ 'suggest_reboot' : True,
+ 'autokarma' : True,
+ 'stable_karma' : 5,
+ 'unstable_karma' : -5
+ }
+ self.save_update(params, session)
+
+ # Ensure the flag gets set properly
+ assert PackageUpdate.byTitle(params['builds']).builds[0].package.suggest_reboot
+
+ params = {
+ 'builds' : 'TurboGears-1.0.8-2.fc7',
+ 'release' : 'Fedora 7',
+ 'type_' : 'security',
+ 'bugs' : '',
+ 'notes' : 'foobar',
+ 'request' : 'Stable',
+ 'suggest_reboot': False,
+ 'autokarma' : True,
+ 'stable_karma' : 5,
+ 'unstable_karma' : -5
+ }
+ self.save_update(params, session)
+
+ # Ensure the flag gets unset properly
+ assert not PackageUpdate.byTitle(params['builds']).builds[0].package.suggest_reboot
13 years, 10 months
bodhi/masher.py
by Luke Macken
bodhi/masher.py | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
New commits:
commit 7e88a6475949032d206ba92db04615ffd8c72f0d
Author: Luke Macken <lmacken(a)redhat.com>
Date: Wed Jul 7 15:16:29 2010 -0400
Have the masher skip updates that are obsolete or missing a request
diff --git a/bodhi/masher.py b/bodhi/masher.py
index 9aa8f41..8658dbf 100644
--- a/bodhi/masher.py
+++ b/bodhi/masher.py
@@ -170,7 +170,14 @@ class MashTask(Thread):
self.updates = set()
if isinstance(updates[0], basestring):
updates = map(PackageUpdate.byTitle, updates)
- map(self.updates.add, updates)
+ for update in updates:
+ if update.status == 'obsolete':
+ log.warning("Skipping obsolete update %s" % update.title)
+ continue
+ if not update.request:
+ log.warning('Skipping update without request: %s' %update.title)
+ continue
+ self.updates.add(update)
if self.updates:
up = self.updates.pop()
self.updates.add(up)
13 years, 10 months
2 commits - bodhi/controllers.py bodhi/tests
by Luke Macken
bodhi/controllers.py | 13 +++++++------
bodhi/tests/test_controllers.py | 1 +
2 files changed, 8 insertions(+), 6 deletions(-)
New commits:
commit 2f97f98fd0389c5c2ded058b368b8d6840620bf3
Author: Luke Macken <lmacken(a)redhat.com>
Date: Wed Jul 7 01:02:23 2010 -0400
Tweak a unit test to get it running again after the previous patch
diff --git a/bodhi/tests/test_controllers.py b/bodhi/tests/test_controllers.py
index fe5804a..6b660ce 100644
--- a/bodhi/tests/test_controllers.py
+++ b/bodhi/tests/test_controllers.py
@@ -1048,6 +1048,7 @@ class TestControllers(testutil.DBTest):
'request' : 'Stable',
'stable_karma' : 1,
'unstable_karma' : 2,
+ 'autokarma': True,
}
testutil.capture_log('bodhi.util')
self.save_update(params, session)
commit 6c7f4e5d428b409743fe462eb16e8df1f25ed277
Author: Till Maas <opensource(a)till.name>
Date: Fri Jul 2 22:42:39 2010 +0200
Verify karma thresholds only if autokarma is True
diff --git a/bodhi/controllers.py b/bodhi/controllers.py
index b7f1216..c602b0e 100644
--- a/bodhi/controllers.py
+++ b/bodhi/controllers.py
@@ -559,12 +559,13 @@ class Root(controllers.RootController):
if request not in ('testing', 'stable', None):
flash_log('Unknown request: %s. Valid requests are: testing, '
'stable, None' % request)
- if stable_karma < 1:
- flash_log("Stable karma must be at least 1.")
- raise InvalidUpdateException(params)
- if stable_karma <= unstable_karma:
- flash_log("Stable karma must be higher than unstable karma.")
- raise InvalidUpdateException(params)
+ if autokarma:
+ if stable_karma < 1:
+ flash_log("Stable karma must be at least 1.")
+ raise InvalidUpdateException(params)
+ if stable_karma <= unstable_karma:
+ flash_log("Stable karma must be higher than unstable karma.")
+ raise InvalidUpdateException(params)
# Make sure this update doesn't already exist
if not edited:
13 years, 10 months