Split off delete-revisions-from-branch from delete-data-for-branch

To support not deleting all of the revisions.
This commit is contained in:
Christopher Baines 2020-09-26 18:20:26 +01:00
parent fb180e1ebd
commit 992a0af63e
2 changed files with 68 additions and 61 deletions

View file

@ -20,61 +20,18 @@
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:use-module (squee) #:use-module (squee)
#:use-module (guix-data-service database) #:use-module (guix-data-service database)
#:use-module (guix-data-service model package-derivation-by-guix-revision-range)
#:export (delete-data-for-branch #:export (delete-data-for-branch
delete-data-for-all-deleted-branches)) delete-data-for-all-deleted-branches))
(define (delete-data-for-branch conn git-repository-id branch-name) (define (delete-revisions-from-branch conn git-repository-id branch-name commits)
(define commits (define (delete-jobs conn)
(map car (for-each
(exec-query conn (lambda (table)
" (exec-query
SELECT commit conn
FROM git_branches (string-append
WHERE git_repository_id = $1 AND name = $2" "
(list (number->string git-repository-id)
branch-name))))
(with-postgresql-transaction
conn
(lambda (conn)
(exec-query
conn
(simple-format
#f
"
DELETE FROM git_branches
WHERE git_repository_id = ~A AND
name = '~A' AND
commit IN (~A)"
git-repository-id
branch-name
(string-join
(map (lambda (commit)
(string-append "'" commit "'"))
commits)
", ")))
(for-each
(lambda (table)
(exec-query
conn
(simple-format
#f
"
DELETE FROM ~A
WHERE branch_name = $1 AND git_repository_id = $2"
table)
(list branch-name
(number->string git-repository-id))))
'("package_derivations_by_guix_revision_range"))
(for-each
(lambda (table)
(exec-query
conn
(string-append
"
DELETE FROM " table " DELETE FROM " table "
WHERE job_id IN ( WHERE job_id IN (
SELECT id SELECT id
@ -88,22 +45,46 @@ WHERE job_id IN (
", ") ", ")
") ")
)"))) )")))
'("load_new_guix_revision_job_events" '("load_new_guix_revision_job_events"
"load_new_guix_revision_job_logs")) "load_new_guix_revision_job_logs"))
(exec-query (exec-query
conn conn
(string-append (string-append
" "
DELETE FROM load_new_guix_revision_jobs DELETE FROM load_new_guix_revision_jobs
WHERE git_repository_id = " (number->string git-repository-id) " AND WHERE git_repository_id = " (number->string git-repository-id) " AND
commit IN (" commit IN ("
(string-join
(map (lambda (commit)
(string-append "'" commit "'"))
commits)
", ")
")")))
(define (delete-from-git-branches conn)
(exec-query
conn
(simple-format
#f
"
DELETE FROM git_branches
WHERE git_repository_id = ~A AND
name = '~A' AND
commit IN (~A)"
git-repository-id
branch-name
(string-join (string-join
(map (lambda (commit) (map (lambda (commit)
(string-append "'" commit "'")) (string-append "'" commit "'"))
commits) commits)
", ") ", "))))
")"))
(with-postgresql-transaction
conn
(lambda (conn)
(delete-from-git-branches conn)
(delete-jobs conn)
(let ((guix-revision-ids (let ((guix-revision-ids
(map (map
@ -130,6 +111,14 @@ WHERE guix_revisions.git_repository_id = "
)"))))) )")))))
(unless (null? guix-revision-ids) (unless (null? guix-revision-ids)
(for-each (lambda (guix-revision-id)
(delete-guix-revision-package-derivation-entries
conn
git-repository-id
guix-revision-id
branch-name))
guix-revision-ids)
(for-each (for-each
(lambda (table) (lambda (table)
(exec-query (exec-query
@ -164,6 +153,22 @@ WHERE id IN ("
(string-join guix-revision-ids ", ") (string-join guix-revision-ids ", ")
")"))))))) ")")))))))
(define (delete-data-for-branch conn git-repository-id branch-name)
(define commits
(map car
(exec-query conn
"
SELECT commit
FROM git_branches
WHERE git_repository_id = $1 AND name = $2"
(list (number->string git-repository-id)
branch-name))))
(delete-revisions-from-branch conn
git-repository-id
branch-name
commits))
(define (delete-data-for-all-branches-but-master) (define (delete-data-for-all-branches-but-master)
(with-postgresql-connection (with-postgresql-connection
"data-deletion" "data-deletion"

View file

@ -20,7 +20,9 @@
#:use-module (squee) #:use-module (squee)
#:use-module (guix-data-service database) #:use-module (guix-data-service database)
#:use-module (guix-data-service utils) #:use-module (guix-data-service utils)
#:export (update-package-derivations-table #:export (delete-guix-revision-package-derivation-entries
insert-guix-revision-package-derivation-entries
update-package-derivations-table
rebuild-package-derivations-table)) rebuild-package-derivations-table))
(define (delete-guix-revision-package-derivation-entries conn (define (delete-guix-revision-package-derivation-entries conn