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,55 +20,12 @@
#: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
(exec-query conn
"
SELECT commit
FROM git_branches
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 (for-each
(lambda (table) (lambda (table)
(exec-query (exec-query
@ -98,12 +55,36 @@ WHERE job_id IN (
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 (string-join
(map (lambda (commit) (map (lambda (commit)
(string-append "'" commit "'")) (string-append "'" commit "'"))
commits) 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
(map (lambda (commit)
(string-append "'" commit "'"))
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