Get the translated lint checker descriptions into the database

Signed-off-by: Christopher Baines <mail@cbaines.net>
This commit is contained in:
Danjela Lura 2020-05-28 22:17:11 +02:00 committed by Christopher Baines
parent ae6541af1e
commit f67bea719d
8 changed files with 179 additions and 13 deletions

View file

@ -607,7 +607,7 @@ WITH base_lint_warnings AS (
SELECT lint_warnings.id,
packages.name, packages.version,
lint_checkers.name AS lint_checker_name,
lint_checkers.description AS lint_checker_description,
lint_checker_descriptions.description AS lint_checker_description,
lint_checkers.network_dependent AS lint_checker_network_dependent,
locations.file, locations.line, locations.column_number,
lint_warning_messages.message
@ -616,6 +616,10 @@ WITH base_lint_warnings AS (
ON lint_warnings.package_id = packages.id
INNER JOIN lint_checkers
ON lint_warnings.lint_checker_id = lint_checkers.id
INNER JOIN lint_checker_description_sets
ON lint_checkers.lint_checker_description_set_id = lint_checker_description_sets.id
INNER JOIN lint_checker_descriptions
ON lint_checker_descriptions.id = ANY (lint_checker_description_sets.description_ids)
INNER JOIN locations
ON lint_warnings.location_id = locations.id
INNER JOIN lint_warning_message_sets
@ -632,7 +636,7 @@ WITH base_lint_warnings AS (
SELECT lint_warnings.id,
packages.name, packages.version,
lint_checkers.name AS lint_checker_name,
lint_checkers.description AS lint_checker_description,
lint_checker_descriptions.description AS lint_checker_description,
lint_checkers.network_dependent AS lint_checker_network_dependent,
locations.file, locations.line, locations.column_number,
lint_warning_messages.message
@ -641,6 +645,10 @@ WITH base_lint_warnings AS (
ON lint_warnings.package_id = packages.id
INNER JOIN lint_checkers
ON lint_warnings.lint_checker_id = lint_checkers.id
INNER JOIN lint_checker_description_sets
ON lint_checkers.lint_checker_description_set_id = lint_checker_description_sets.id
INNER JOIN lint_checker_descriptions
ON lint_checker_descriptions.id = ANY (lint_checker_description_sets.description_ids)
INNER JOIN locations
ON lint_warnings.location_id = locations.id
INNER JOIN lint_warning_message_sets

View file

@ -30,6 +30,7 @@
#:use-module (guix inferior)
#:use-module (guix profiles)
#:use-module (guix utils)
#:use-module (guix i18n)
#:use-module (guix progress)
#:use-module (guix packages)
#:use-module (guix derivations)
@ -448,7 +449,8 @@ WHERE job_id = $1"
(and
(or (inferior-eval '(and (resolve-module '(guix lint) #:ensure #f)
(use-modules (guix lint))
(use-modules (guix lint)
(guix i18n))
#t)
inf)
(begin
@ -457,10 +459,38 @@ WHERE job_id = $1"
#f))
(let ((checkers
(inferior-eval
'(begin
`(begin
(define (lint-descriptions-by-locale checker)
(let* ((source-locale "en_US.utf8")
(source-description
(begin
(setlocale LC_MESSAGES source-locale)
(G_ (lint-checker-description checker))))
(descriptions-by-locale
(filter-map
(lambda (locale)
(catch 'system-error
(lambda ()
(setlocale LC_MESSAGES locale))
(lambda (key . args)
(error
(simple-format
#f
"error changing locale to ~A: ~A ~A"
locale key args))))
(let ((description
(G_ (lint-checker-description checker))))
(setlocale LC_MESSAGES source-locale)
(if (string=? description source-description)
#f
(cons locale description))))
(list ,@locales))))
(cons (cons source-locale source-description)
descriptions-by-locale)))
(map (lambda (checker)
(list (lint-checker-name checker)
(lint-checker-description checker)
(lint-descriptions-by-locale checker)
(if (memq checker %network-dependent-checkers)
#t
#f)))
@ -1163,7 +1193,14 @@ WHERE job_id = $1"
(let* ((lint-checker-ids
(lint-checkers->lint-checker-ids
conn
(map car inferior-lint-warnings)))
(map (match-lambda
((name descriptions-by-locale network-dependent)
(list
name
network-dependent
(lint-checker-description-data->lint-checker-description-set-id
conn descriptions-by-locale))))
(map car inferior-lint-warnings))))
(lint-warning-ids
(insert-lint-warnings
conn

View file

@ -23,21 +23,75 @@
#:export (lint-checkers->lint-checker-ids
lint-warning-count-by-lint-checker-for-revision
insert-guix-revision-lint-checkers
lint-checkers-for-revision))
lint-checkers-for-revision
lint-checker-description-data->lint-checker-description-set-id))
(define (lint-checkers->lint-checker-ids conn lint-checkers-data)
(insert-missing-data-and-return-all-ids
conn
"lint_checkers"
'(name description network_dependent)
'(name network_dependent lint_checker_description_set_id)
lint-checkers-data))
(define (lint-checker-description-data->lint-checker-description-ids
conn descriptions-by-locale)
(insert-missing-data-and-return-all-ids
conn
"lint_checker_descriptions"
'(locale description)
(map (match-lambda
((locale . description)
(list locale description)))
descriptions-by-locale)))
(define (insert-lint-checker-description-set conn lint-description-ids)
(let ((query
(string-append
"INSERT INTO lint_checker_description_sets (description_ids) VALUES "
(string-append
"('{"
(string-join
(map number->string
(sort lint-description-ids <))
", ")
"}')")
" RETURNING id")))
(match (exec-query conn query)
(((id)) id))))
(define (lint-checker-description-data->lint-checker-description-set-id
conn
descriptions-by-locale)
(let* ((lint-checker-description-ids
(lint-checker-description-data->lint-checker-description-ids
conn
descriptions-by-locale))
(lint-checker-description-set-id
(exec-query
conn
(string-append
"SELECT id FROM lint_checker_description_sets"
" WHERE description_ids = ARRAY["
(string-join (map number->string
(sort lint-checker-description-ids <)) ", ")
"]"))))
(string->number
(match lint-checker-description-set-id
(((id)) id)
(()
(insert-lint-checker-description-set conn lint-checker-description-ids))))))
(define (lint-warning-count-by-lint-checker-for-revision conn commit-hash)
(define query
"
SELECT lint_checkers.name, lint_checkers.description,
SELECT lint_checkers.name, lint_checker_descriptions.description,
lint_checkers.network_dependent, revision_data.count
FROM lint_checkers
INNER JOIN lint_checker_description_sets
ON lint_checkers.lint_checker_description_set_id = lint_checker_description_sets.id
INNER JOIN lint_checker_descriptions
ON lint_checker_descriptions.id = ANY (lint_checker_description_sets.description_ids)
INNER JOIN (
SELECT lint_checker_id, COUNT(*)
FROM lint_warnings
@ -76,9 +130,13 @@ ORDER BY count DESC")
(exec-query
conn
"
SELECT name, description, network_dependent
SELECT lint_checkers.name, lint_checker_descriptions.description, lint_checkers.network_dependent
FROM lint_checkers
WHERE id IN (
INNER JOIN lint_checker_description_sets
ON lint_checkers.lint_checker_description_set_id = lint_checker_description_sets.id
INNER JOIN lint_checker_descriptions
ON lint_checker_descriptions.id = ANY (lint_checker_description_sets.description_ids)
WHERE lint_checkers.id IN (
SELECT lint_checker_id
FROM guix_revision_lint_checkers
INNER JOIN guix_revisions

View file

@ -59,13 +59,17 @@
message-query)
(define query
(string-append "
SELECT lint_warnings.id, lint_checkers.name, lint_checkers.description,
SELECT lint_warnings.id, lint_checkers.name, lint_checker_descriptions.description,
lint_checkers.network_dependent, packages.name, packages.version,
locations.file, locations.line, locations.column_number,
lint_warning_messages.message
FROM lint_warnings
INNER JOIN lint_checkers
ON lint_warnings.lint_checker_id = lint_checkers.id
INNER JOIN lint_checker_description_sets
ON lint_checkers.lint_checker_description_set_id = lint_checker_description_sets.id
INNER JOIN lint_checker_descriptions
ON lint_checker_descriptions.id = ANY (lint_checker_description_sets.description_ids)
INNER JOIN packages
ON lint_warnings.package_id = packages.id
INNER JOIN locations
@ -116,13 +120,17 @@ INNER JOIN lint_warning_messages
commit-hash
name version)
(define query "
SELECT lint_warnings.id, lint_checkers.name, lint_checkers.description,
SELECT lint_warnings.id, lint_checkers.name, lint_checker_descriptions.description,
lint_checkers.network_dependent,
locations.file, locations.line, locations.column_number,
lint_warning_messages.message
FROM lint_warnings
INNER JOIN lint_checkers
ON lint_checkers.id = lint_warnings.lint_checker_id
INNER JOIN lint_checker_description_sets
ON lint_checkers.lint_checker_description_set_id = lint_checker_description_sets.id
INNER JOIN lint_checker_descriptions
ON lint_checker_descriptions.id = ANY (lint_checker_description_sets.description_ids)
INNER JOIN packages
ON lint_warnings.package_id = packages.id
LEFT OUTER JOIN locations

View file

@ -0,0 +1,40 @@
-- Deploy guix-data-service:translations_for_lint_checker_descriptions to pg
BEGIN;
CREATE TABLE lint_checker_descriptions (
id integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
locale varchar NOT NULL,
description varchar NOT NULL,
UNIQUE (locale, description)
);
CREATE TABLE lint_checker_description_sets (
id integer NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
description_ids integer[] NOT NULL,
UNIQUE (description_ids)
);
ALTER TABLE lint_checkers ADD COLUMN lint_checker_description_set_id integer REFERENCES lint_checker_description_sets(id);
INSERT INTO lint_checker_descriptions(locale, description)
SELECT DISTINCT 'en_US.utf8', description
FROM lint_checkers;
INSERT INTO lint_checker_description_sets (description_ids)
SELECT DISTINCT ARRAY_AGG(
id)
FROM lint_checker_descriptions
GROUP BY id;
UPDATE lint_checkers
SET lint_checker_description_set_id =
lint_checker_description_sets.id
FROM lint_checker_description_sets
INNER JOIN lint_checker_descriptions
ON lint_checker_description_sets.description_ids[1] = lint_checker_descriptions.id
WHERE lint_checkers.description = lint_checker_descriptions.description;
ALTER TABLE lint_checkers DROP COLUMN description;
COMMIT;

View file

@ -0,0 +1,7 @@
-- Revert guix-data-service:translations_for_lint_checker_descriptions from pg
BEGIN;
-- XXX Add DDLs here.
COMMIT;

View file

@ -59,3 +59,4 @@ load_new_guix_revision_jobs_make_commits_unique 2020-03-27T21:38:42Z Christopher
remove_odd_package_derivations 2020-04-24T20:36:06Z Christopher Baines <mail@cbaines.net> # Remove odd package derivations
build_servers_lookup_builds 2020-05-24T15:18:09Z Christopher Baines <mail@cbaines.net> # Add build_servers.lookup_builds
make_nar_urls_file_size_optional 2020-06-03T05:27:29Z Christopher Baines <mail@cbaines.net> # Make the nar_urls.file_size optional
translations_for_lint_checker_descriptions 2020-05-22T19:49:37Z daniela <daniela@linux-ijv5> # Support translations for lint checker descriptions

View file

@ -0,0 +1,7 @@
-- Verify guix-data-service:translations_for_lint_checker_descriptions on pg
BEGIN;
-- XXX Add verifications here.
ROLLBACK;