discussion and development of piem
 help / color / mirror / code / Atom feed
* [PATCH] b4: Clean up temporary directories by default
@ 2020-09-27  6:14 Kyle Meyer
  0 siblings, 0 replies; only message in thread
From: Kyle Meyer @ 2020-09-27  6:14 UTC (permalink / raw)
  To: piem

Each piem-b4-am-from-mid call works in a new temporary directory.
Aside from debugging, there's no reason to keep these directories
around, polluting temporary-file-directory.
 piem-b4.el | 45 ++++++++++++++++++++++++++++++---------------
 1 file changed, 30 insertions(+), 15 deletions(-)

diff --git a/piem-b4.el b/piem-b4.el
index 75b2344..31bf6f1 100644
--- a/piem-b4.el
+++ b/piem-b4.el
@@ -50,12 +50,18 @@ (defcustom piem-b4-b4-executable "b4"
 ;;;; Internals
+(defvar piem-b4-keep-temp-directory nil
+  "Don't clean up the directory created by `piem-b4-am-from-mid'.
+This is intended to be used for debugging purposes.")
 (defun piem-b4--get-am-files (mid coderepo args)
   (let* ((outdir (file-name-as-directory
                   (make-temp-file "piem-b4-" t)))
          (root (concat outdir "m"))
          (mbox-thread (concat root "-piem"))
-         (local-mbox-p nil))
+         (local-mbox-p nil)
+         (clean-fn (and (not piem-b4-keep-temp-directory)
+                        (lambda () (delete-directory outdir t)))))
     (when-let ((fn (run-hook-with-args-until-success
                     'piem-mid-to-thread-functions mid)))
       (with-temp-file mbox-thread
@@ -78,19 +84,25 @@ (defun piem-b4--get-am-files (mid coderepo args)
         (setq local-mbox-p t)))
     ;; Move to the coderepo so that we pick up any b4 configuration
     ;; from there.
-    (apply #'piem-process-call coderepo piem-b4-b4-executable "am"
-           (and local-mbox-p
-                (concat "--use-local-mbox=" mbox-thread))
-           (concat "--outdir=" outdir)
-           (concat "--mbox-name=m")
-           (append args (list mid)))
+    (condition-case err
+        (apply #'piem-process-call coderepo piem-b4-b4-executable "am"
+               (and local-mbox-p
+                    (concat "--use-local-mbox=" mbox-thread))
+               (concat "--outdir=" outdir)
+               (concat "--mbox-name=m")
+               (append args (list mid)))
+      (piem-process-error
+       (when clean-fn
+         (funcall clean-fn))
+       (signal (car err) (cdr err))))
     (let ((mbox-cover (concat root ".cover"))
           (mbox-am (concat root ".mbx")))
       (list (and (file-exists-p mbox-cover)
             (if (file-exists-p mbox-am)
-              (error "Expected mbox file does not exist: %s" mbox-am))))))
+              (error "Expected mbox file does not exist: %s" mbox-am))
+            clean-fn))))
 ;;;; Commands
@@ -135,15 +147,18 @@ (defun piem-b4-am-from-mid (mid &optional args)
     (user-error "%s is incompatible with this command" badopt))
   (pcase-let* ((coderepo (piem-inbox-coderepo-maybe-read))
-               (`(,cover ,mbox-file)
+               (`(,cover ,mbox-file ,clean-fn)
                 (piem-b4--get-am-files mid coderepo args))
                (default-directory coderepo))
-    (piem-am mbox-file
-             nil
-             (with-temp-buffer
-               (insert-file-contents (or cover mbox-file))
-               (piem-extract-mbox-info))
-             coderepo)))
+    (unwind-protect
+        (piem-am mbox-file
+                 nil
+                 (with-temp-buffer
+                   (insert-file-contents (or cover mbox-file))
+                   (piem-extract-mbox-info))
+                 coderepo)
+      (when clean-fn
+        (funcall clean-fn)))))
 (define-infix-argument piem-b4-am:--outdir ()
   :description "Output directory"

base-commit: 4cc9f39ad142600eea706094d3e2a58eba13e073

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2020-09-27  6:14 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-27  6:14 [PATCH] b4: Clean up temporary directories by default Kyle Meyer

Code repositories for project(s) associated with this public inbox


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).