aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--rrs/admin.py7
-rw-r--r--rrs/migrations/0010_recipemaintenancelink.py40
-rw-r--r--rrs/models.py20
-rwxr-xr-xrrs/tools/rrs_maintainer_history.py26
4 files changed, 86 insertions, 7 deletions
diff --git a/rrs/admin.py b/rrs/admin.py
index fbebc65677..d00785f032 100644
--- a/rrs/admin.py
+++ b/rrs/admin.py
@@ -9,7 +9,8 @@ from django.contrib.admin import DateFieldListFilter
from rrs.models import Release, Milestone, Maintainer, RecipeMaintainerHistory, \
RecipeMaintainer, RecipeDistro, RecipeUpgrade, RecipeUpstream, \
- RecipeUpstreamHistory, MaintenancePlan, MaintenancePlanLayerBranch
+ RecipeUpstreamHistory, MaintenancePlan, MaintenancePlanLayerBranch, \
+ RecipeMaintenanceLink
class MaintenancePlanLayerBranchInline(admin.StackedInline):
model = MaintenancePlanLayerBranch
@@ -70,6 +71,9 @@ class RecipeUpstreamAdmin(admin.ModelAdmin):
'type', ('date', DateFieldListFilter), 'history']
model = RecipeUpstream
+class RecipeMaintenanceLinkAdmin(admin.ModelAdmin):
+ model = RecipeMaintenanceLink
+
admin.site.register(MaintenancePlan, MaintenancePlanAdmin)
admin.site.register(Release, ReleaseAdmin)
admin.site.register(Milestone, MilestoneAdmin)
@@ -80,3 +84,4 @@ admin.site.register(RecipeDistro, RecipeDistroAdmin)
admin.site.register(RecipeUpgrade, RecipeUpgradeAdmin)
admin.site.register(RecipeUpstreamHistory, RecipeUpstreamHistoryAdmin)
admin.site.register(RecipeUpstream, RecipeUpstreamAdmin)
+admin.site.register(RecipeMaintenanceLink, RecipeMaintenanceLinkAdmin)
diff --git a/rrs/migrations/0010_recipemaintenancelink.py b/rrs/migrations/0010_recipemaintenancelink.py
new file mode 100644
index 0000000000..2d94f4437b
--- /dev/null
+++ b/rrs/migrations/0010_recipemaintenancelink.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+def insert_initial_link_data(apps, schema_editor):
+ RecipeMaintenanceLink = apps.get_model('rrs', 'RecipeMaintenanceLink')
+
+ r = RecipeMaintenanceLink(pn_match='gcc-cross-*', pn_target='gcc')
+ r.save()
+ r = RecipeMaintenanceLink(pn_match='gcc-crosssdk-*', pn_target='gcc')
+ r.save()
+ r = RecipeMaintenanceLink(pn_match='gcc-source-*', pn_target='gcc')
+ r.save()
+ r = RecipeMaintenanceLink(pn_match='binutils-cross-*', pn_target='binutils')
+ r.save()
+ r = RecipeMaintenanceLink(pn_match='binutils-crosssdk-*', pn_target='binutils')
+ r.save()
+ r = RecipeMaintenanceLink(pn_match='gdb-cross-*', pn_target='gdb')
+ r.save()
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('rrs', '0009_rmh_layerbranch'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='RecipeMaintenanceLink',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
+ ('pn_match', models.CharField(max_length=100, help_text='Expression to match against pn of recipes that should be linked (glob expression)')),
+ ('pn_target', models.CharField(max_length=100, help_text='Name of recipe to link to')),
+ ],
+ ),
+ migrations.RunPython(insert_initial_link_data, reverse_code=migrations.RunPython.noop),
+ ]
diff --git a/rrs/models.py b/rrs/models.py
index 536f3b1329..c86dc93ece 100644
--- a/rrs/models.py
+++ b/rrs/models.py
@@ -408,3 +408,23 @@ class RecipeUpgrade(models.Model):
return '%s: (%s, %s)' % (self.recipe.pn, self.version,
self.commit_date)
+
+class RecipeMaintenanceLink(models.Model):
+ pn_match = models.CharField(max_length=100, help_text='Expression to match against pn of recipes that should be linked (glob expression)')
+ pn_target = models.CharField(max_length=100, help_text='Name of recipe to link to')
+
+ @staticmethod
+ def link_maintainer(pn, rmh):
+ import fnmatch
+ for rml in RecipeMaintenanceLink.objects.all():
+ if fnmatch.fnmatch(pn, rml.pn_match):
+ recipe_link_objs = rmh.layerbranch.recipe_set.filter(pn=rml.pn_target)
+ if recipe_link_objs:
+ lrm = RecipeMaintainer.objects.filter(recipe=recipe_link_objs[0], history=rmh)
+ if lrm:
+ return lrm[0]
+ return None
+
+
+ def __str__(self):
+ return '%s -> %s' % (self.pn_match, self.pn_target)
diff --git a/rrs/tools/rrs_maintainer_history.py b/rrs/tools/rrs_maintainer_history.py
index 6585f5bf55..8af658f4d3 100755
--- a/rrs/tools/rrs_maintainer_history.py
+++ b/rrs/tools/rrs_maintainer_history.py
@@ -22,7 +22,7 @@ from django.db import transaction
import settings
from layerindex.models import Recipe, LayerBranch, LayerItem
-from rrs.models import MaintenancePlan, Maintainer, RecipeMaintainerHistory, RecipeMaintainer
+from rrs.models import MaintenancePlan, Maintainer, RecipeMaintainerHistory, RecipeMaintainer, RecipeMaintenanceLink
from django.core.exceptions import ObjectDoesNotExist
# FIXME we shouldn't be hardcoded to expect RECIPE_MAINTAINER to be set in this file,
@@ -150,11 +150,18 @@ def maintainer_history(options, logger):
if not RecipeMaintainer.objects.filter(recipe = recipe, history = rms):
rm = RecipeMaintainer()
rm.recipe = recipe
- rm.maintainer = no_maintainer
+ link_maintainer = RecipeMaintenanceLink.link_maintainer(recipe.pn, rms)
+ if link_maintainer:
+ rm.maintainer = link_maintainer.maintainer
+ else:
+ rm.maintainer = no_maintainer
rm.history = rms
rm.save()
- logger.debug("%s: Not found maintainer in commit %s set to 'No maintainer'." % \
- (recipe.pn, rms.sha1))
+ if link_maintainer:
+ logger.debug("%s: linked to maintainer for %s" % (recipe.pn, link_maintainer.recipe.pn))
+ else:
+ logger.debug("%s: Not found maintainer in commit %s set to 'No maintainer'." % \
+ (recipe.pn, rms.sha1))
# set new recipes to no maintainer if don't have one
rms = RecipeMaintainerHistory.get_last()
@@ -162,10 +169,17 @@ def maintainer_history(options, logger):
if not RecipeMaintainer.objects.filter(recipe = recipe, history = rms):
rm = RecipeMaintainer()
rm.recipe = recipe
- rm.maintainer = no_maintainer
+ link_maintainer = RecipeMaintenanceLink.link_maintainer(recipe.pn, rms)
+ if link_maintainer:
+ rm.maintainer = link_maintainer.maintainer
+ else:
+ rm.maintainer = no_maintainer
rm.history = rms
rm.save()
- logger.debug("%s: New recipe not found maintainer set to 'No maintainer'." % \
+ if link_maintainer:
+ logger.debug("%s: New recipe linked to maintainer for %s" % (recipe.pn, link_maintainer.recipe.pn))
+ else:
+ logger.debug("%s: New recipe not found maintainer set to 'No maintainer'." % \
(recipe.pn))
if options.dry_run:
raise DryRunRollbackException