mirror of
git://git.yoctoproject.org/layerindex-web.git
synced 2025-07-19 20:59:01 +02:00
rrs: Add support for Recipe maintainership history
Now can you get maintainers based on Milestones. Feature changes, rrs/models.py: Add RecipeMaintainerHistory to store maintainer updates. rrs/admin.py: Add admin site for RecipeMaintainerHistory. Adapt changes, Now you need to specify RecipeMaintainerHistory to get RecipeMaintainer, changes into rrs/view.py. These set of changes are incompatible with the previous version you need to do initial setup described in README.rrs. Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
This commit is contained in:
parent
a1244395bb
commit
ac485c0cc4
|
@ -33,4 +33,10 @@ $ ./scripts/tools/import_layer.py -s meta git://git.openembedded.org/openembedd
|
||||||
8. In the first run should regenerate Recipe upgrade information,
|
8. In the first run should regenerate Recipe upgrade information,
|
||||||
|
|
||||||
$ ./scripts/update.py --only-layerindex
|
$ ./scripts/update.py --only-layerindex
|
||||||
$ ./scripts/tools/rrs_upgrade_history.py # This can take a lot of time
|
$ ./scripts/tools/rrs_maintainer_history.py # can take a lot of time
|
||||||
|
$ ./scripts/tools/rrs_upgrade_history.py # can take a lot of time
|
||||||
|
|
||||||
|
9. Then you can run update and rrs_maintainer_history scripts.
|
||||||
|
|
||||||
|
$ ./scripts/tools/rrs_maintainer_history.py
|
||||||
|
$ ./scripts/update.py
|
||||||
|
|
13
rrs/admin.py
13
rrs/admin.py
|
@ -7,8 +7,9 @@
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.admin import DateFieldListFilter
|
from django.contrib.admin import DateFieldListFilter
|
||||||
|
|
||||||
from rrs.models import Milestone, Maintainer, RecipeMaintainer, RecipeDistro, \
|
from rrs.models import Milestone, Maintainer, RecipeMaintainerHistory, \
|
||||||
RecipeUpgrade, RecipeUpstream, RecipeUpstreamHistory
|
RecipeMaintainer, RecipeDistro, RecipeUpgrade, RecipeUpstream, \
|
||||||
|
RecipeUpstreamHistory
|
||||||
|
|
||||||
class MilestoneAdmin(admin.ModelAdmin):
|
class MilestoneAdmin(admin.ModelAdmin):
|
||||||
search_fields = ['name']
|
search_fields = ['name']
|
||||||
|
@ -18,9 +19,14 @@ class MaintainerAdmin(admin.ModelAdmin):
|
||||||
search_fields = ['name']
|
search_fields = ['name']
|
||||||
model = Maintainer
|
model = Maintainer
|
||||||
|
|
||||||
|
class RecipeMaintainerHistoryAdmin(admin.ModelAdmin):
|
||||||
|
search_fields = ['title', 'author__name', 'sha1']
|
||||||
|
list_filter = ['author__name', ('date', DateFieldListFilter)]
|
||||||
|
model = RecipeMaintainerHistory
|
||||||
|
|
||||||
class RecipeMaintainerAdmin(admin.ModelAdmin):
|
class RecipeMaintainerAdmin(admin.ModelAdmin):
|
||||||
search_fields = ['recipe__pn']
|
search_fields = ['recipe__pn']
|
||||||
list_filter = ['recipe__layerbranch__layer__name', 'maintainer__name']
|
list_filter = ['recipe__layerbranch__layer__name', 'history', 'maintainer__name']
|
||||||
model = RecipeMaintainer
|
model = RecipeMaintainer
|
||||||
|
|
||||||
class RecipeDistroAdmin(admin.ModelAdmin):
|
class RecipeDistroAdmin(admin.ModelAdmin):
|
||||||
|
@ -49,6 +55,7 @@ class RecipeUpstreamAdmin(admin.ModelAdmin):
|
||||||
|
|
||||||
admin.site.register(Milestone, MilestoneAdmin)
|
admin.site.register(Milestone, MilestoneAdmin)
|
||||||
admin.site.register(Maintainer, MaintainerAdmin)
|
admin.site.register(Maintainer, MaintainerAdmin)
|
||||||
|
admin.site.register(RecipeMaintainerHistory, RecipeMaintainerHistoryAdmin)
|
||||||
admin.site.register(RecipeMaintainer, RecipeMaintainerAdmin)
|
admin.site.register(RecipeMaintainer, RecipeMaintainerAdmin)
|
||||||
admin.site.register(RecipeDistro, RecipeDistroAdmin)
|
admin.site.register(RecipeDistro, RecipeDistroAdmin)
|
||||||
admin.site.register(RecipeUpgrade, RecipeUpgradeAdmin)
|
admin.site.register(RecipeUpgrade, RecipeUpgradeAdmin)
|
||||||
|
|
|
@ -25,18 +25,38 @@ class Migration(SchemaMigration):
|
||||||
))
|
))
|
||||||
db.send_create_signal('rrs', ['Maintainer'])
|
db.send_create_signal('rrs', ['Maintainer'])
|
||||||
|
|
||||||
|
# Adding model 'RecipeMaintainerHistory'
|
||||||
|
db.create_table('rrs_recipemaintainerhistory', (
|
||||||
|
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
||||||
|
('title', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)),
|
||||||
|
('date', self.gf('django.db.models.fields.DateTimeField')()),
|
||||||
|
('author', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rrs.Maintainer'])),
|
||||||
|
('sha1', self.gf('django.db.models.fields.CharField')(unique=True, max_length=64)),
|
||||||
|
))
|
||||||
|
db.send_create_signal('rrs', ['RecipeMaintainerHistory'])
|
||||||
|
|
||||||
# Adding model 'RecipeMaintainer'
|
# Adding model 'RecipeMaintainer'
|
||||||
db.create_table('rrs_recipemaintainer', (
|
db.create_table('rrs_recipemaintainer', (
|
||||||
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
||||||
('recipe', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['layerindex.Recipe'])),
|
('recipe', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['layerindex.Recipe'])),
|
||||||
('maintainer', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rrs.Maintainer'])),
|
('maintainer', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rrs.Maintainer'])),
|
||||||
|
('history', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rrs.RecipeMaintainerHistory'])),
|
||||||
))
|
))
|
||||||
db.send_create_signal('rrs', ['RecipeMaintainer'])
|
db.send_create_signal('rrs', ['RecipeMaintainer'])
|
||||||
|
|
||||||
|
# Adding model 'RecipeUpstreamHistory'
|
||||||
|
db.create_table('rrs_recipeupstreamhistory', (
|
||||||
|
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
||||||
|
('start_date', self.gf('django.db.models.fields.DateTimeField')()),
|
||||||
|
('end_date', self.gf('django.db.models.fields.DateTimeField')()),
|
||||||
|
))
|
||||||
|
db.send_create_signal('rrs', ['RecipeUpstreamHistory'])
|
||||||
|
|
||||||
# Adding model 'RecipeUpstream'
|
# Adding model 'RecipeUpstream'
|
||||||
db.create_table('rrs_recipeupstream', (
|
db.create_table('rrs_recipeupstream', (
|
||||||
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
||||||
('recipe', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['layerindex.Recipe'])),
|
('recipe', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['layerindex.Recipe'])),
|
||||||
|
('history', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rrs.RecipeUpstreamHistory'])),
|
||||||
('version', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)),
|
('version', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)),
|
||||||
('type', self.gf('django.db.models.fields.CharField')(max_length=1, blank=True)),
|
('type', self.gf('django.db.models.fields.CharField')(max_length=1, blank=True)),
|
||||||
('status', self.gf('django.db.models.fields.CharField')(max_length=1, blank=True)),
|
('status', self.gf('django.db.models.fields.CharField')(max_length=1, blank=True)),
|
||||||
|
@ -58,7 +78,7 @@ class Migration(SchemaMigration):
|
||||||
db.create_table('rrs_recipeupgrade', (
|
db.create_table('rrs_recipeupgrade', (
|
||||||
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
||||||
('recipe', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['layerindex.Recipe'])),
|
('recipe', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['layerindex.Recipe'])),
|
||||||
('maintainer', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rrs.Maintainer'], null=True, blank=True)),
|
('maintainer', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rrs.Maintainer'], blank=True)),
|
||||||
('sha1', self.gf('django.db.models.fields.CharField')(max_length=40, blank=True)),
|
('sha1', self.gf('django.db.models.fields.CharField')(max_length=40, blank=True)),
|
||||||
('title', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)),
|
('title', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)),
|
||||||
('version', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)),
|
('version', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)),
|
||||||
|
@ -75,9 +95,15 @@ class Migration(SchemaMigration):
|
||||||
# Deleting model 'Maintainer'
|
# Deleting model 'Maintainer'
|
||||||
db.delete_table('rrs_maintainer')
|
db.delete_table('rrs_maintainer')
|
||||||
|
|
||||||
|
# Deleting model 'RecipeMaintainerHistory'
|
||||||
|
db.delete_table('rrs_recipemaintainerhistory')
|
||||||
|
|
||||||
# Deleting model 'RecipeMaintainer'
|
# Deleting model 'RecipeMaintainer'
|
||||||
db.delete_table('rrs_recipemaintainer')
|
db.delete_table('rrs_recipemaintainer')
|
||||||
|
|
||||||
|
# Deleting model 'RecipeUpstreamHistory'
|
||||||
|
db.delete_table('rrs_recipeupstreamhistory')
|
||||||
|
|
||||||
# Deleting model 'RecipeUpstream'
|
# Deleting model 'RecipeUpstream'
|
||||||
db.delete_table('rrs_recipeupstream')
|
db.delete_table('rrs_recipeupstream')
|
||||||
|
|
||||||
|
@ -170,16 +196,25 @@ class Migration(SchemaMigration):
|
||||||
},
|
},
|
||||||
'rrs.recipemaintainer': {
|
'rrs.recipemaintainer': {
|
||||||
'Meta': {'object_name': 'RecipeMaintainer'},
|
'Meta': {'object_name': 'RecipeMaintainer'},
|
||||||
|
'history': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rrs.RecipeMaintainerHistory']"}),
|
||||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
'maintainer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rrs.Maintainer']"}),
|
'maintainer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rrs.Maintainer']"}),
|
||||||
'recipe': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.Recipe']"})
|
'recipe': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.Recipe']"})
|
||||||
},
|
},
|
||||||
|
'rrs.recipemaintainerhistory': {
|
||||||
|
'Meta': {'object_name': 'RecipeMaintainerHistory'},
|
||||||
|
'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rrs.Maintainer']"}),
|
||||||
|
'date': ('django.db.models.fields.DateTimeField', [], {}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'sha1': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}),
|
||||||
|
'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
|
||||||
|
},
|
||||||
'rrs.recipeupgrade': {
|
'rrs.recipeupgrade': {
|
||||||
'Meta': {'object_name': 'RecipeUpgrade'},
|
'Meta': {'object_name': 'RecipeUpgrade'},
|
||||||
'author_date': ('django.db.models.fields.DateTimeField', [], {}),
|
'author_date': ('django.db.models.fields.DateTimeField', [], {}),
|
||||||
'commit_date': ('django.db.models.fields.DateTimeField', [], {}),
|
'commit_date': ('django.db.models.fields.DateTimeField', [], {}),
|
||||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
'maintainer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rrs.Maintainer']", 'null': 'True', 'blank': 'True'}),
|
'maintainer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rrs.Maintainer']", 'blank': 'True'}),
|
||||||
'recipe': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.Recipe']"}),
|
'recipe': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.Recipe']"}),
|
||||||
'sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
|
'sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
|
||||||
'title': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
|
'title': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
|
||||||
|
@ -188,12 +223,19 @@ class Migration(SchemaMigration):
|
||||||
'rrs.recipeupstream': {
|
'rrs.recipeupstream': {
|
||||||
'Meta': {'object_name': 'RecipeUpstream'},
|
'Meta': {'object_name': 'RecipeUpstream'},
|
||||||
'date': ('django.db.models.fields.DateTimeField', [], {}),
|
'date': ('django.db.models.fields.DateTimeField', [], {}),
|
||||||
|
'history': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rrs.RecipeUpstreamHistory']"}),
|
||||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
'no_update_reason': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
'no_update_reason': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
||||||
'recipe': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.Recipe']"}),
|
'recipe': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.Recipe']"}),
|
||||||
'status': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}),
|
'status': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}),
|
||||||
'type': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}),
|
'type': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}),
|
||||||
'version': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'})
|
'version': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
'rrs.recipeupstreamhistory': {
|
||||||
|
'Meta': {'object_name': 'RecipeUpstreamHistory'},
|
||||||
|
'end_date': ('django.db.models.fields.DateTimeField', [], {}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'start_date': ('django.db.models.fields.DateTimeField', [], {})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,149 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
from south.utils import datetime_utils as datetime
|
|
||||||
from south.db import db
|
|
||||||
from south.v2 import SchemaMigration
|
|
||||||
from django.db import models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(SchemaMigration):
|
|
||||||
|
|
||||||
def forwards(self, orm):
|
|
||||||
# Adding model 'RecipeUpstreamHistory'
|
|
||||||
db.create_table('rrs_recipeupstreamhistory', (
|
|
||||||
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
|
||||||
('start_date', self.gf('django.db.models.fields.DateTimeField')()),
|
|
||||||
('end_date', self.gf('django.db.models.fields.DateTimeField')()),
|
|
||||||
))
|
|
||||||
db.send_create_signal('rrs', ['RecipeUpstreamHistory'])
|
|
||||||
|
|
||||||
# Adding field 'RecipeUpstream.history'
|
|
||||||
db.add_column('rrs_recipeupstream', 'history',
|
|
||||||
self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rrs.RecipeUpstreamHistory'], null=True),
|
|
||||||
keep_default=False)
|
|
||||||
|
|
||||||
|
|
||||||
def backwards(self, orm):
|
|
||||||
# Deleting model 'RecipeUpstreamHistory'
|
|
||||||
db.delete_table('rrs_recipeupstreamhistory')
|
|
||||||
|
|
||||||
# Deleting field 'RecipeUpstream.history'
|
|
||||||
db.delete_column('rrs_recipeupstream', 'history_id')
|
|
||||||
|
|
||||||
|
|
||||||
models = {
|
|
||||||
'layerindex.branch': {
|
|
||||||
'Meta': {'object_name': 'Branch'},
|
|
||||||
'bitbake_branch': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
|
|
||||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
|
||||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
|
|
||||||
'short_description': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
|
|
||||||
'sort_priority': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
|
||||||
'updated': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now': 'True', 'blank': 'True'})
|
|
||||||
},
|
|
||||||
'layerindex.layerbranch': {
|
|
||||||
'Meta': {'object_name': 'LayerBranch'},
|
|
||||||
'actual_branch': ('django.db.models.fields.CharField', [], {'max_length': '80', 'blank': 'True'}),
|
|
||||||
'branch': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.Branch']"}),
|
|
||||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
|
||||||
'layer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.LayerItem']"}),
|
|
||||||
'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
|
|
||||||
'vcs_last_commit': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
|
||||||
'vcs_last_fetch': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
|
||||||
'vcs_last_rev': ('django.db.models.fields.CharField', [], {'max_length': '80', 'blank': 'True'}),
|
|
||||||
'vcs_subdir': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'})
|
|
||||||
},
|
|
||||||
'layerindex.layeritem': {
|
|
||||||
'Meta': {'object_name': 'LayerItem'},
|
|
||||||
'classic': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
|
||||||
'description': ('django.db.models.fields.TextField', [], {}),
|
|
||||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
|
||||||
'index_preference': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
|
||||||
'layer_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
|
|
||||||
'mailing_list_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
|
|
||||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '40'}),
|
|
||||||
'status': ('django.db.models.fields.CharField', [], {'default': "'N'", 'max_length': '1'}),
|
|
||||||
'summary': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
|
|
||||||
'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
|
|
||||||
'usage_url': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
|
||||||
'vcs_url': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
|
||||||
'vcs_web_file_base_url': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
|
||||||
'vcs_web_tree_base_url': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
|
||||||
'vcs_web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
|
|
||||||
},
|
|
||||||
'layerindex.recipe': {
|
|
||||||
'Meta': {'object_name': 'Recipe'},
|
|
||||||
'bbclassextend': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
|
||||||
'bugtracker': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
|
|
||||||
'depends': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
|
||||||
'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
|
||||||
'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
|
||||||
'filepath': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
|
||||||
'homepage': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
|
|
||||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
|
||||||
'layerbranch': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.LayerBranch']"}),
|
|
||||||
'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
|
||||||
'pn': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
|
||||||
'provides': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
|
||||||
'pv': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
|
||||||
'section': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
|
||||||
'src_uri': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
|
||||||
'summary': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
|
|
||||||
'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'})
|
|
||||||
},
|
|
||||||
'rrs.maintainer': {
|
|
||||||
'Meta': {'ordering': "['name']", 'object_name': 'Maintainer'},
|
|
||||||
'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
|
||||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
|
||||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
|
|
||||||
},
|
|
||||||
'rrs.milestone': {
|
|
||||||
'Meta': {'object_name': 'Milestone'},
|
|
||||||
'end_date': ('django.db.models.fields.DateField', [], {}),
|
|
||||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
|
||||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}),
|
|
||||||
'start_date': ('django.db.models.fields.DateField', [], {})
|
|
||||||
},
|
|
||||||
'rrs.recipedistro': {
|
|
||||||
'Meta': {'object_name': 'RecipeDistro'},
|
|
||||||
'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
|
||||||
'distro': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
|
||||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
|
||||||
'recipe': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.Recipe']"})
|
|
||||||
},
|
|
||||||
'rrs.recipemaintainer': {
|
|
||||||
'Meta': {'object_name': 'RecipeMaintainer'},
|
|
||||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
|
||||||
'maintainer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rrs.Maintainer']"}),
|
|
||||||
'recipe': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.Recipe']"})
|
|
||||||
},
|
|
||||||
'rrs.recipeupgrade': {
|
|
||||||
'Meta': {'object_name': 'RecipeUpgrade'},
|
|
||||||
'author_date': ('django.db.models.fields.DateTimeField', [], {}),
|
|
||||||
'commit_date': ('django.db.models.fields.DateTimeField', [], {}),
|
|
||||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
|
||||||
'maintainer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rrs.Maintainer']", 'null': 'True', 'blank': 'True'}),
|
|
||||||
'recipe': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.Recipe']"}),
|
|
||||||
'sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}),
|
|
||||||
'title': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}),
|
|
||||||
'version': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'})
|
|
||||||
},
|
|
||||||
'rrs.recipeupstream': {
|
|
||||||
'Meta': {'object_name': 'RecipeUpstream'},
|
|
||||||
'date': ('django.db.models.fields.DateTimeField', [], {}),
|
|
||||||
'history': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rrs.RecipeUpstreamHistory']", 'null': 'True'}),
|
|
||||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
|
||||||
'no_update_reason': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
|
|
||||||
'recipe': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.Recipe']"}),
|
|
||||||
'status': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}),
|
|
||||||
'type': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}),
|
|
||||||
'version': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'})
|
|
||||||
},
|
|
||||||
'rrs.recipeupstreamhistory': {
|
|
||||||
'Meta': {'object_name': 'RecipeUpstreamHistory'},
|
|
||||||
'end_date': ('django.db.models.fields.DateTimeField', [], {}),
|
|
||||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
|
||||||
'start_date': ('django.db.models.fields.DateTimeField', [], {})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
complete_apps = ['rrs']
|
|
|
@ -59,19 +59,67 @@ class Maintainer(models.Model):
|
||||||
name = models.CharField(max_length=255, unique=True)
|
name = models.CharField(max_length=255, unique=True)
|
||||||
email = models.CharField(max_length=255, blank=True)
|
email = models.CharField(max_length=255, blank=True)
|
||||||
|
|
||||||
|
"""
|
||||||
|
Create maintainer if no exist else update email.
|
||||||
|
Return Maintainer.
|
||||||
|
"""
|
||||||
|
@staticmethod
|
||||||
|
def create_or_update(name, email):
|
||||||
|
try:
|
||||||
|
m = Maintainer.objects.get(name = name)
|
||||||
|
m.email = email
|
||||||
|
except Maintainer.DoesNotExist:
|
||||||
|
m = Maintainer()
|
||||||
|
m.name = name
|
||||||
|
m.email = email
|
||||||
|
|
||||||
|
m.save()
|
||||||
|
|
||||||
|
return m
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ["name"]
|
ordering = ["name"]
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return "%s <%s>" % (self.name, self.email)
|
return "%s <%s>" % (self.name, self.email)
|
||||||
|
|
||||||
class RecipeMaintainer(models.Model):
|
class RecipeMaintainerHistory(models.Model):
|
||||||
recipe = models.ForeignKey(Recipe)
|
title = models.CharField(max_length=255, blank=True)
|
||||||
maintainer = models.ForeignKey(Maintainer)
|
date = models.DateTimeField()
|
||||||
|
author = models.ForeignKey(Maintainer)
|
||||||
|
sha1 = models.CharField(max_length=64, unique=True)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_maintainer_by_recipe(recipe):
|
def get_last():
|
||||||
recipe_maintainer = RecipeMaintainer.objects.filter(recipe = recipe)[0]
|
rmh_qry = RecipeMaintainerHistory.objects.filter().order_by('-date')
|
||||||
|
|
||||||
|
if rmh_qry:
|
||||||
|
return rmh_qry[0]
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_by_end_date(end_date):
|
||||||
|
rmh_qry = RecipeMaintainerHistory.objects.filter(
|
||||||
|
date__lte = end_date).order_by('-date')
|
||||||
|
|
||||||
|
if rmh_qry:
|
||||||
|
return rmh_qry[0]
|
||||||
|
else:
|
||||||
|
return RecipeMaintainerHistory.objects.filter().order_by('date')[0]
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return "%s: %s, %s" % (self.date, self.author.name, self.sha1[:10])
|
||||||
|
|
||||||
|
class RecipeMaintainer(models.Model):
|
||||||
|
recipe = models.ForeignKey(Recipe)
|
||||||
|
maintainer = models.ForeignKey(Maintainer)
|
||||||
|
history = models.ForeignKey(RecipeMaintainerHistory)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_maintainer_by_recipe_and_history(recipe, history):
|
||||||
|
recipe_maintainer = RecipeMaintainer.objects.filter(recipe = recipe,
|
||||||
|
history = history)[0]
|
||||||
return recipe_maintainer.maintainer
|
return recipe_maintainer.maintainer
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
|
@ -85,7 +133,7 @@ class RecipeUpstreamHistory(models.Model):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_last_by_date_range(start, end):
|
def get_last_by_date_range(start, end):
|
||||||
history = RecipeUpstreamHistory.objects.filter(start_date__gte = start,
|
history = RecipeUpstreamHistory.objects.filter(start_date__gte = start,
|
||||||
start_date__lte = end).order_by('-id')
|
start_date__lte = end).order_by('-start_date')
|
||||||
|
|
||||||
if history:
|
if history:
|
||||||
return history[0]
|
return history[0]
|
||||||
|
@ -94,7 +142,7 @@ class RecipeUpstreamHistory(models.Model):
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_last():
|
def get_last():
|
||||||
history = RecipeUpstreamHistory.objects.filter().order_by('-id')
|
history = RecipeUpstreamHistory.objects.filter().order_by('-start_date')
|
||||||
|
|
||||||
if history:
|
if history:
|
||||||
return history[0]
|
return history[0]
|
||||||
|
@ -121,7 +169,7 @@ class RecipeUpstream(models.Model):
|
||||||
RECIPE_UPSTREAM_TYPE_CHOICES_DICT = dict(RECIPE_UPSTREAM_TYPE_CHOICES)
|
RECIPE_UPSTREAM_TYPE_CHOICES_DICT = dict(RECIPE_UPSTREAM_TYPE_CHOICES)
|
||||||
|
|
||||||
recipe = models.ForeignKey(Recipe)
|
recipe = models.ForeignKey(Recipe)
|
||||||
history = models.ForeignKey(RecipeUpstreamHistory, null=True)
|
history = models.ForeignKey(RecipeUpstreamHistory)
|
||||||
version = models.CharField(max_length=100, blank=True)
|
version = models.CharField(max_length=100, blank=True)
|
||||||
type = models.CharField(max_length=1, choices=RECIPE_UPSTREAM_TYPE_CHOICES, blank=True)
|
type = models.CharField(max_length=1, choices=RECIPE_UPSTREAM_TYPE_CHOICES, blank=True)
|
||||||
status = models.CharField(max_length=1, choices=RECIPE_UPSTREAM_STATUS_CHOICES, blank=True)
|
status = models.CharField(max_length=1, choices=RECIPE_UPSTREAM_STATUS_CHOICES, blank=True)
|
||||||
|
@ -165,7 +213,7 @@ class RecipeDistro(models.Model):
|
||||||
|
|
||||||
class RecipeUpgrade(models.Model):
|
class RecipeUpgrade(models.Model):
|
||||||
recipe = models.ForeignKey(Recipe)
|
recipe = models.ForeignKey(Recipe)
|
||||||
maintainer = models.ForeignKey(Maintainer, blank=True, null=True)
|
maintainer = models.ForeignKey(Maintainer, blank=True)
|
||||||
sha1 = models.CharField(max_length=40, blank=True)
|
sha1 = models.CharField(max_length=40, blank=True)
|
||||||
title = models.CharField(max_length=1024, blank=True)
|
title = models.CharField(max_length=1024, blank=True)
|
||||||
version = models.CharField(max_length=100, blank=True)
|
version = models.CharField(max_length=100, blank=True)
|
||||||
|
|
27
rrs/views.py
27
rrs/views.py
|
@ -6,8 +6,9 @@ from django.views.generic import ListView, DetailView
|
||||||
from django.core.urlresolvers import resolve
|
from django.core.urlresolvers import resolve
|
||||||
|
|
||||||
from layerindex.models import Recipe
|
from layerindex.models import Recipe
|
||||||
from rrs.models import Milestone, Maintainer, RecipeMaintainer, RecipeUpstream, \
|
from rrs.models import Milestone, Maintainer, RecipeMaintainerHistory, \
|
||||||
RecipeUpstreamHistory, RecipeDistro, RecipeUpgrade
|
RecipeMaintainer, RecipeUpstreamHistory, RecipeUpstream, \
|
||||||
|
RecipeDistro, RecipeUpgrade
|
||||||
|
|
||||||
def _check_url_params(upstream_status, maintainer_name):
|
def _check_url_params(upstream_status, maintainer_name):
|
||||||
get_object_or_404(Maintainer, name=maintainer_name)
|
get_object_or_404(Maintainer, name=maintainer_name)
|
||||||
|
@ -68,6 +69,9 @@ class RecipeListView(ListView):
|
||||||
milestone.end_date
|
milestone.end_date
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.recipe_maintainer_history = RecipeMaintainerHistory.get_by_end_date(
|
||||||
|
milestone.end_date)
|
||||||
|
|
||||||
recipe_list = []
|
recipe_list = []
|
||||||
self.recipe_list_count = 0
|
self.recipe_list_count = 0
|
||||||
|
|
||||||
|
@ -100,7 +104,8 @@ class RecipeListView(ListView):
|
||||||
if self.upstream_status != 'All' and self.upstream_status != recipe_upstream_status:
|
if self.upstream_status != 'All' and self.upstream_status != recipe_upstream_status:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
maintainer = RecipeMaintainer.get_maintainer_by_recipe(recipe)
|
maintainer = RecipeMaintainer.get_maintainer_by_recipe_and_history(
|
||||||
|
recipe, self.recipe_maintainer_history)
|
||||||
if self.maintainer_name != 'All' and self.maintainer_name != maintainer.name:
|
if self.maintainer_name != 'All' and self.maintainer_name != maintainer.name:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
@ -135,7 +140,8 @@ class RecipeListView(ListView):
|
||||||
|
|
||||||
context['maintainer_name'] = self.maintainer_name
|
context['maintainer_name'] = self.maintainer_name
|
||||||
all_maintainers = ['All']
|
all_maintainers = ['All']
|
||||||
for rm in RecipeMaintainer.objects.filter().values(
|
for rm in RecipeMaintainer.objects.filter(history =
|
||||||
|
self.recipe_maintainer_history).values(
|
||||||
'maintainer__name').distinct().order_by('maintainer__name'):
|
'maintainer__name').distinct().order_by('maintainer__name'):
|
||||||
all_maintainers.append(rm['maintainer__name'])
|
all_maintainers.append(rm['maintainer__name'])
|
||||||
context['all_maintainers'] = all_maintainers
|
context['all_maintainers'] = all_maintainers
|
||||||
|
@ -170,16 +176,21 @@ class RecipeUpgradeDetail():
|
||||||
self.commit_url = commit_url
|
self.commit_url = commit_url
|
||||||
|
|
||||||
def _get_recipe_upgrade_detail(recipe_upgrade):
|
def _get_recipe_upgrade_detail(recipe_upgrade):
|
||||||
milestone_name = Milestone.get_by_date(recipe_upgrade.commit_date)
|
milestone = Milestone.get_by_date(recipe_upgrade.commit_date)
|
||||||
|
milestone_name = milestone.name
|
||||||
if milestone_name is None:
|
if milestone_name is None:
|
||||||
milestone_name = ''
|
milestone_name = ''
|
||||||
|
|
||||||
|
recipe_maintainer_history = RecipeMaintainerHistory.get_by_end_date(
|
||||||
|
milestone.end_date)
|
||||||
|
|
||||||
is_recipe_maintainer = False
|
is_recipe_maintainer = False
|
||||||
maintainer_name = ''
|
maintainer_name = ''
|
||||||
if not recipe_upgrade.maintainer is None:
|
if not recipe_upgrade.maintainer is None:
|
||||||
maintainer_name = recipe_upgrade.maintainer.name
|
maintainer_name = recipe_upgrade.maintainer.name
|
||||||
if RecipeMaintainer.objects.filter(maintainer__name
|
if RecipeMaintainer.objects.filter(maintainer__name
|
||||||
= maintainer_name).count() > 0:
|
= maintainer_name, history = recipe_maintainer_history
|
||||||
|
).count() > 0:
|
||||||
is_recipe_maintainer = True
|
is_recipe_maintainer = True
|
||||||
|
|
||||||
commit = recipe_upgrade.sha1[:10]
|
commit = recipe_upgrade.sha1[:10]
|
||||||
|
@ -213,7 +224,9 @@ class RecipeDetailView(DetailView):
|
||||||
context['upstream_version'] = recipe_upstream.version
|
context['upstream_version'] = recipe_upstream.version
|
||||||
context['upstream_no_update_reason'] = recipe_upstream.no_update_reason
|
context['upstream_no_update_reason'] = recipe_upstream.no_update_reason
|
||||||
|
|
||||||
recipe_maintainer = RecipeMaintainer.objects.filter(recipe = recipe)[0]
|
self.recipe_maintainer_history = RecipeMaintainerHistory.get_last()
|
||||||
|
recipe_maintainer = RecipeMaintainer.objects.filter(recipe = recipe,
|
||||||
|
history = self.recipe_maintainer_history)[0]
|
||||||
maintainer = recipe_maintainer.maintainer
|
maintainer = recipe_maintainer.maintainer
|
||||||
|
|
||||||
context['maintainer_name'] = maintainer.name
|
context['maintainer_name'] = maintainer.name
|
||||||
|
|
Loading…
Reference in New Issue
Block a user