From 3b8a61c68fa61eadebf7b19329e8d3bffde9e6b4 Mon Sep 17 00:00:00 2001 From: Jeremy Kerr 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 --- lib/sql/migration/015-add-patch-tags.sql | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 lib/sql/migration/015-add-patch-tags.sql (limited to 'lib/sql/migration') 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; -- cgit v1.2.3