diff options
-rw-r--r-- | guix-data-service/data-deletion.scm | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/guix-data-service/data-deletion.scm b/guix-data-service/data-deletion.scm index 296e000..5d127c9 100644 --- a/guix-data-service/data-deletion.scm +++ b/guix-data-service/data-deletion.scm @@ -20,7 +20,8 @@ #:use-module (ice-9 match) #:use-module (squee) #:use-module (guix-data-service database) - #:export (delete-data-for-branch)) + #:export (delete-data-for-branch + delete-data-for-all-deleted-branches)) (define (delete-data-for-branch conn git-repository-id branch-name) (define commits @@ -179,6 +180,30 @@ SELECT DISTINCT name FROM git_branches WHERE git_repository_id = 1 AND name != 'master'")))))) +(define (delete-data-for-all-deleted-branches) + (with-postgresql-connection + "data-deletion" + (lambda (conn) + (for-each + (match-lambda + ((name git-repository-id) + (simple-format #t "deleting data for ~A (~A)\n" + name git-repository-id) + (delete-data-for-branch conn + (string->number git-repository-id) + name))) + (exec-query + conn + " +SELECT name, git_repository_id +FROM ( + SELECT DISTINCT ON (name, git_repository_id) + name, git_repository_id, commit + FROM git_branches + ORDER BY git_repository_id, name, datetime DESC +) AS git_branches_latest_revision +WHERE commit = ''"))))) + (define (delete-unreferenced-derivations) (define (maybe-delete-derivation conn id file-name) (match (map |