From 3b8a61c68fa61eadebf7b19329e8d3bffde9e6b4 Mon Sep 17 00:00:00 2001
From: Jeremy Kerr <jk@ozlabs.org>
Date: Wed, 27 May 2015 09:56:36 +0800
Subject: Add patch tag infrastructure

This change add patch 'tags', eg 'Acked-by' / 'Reviewed-by', etc., to
patchwork.

Tag parsing is implemented in the patch parser's extract_tags function,
which returns a Counter object of the tags in a comment. These are
stored in the PatchTag (keyed to Tag) objects associated with each
patch.

We need to ensure that the main patch lists do not cause per-patch
queries on the Patch.tags ManyToManyField (this would result in ~500
queries per page), so we introduce a new QuerySet (and Manager) for
Patch, adding a with_tag_counts() method to populate the tag counts in a
single query.

As users may be migrating from previous patchwork versions (ie, with no
tag counts in the database), we add a 'retag' management command.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
---
 lib/sql/grant-all.postgres.sql | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

(limited to 'lib/sql/grant-all.postgres.sql')

diff --git a/lib/sql/grant-all.postgres.sql b/lib/sql/grant-all.postgres.sql
index 4498408..477e10a 100644
--- a/lib/sql/grant-all.postgres.sql
+++ b/lib/sql/grant-all.postgres.sql
@@ -23,7 +23,9 @@ GRANT SELECT, UPDATE, INSERT, DELETE ON
 	patchwork_bundlepatch,
 	patchwork_patch,
 	patchwork_emailoptout,
-	patchwork_patchchangenotification
+	patchwork_patchchangenotification,
+	patchwork_tag,
+	patchwork_patchtag
 TO "www-data";
 GRANT SELECT, UPDATE ON
 	auth_group_id_seq,
@@ -44,7 +46,9 @@ GRANT SELECT, UPDATE ON
 	patchwork_state_id_seq,
 	patchwork_emailconfirmation_id_seq,
 	patchwork_userprofile_id_seq,
-	patchwork_userprofile_maintainer_projects_id_seq
+	patchwork_userprofile_maintainer_projects_id_seq,
+	patchwork_tag_id_seq,
+	patchwork_patchtag_id_seq
 TO "www-data";
 
 -- allow the mail user (in this case, 'nobody') to add patches
@@ -53,14 +57,19 @@ GRANT INSERT, SELECT ON
 	patchwork_comment,
 	patchwork_person
 TO "nobody";
+GRANT INSERT, SELECT, UPDATE, DELETE ON
+	patchwork_patchtag
+TO "nobody";
 GRANT SELECT ON
 	patchwork_project,
-	patchwork_state
+	patchwork_state,
+	patchwork_tag
 TO "nobody";
 GRANT UPDATE, SELECT ON
 	patchwork_patch_id_seq,
 	patchwork_person_id_seq,
-	patchwork_comment_id_seq
+	patchwork_comment_id_seq,
+	patchwork_patchtag_id_seq
 TO "nobody";
 
 COMMIT;
-- 
cgit v1.2.3

