diff --git a/layerindex/views.py b/layerindex/views.py index 74cccd5..cedc5b0 100644 --- a/layerindex/views.py +++ b/layerindex/views.py @@ -368,6 +368,10 @@ class LayerDetailView(DetailView): context['updates'] = layerbranch.layerupdate_set.order_by('-started') context['url_branch'] = self.kwargs['branch'] context['this_url_name'] = resolve(self.request.path_info).url_name + if 'rrs' in settings.INSTALLED_APPS: + from rrs.models import MaintenancePlanLayerBranch + # We don't care about branch, only that the layer is included + context['rrs_maintplans'] = [m.plan for m in MaintenancePlanLayerBranch.objects.filter(layerbranch__layer=layer)] return context class LayerReviewDetailView(LayerDetailView): diff --git a/rrs/urls.py b/rrs/urls.py index 9cc596d..18fa61b 100644 --- a/rrs/urls.py +++ b/rrs/urls.py @@ -2,11 +2,14 @@ from django.conf.urls import patterns, include, url from rrs.models import Release, Milestone from rrs.views import RecipeListView, recipes_report, RecipeDetailView, \ - MaintainerListView, FrontPageRedirect + MaintainerListView, FrontPageRedirect, MaintenancePlanRedirect urlpatterns = patterns('', url(r'^$', FrontPageRedirect.as_view(), name='rrs_frontpage'), + url(r'^maintplan/(?P.*)/$', + MaintenancePlanRedirect.as_view(), + name='rrs_maintplan'), url(r'^recipes/(?P.*)/(?P.*)/(?P.*)/$', RecipeListView.as_view( template_name='rrs/recipes.html'), diff --git a/rrs/views.py b/rrs/views.py index d11046c..348b2d0 100644 --- a/rrs/views.py +++ b/rrs/views.py @@ -32,6 +32,20 @@ class FrontPageRedirect(RedirectView): raise Exception('No milestones defined for release %s' % release.name) return reverse('rrs_recipes', args=(maintplan.name, release.name, milestone.name)) +class MaintenancePlanRedirect(RedirectView): + permanent = False + + def get_redirect_url(self, maintplan_name): + maintplan = get_object_or_404(MaintenancePlan, name=maintplan_name) + release = Release.get_current(maintplan) + if not release: + raise Exception('No releases defined for maintenance plan %s' % maintplan.name) + milestone = Milestone.get_current(release) + if not milestone: + raise Exception('No milestones defined for release %s' % release.name) + return reverse('rrs_recipes', args=(maintplan.name, release.name, milestone.name)) + + def _check_url_params(upstream_status, maintainer_name): get_object_or_404(Maintainer, name=maintainer_name) diff --git a/templates/layerindex/detail.html b/templates/layerindex/detail.html index 220d475..4898d92 100644 --- a/templates/layerindex/detail.html +++ b/templates/layerindex/detail.html @@ -136,6 +136,17 @@ {% endif %} + {% if rrs_maintplans %} +

{{ rrs_maintplans|pluralize:"Maintenance Plan,Maintenance Plans" }}

+ + {% endif %} +