summaryrefslogtreecommitdiffstats
path: root/lib/sql
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2015-05-27 09:56:36 +0800
committerJeremy Kerr <jk@ozlabs.org>2015-05-28 09:05:45 +0800
commit3b8a61c68fa61eadebf7b19329e8d3bffde9e6b4 (patch)
tree88f53364498523371c2bd1fc33b2e0dbbbb41372 /lib/sql
parentdaa3ae42eee5e569881070bcc2958b361743f70a (diff)
downloadpatchwork-3b8a61c68fa61eadebf7b19329e8d3bffde9e6b4.tar.bz2
patchwork-3b8a61c68fa61eadebf7b19329e8d3bffde9e6b4.tar.xz
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>
Diffstat (limited to 'lib/sql')
-rw-r--r--lib/sql/grant-all.mysql.sql4
-rw-r--r--lib/sql/grant-all.postgres.sql17
-rw-r--r--lib/sql/migration/015-add-patch-tags.sql19
3 files changed, 36 insertions, 4 deletions
diff --git a/lib/sql/grant-all.mysql.sql b/lib/sql/grant-all.mysql.sql
index a307675..6a3d547 100644
--- a/lib/sql/grant-all.mysql.sql
+++ b/lib/sql/grant-all.mysql.sql
@@ -23,13 +23,17 @@ GRANT SELECT, UPDATE, INSERT, DELETE ON patchwork_bundlepatch TO 'www-data'@loca
GRANT SELECT, UPDATE, INSERT, DELETE ON patchwork_patch TO 'www-data'@localhost;
GRANT SELECT, UPDATE, INSERT, DELETE ON patchwork_emailoptout TO 'www-data'@localhost;
GRANT SELECT, UPDATE, INSERT, DELETE ON patchwork_patchchangenotification TO 'www-data'@localhost;
+GRANT SELECT, UPDATE, INSERT, DELETE ON patchwork_tag TO 'www-data'@localhost;
+GRANT SELECT, UPDATE, INSERT, DELETE ON patchwork_patchtag TO 'www-data'@localhost;
-- allow the mail user (in this case, 'nobody') to add patches
GRANT INSERT, SELECT ON patchwork_patch TO 'nobody'@localhost;
GRANT INSERT, SELECT ON patchwork_comment TO 'nobody'@localhost;
GRANT INSERT, SELECT ON patchwork_person TO 'nobody'@localhost;
+GRANT INSERT, SELECT, UPDATE, DELETE ON patchwork_patchtag TO 'nobody'@localhost;
GRANT SELECT ON patchwork_project TO 'nobody'@localhost;
GRANT SELECT ON patchwork_state TO 'nobody'@localhost;
+GRANT SELECT ON patchwork_tag TO 'nobody'@localhost;
COMMIT;
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;
diff --git a/lib/sql/migration/015-add-patch-tags.sql b/lib/sql/migration/015-add-patch-tags.sql
new file mode 100644
index 0000000..bdf7330
--- /dev/null
+++ b/lib/sql/migration/015-add-patch-tags.sql
@@ -0,0 +1,19 @@
+BEGIN;
+ALTER TABLE patchwork_project ADD COLUMN use_tags boolean default true;
+
+CREATE TABLE "patchwork_tag" (
+ "id" serial NOT NULL PRIMARY KEY,
+ "name" varchar(20) NOT NULL,
+ "pattern" varchar(50) NOT NULL,
+ "abbrev" varchar(2) NOT NULL UNIQUE
+);
+
+CREATE TABLE "patchwork_patchtag" (
+ "id" serial NOT NULL PRIMARY KEY,
+ "patch_id" integer NOT NULL,
+ "tag_id" integer NOT NULL REFERENCES "patchwork_tag" ("id"),
+ "count" integer NOT NULL,
+ UNIQUE ("patch_id", "tag_id")
+);
+
+COMMIT;