[PATCH v3 3/5] models, templates: Add submission relations
Mete Polat
metepolat2000 at gmail.com
Mon Oct 21 05:57:10 AEDT 2019
Introduces the ability to add relations between submissions. Relations
are displayed in the details page of a submission under 'Related'.
Related submissions located in another projects can be viewed as well.
Signed-off-by: Mete Polat <metepolat2000 at gmail.com>
---
.../migrations/0037_submission_relations.py | 28 ++++++++++++
patchwork/models.py | 9 ++++
patchwork/templates/patchwork/submission.html | 43 +++++++++++++++++--
patchwork/views/patch.py | 7 +++
4 files changed, 84 insertions(+), 3 deletions(-)
create mode 100644 patchwork/migrations/0037_submission_relations.py
diff --git a/patchwork/migrations/0037_submission_relations.py b/patchwork/migrations/0037_submission_relations.py
new file mode 100644
index 0000000..5aefc43
--- /dev/null
+++ b/patchwork/migrations/0037_submission_relations.py
@@ -0,0 +1,28 @@
+# Generated by Django 2.2.5 on 2019-10-07 19:58
+
+import datetime
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+import patchwork.models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('patchwork', '0036_project_commit_url_format'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='SubmissionRelation',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ],
+ ),
+ migrations.AddField(
+ model_name='submission',
+ name='related',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='submissions', related_query_name='submission', to='patchwork.SubmissionRelation'),
+ ),
+ ]
diff --git a/patchwork/models.py b/patchwork/models.py
index a908dd5..f4c816d 100644
--- a/patchwork/models.py
+++ b/patchwork/models.py
@@ -374,6 +374,9 @@ class Submission(FilenameMixin, EmailMixin, models.Model):
# submission metadata
name = models.CharField(max_length=255)
+ related = models.ForeignKey(
+ 'SubmissionRelation', null=True, blank=True, on_delete=models.SET_NULL,
+ related_name='submissions', related_query_name='submission')
@property
def list_archive_url(self):
@@ -859,6 +862,12 @@ class BundlePatch(models.Model):
ordering = ['order']
+class SubmissionRelation(models.Model):
+
+ def __str__(self):
+ return ', '.join(s.name for s in self.submissions.all()) or '<Empty>'
+
+
@python_2_unicode_compatible
class Check(models.Model):
diff --git a/patchwork/templates/patchwork/submission.html b/patchwork/templates/patchwork/submission.html
index 032b364..3a1136a 100644
--- a/patchwork/templates/patchwork/submission.html
+++ b/patchwork/templates/patchwork/submission.html
@@ -9,7 +9,7 @@
{% block body %}
<script type="text/javascript">
-function toggle_div(link_id, headers_id)
+function toggle_div(link_id, headers_id, label_show, label_hide)
{
var link = document.getElementById(link_id)
var headers = document.getElementById(headers_id)
@@ -17,10 +17,10 @@ function toggle_div(link_id, headers_id)
var hidden = headers.style['display'] == 'none';
if (hidden) {
- link.innerHTML = 'hide';
+ link.innerHTML = label_hide || 'hide';
headers.style['display'] = 'block';
} else {
- link.innerHTML = 'show';
+ link.innerHTML = label_show || 'show';
headers.style['display'] = 'none';
}
@@ -109,6 +109,43 @@ function toggle_div(link_id, headers_id)
</td>
</tr>
{% endif %}
+{% if submission.related %}
+ <tr>
+ <th>Related</th>
+ <td>
+ <a id="togglerelated"
+ href="javascript:toggle_div('togglerelated', 'related')"
+ >show</a>
+ <div id="related" class="submissionlist" style="display:none;">
+ <ul>
+ {% for sibling in submission.related.submissions.all %}
+ <li>
+ {% if sibling.id != submission.id and sibling.project == submission.project %}
+ <a href="{% url 'patch-detail' project_id=sibling.project.linkname msgid=sibling.url_msgid %}">
+ {{ sibling.name|default:"[no subject]"|truncatechars:100 }}
+ </a>
+ {% endif %}
+ </li>
+ {% endfor %}
+ {% if related_outside %}
+ <a id="togglerelatedoutside"
+ href="javascript:toggle_div('togglerelatedoutside', 'relatedoutside', 'show from other projects')"
+ >show from other projects</a>
+ <div id="relatedoutside" class="submissionlist" style="display:none;">
+ {% for sibling in related_outside %}
+ <li>
+ <a href="{% url 'patch-detail' project_id=sibling.project.linkname msgid=sibling.url_msgid %}">
+ {{ sibling.name|default:"[no subject]"|truncatechars:100 }}
+ </a> (in {{ sibling.project }})
+ </li>
+ {% endfor %}
+ </div>
+ {% endif %}
+ </ul>
+ </div>
+ </td>
+ </tr>
+{% endif %}
</table>
<div class="patchforms">
diff --git a/patchwork/views/patch.py b/patchwork/views/patch.py
index f34053c..0480614 100644
--- a/patchwork/views/patch.py
+++ b/patchwork/views/patch.py
@@ -110,12 +110,19 @@ def patch_detail(request, project_id, msgid):
comments = comments.only('submitter', 'date', 'id', 'content',
'submission')
+ if patch.related:
+ related_outside = patch.related.submissions \
+ .exclude(project=patch.project)
+ else:
+ related_outside = []
+
context['comments'] = comments
context['checks'] = patch.check_set.all().select_related('user')
context['submission'] = patch
context['patchform'] = form
context['createbundleform'] = createbundleform
context['project'] = patch.project
+ context['related_outside'] = related_outside
return render(request, 'patchwork/submission.html', context)
--
2.23.0
More information about the Patchwork
mailing list