Add a series model. This model is intentionally very minimal to allow
as much dynaminism as possible. It is expected that patches will be
migrated between series as new data is provided.
Signed-off-by: Stephen Finucane
---
v2:
- Rename 'SeriesGroup' to 'Series'
- Rename 'Series' to 'SeriesRevision'
---
patchwork/admin.py | 55 +++-
patchwork/migrations/0013_add_series_models.py | 56
patchwork/models.py| 110 +++-
3 files changed, 216 insertions(+), 5 deletions(-)
create mode 100644 patchwork/migrations/0013_add_series_models.py
diff --git a/patchwork/admin.py b/patchwork/admin.py
index 0f217d7..afb4af6 100644
--- a/patchwork/admin.py
+++ b/patchwork/admin.py
@@ -23,7 +23,8 @@ from django.contrib import admin
from patchwork.models import (Project, Person, UserProfile, State, Submission,
Patch, CoverLetter, Comment, Bundle, Tag, Check,
- DelegationRule)
+ DelegationRule, Series, SeriesRevision,
+ SeriesReference)
class DelegationRuleInline(admin.TabularInline):
@@ -76,8 +77,8 @@ admin.site.register(CoverLetter, CoverLetterAdmin)
class PatchAdmin(admin.ModelAdmin):
list_display = ('name', 'submitter', 'project', 'state', 'date',
-'archived', 'is_pull_request')
-list_filter = ('project', 'state', 'archived')
+'archived', 'is_pull_request', 'series')
+list_filter = ('project', 'state', 'archived', 'series')
search_fields = ('name', 'submitter__name', 'submitter__email')
date_hierarchy = 'date'
@@ -97,6 +98,54 @@ class CommentAdmin(admin.ModelAdmin):
admin.site.register(Comment, CommentAdmin)
+class CoverLetterInline(admin.StackedInline):
+model = CoverLetter
+extra = 0
+
+
+class PatchInline(admin.StackedInline):
+model = Patch
+extra = 0
+
+
+class SeriesRevisionAdmin(admin.ModelAdmin):
+list_display = ('name', 'group', 'date', 'submitter', 'version', 'total',
+'actual_total', 'complete')
+readonly_fields = ('actual_total', 'complete')
+search_fields = ('submitter_name', 'submitter_email')
+inlines = [CoverLetterInline, PatchInline]
+
+def complete(self, series):
+return series.complete
+complete.boolean = True
+admin.site.register(SeriesRevision, SeriesRevisionAdmin)
+
+
+class SeriesRevisionInline(admin.StackedInline):
+model = SeriesRevision
+readonly_fields = ('date', 'submitter', 'version', 'total',
+ 'actual_total', 'complete')
+ordering = ('-date', )
+show_change_link = True
+extra = 0
+
+def complete(self, series):
+return series.complete
+complete.boolean = True
+
+
+class SeriesAdmin(admin.ModelAdmin):
+list_display = ('name', )
+readonly_fields = ('name', )
+inlines = [SeriesRevisionInline]
+admin.site.register(Series, SeriesAdmin)
+
+
+class SeriesReferenceAdmin(admin.ModelAdmin):
+model = SeriesReference
+admin.site.register(SeriesReference, SeriesReferenceAdmin)
+
+
class CheckAdmin(admin.ModelAdmin):
list_display = ('patch', 'user', 'state', 'target_url',
'description', 'context')
diff --git a/patchwork/migrations/0013_add_series_models.py
b/patchwork/migrations/0013_add_series_models.py
new file mode 100644
index 000..03b7a22
--- /dev/null
+++ b/patchwork/migrations/0013_add_series_models.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+dependencies = [
+('patchwork', '0012_add_coverletter_model'),
+]
+
+operations = [
+migrations.CreateModel(
+name='Series',
+fields=[
+('id', models.AutoField(verbose_name='ID', serialize=False,
auto_created=True, primary_key=True)),
+],
+options={
+'verbose_name_plural': 'Series',
+},
+),
+migrations.CreateModel(
+name='SeriesReference',
+fields=[
+('id', models.AutoField(verbose_name='ID', serialize=False,
auto_created=True, primary_key=True)),
+('msgid', models.CharField(unique=True, max_length=255)),
+],
+),
+migrations.CreateModel(
+name='SeriesRevision',
+fields=[
+('id', models.AutoField(verbose_name='ID', serialize=False,
auto_created=True, primary_key=True)),
+('date', models.DateTimeField()),
+('version', models.IntegerField(default=1, help_text=b'Version
of series revision as indicated by the subject prefix(es)')),
+('total', models.IntegerField(help_text=b'Number of patches in
series as indicated by the subject