From 788d02865aa0a0e776ed65defbbd584a236dfdfb Mon Sep 17 00:00:00 2001 From: Arun Isaac Date: Sat, 28 Jan 2023 23:44:40 +0000 Subject: git: Abstract temporary checkout. * tissue/git.scm (call-with-temporary-checkout, call-with-temporary-checkouts): New public functions. * .dir-locals.el (scheme-mode): Set scheme-indent-function of call-with-temporary-checkout and call-with-temporary-checkouts to 1. --- tissue/git.scm | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'tissue') diff --git a/tissue/git.scm b/tissue/git.scm index 562e715..653f8ae 100644 --- a/tissue/git.scm +++ b/tissue/git.scm @@ -47,7 +47,9 @@ git-tracked-files call-with-file-in-git file-modification-table - clone-options)) + clone-options + call-with-temporary-checkout + call-with-temporary-checkouts)) ;; We bind additional functions from libgit2 that are not already ;; bound in guile-git. TODO: Contribute them to guile-git. @@ -211,3 +213,22 @@ that modified them." 'bare (if bare? 1 0)) clone-options)) + +(define (call-with-temporary-checkout repository proc) + "Call PROC with a temporary checkout of REPOSITORY, and delete the +checkout when PROC returns or exits non-locally." + (call-with-temporary-directory + (lambda (temporary-checkout) + (clone repository temporary-checkout) + (proc temporary-checkout)))) + +(define (call-with-temporary-checkouts repositories proc) + "Call PROC with temporary checkouts of REPOSITORIES, and delete the +checkouts when PROC returns or exits non-locally." + (match repositories + ((repository other-repositories ...) + (call-with-temporary-checkout repository + (lambda (checkout) + (call-with-temporary-checkouts other-repositories + (cut proc checkout <...>))))) + (() (proc)))) -- cgit v1.2.3