diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2015-05-27 09:56:36 +0800 |
---|---|---|
committer | Jeremy Kerr <jk@ozlabs.org> | 2015-05-28 09:05:45 +0800 |
commit | 3b8a61c68fa61eadebf7b19329e8d3bffde9e6b4 (patch) | |
tree | 88f53364498523371c2bd1fc33b2e0dbbbb41372 /lib | |
parent | daa3ae42eee5e569881070bcc2958b361743f70a (diff) | |
download | patchwork-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')
-rw-r--r-- | lib/sql/grant-all.mysql.sql | 4 | ||||
-rw-r--r-- | lib/sql/grant-all.postgres.sql | 17 | ||||
-rw-r--r-- | lib/sql/migration/015-add-patch-tags.sql | 19 |
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; |