summary refs log tree commit diff
path: root/etc/snippets
diff options
context:
space:
mode:
authorLiliana Marie Prikler <liliana.prikler@gmail.com>2022-10-06 21:09:43 +0200
committerLiliana Marie Prikler <liliana.prikler@gmail.com>2022-10-06 21:16:46 +0200
commit5e63e51afee0f674ff2ac961e3103011f53035cd (patch)
tree6c5be57475feea9141c797d0ba1f3d2a7c9458b6 /etc/snippets
parentda281417cc381374345dd404b2f10b4cb07a87d2 (diff)
downloadguix-5e63e51afee0f674ff2ac961e3103011f53035cd.tar.gz
snippets: Fix move.
The current move is never correct.  It flip-flops between car and cadr for
the destination.  Since the position of the destination is not actually a
fixed point in the list of changes, use a more robust method of inferring it.

* etc/snippets/tempel/text-mode (move\ ): Infer source and destination from
washed diffs.  Process new module before destination.
Diffstat (limited to 'etc/snippets')
-rw-r--r--etc/snippets/tempel/text-mode38
1 files changed, 30 insertions, 8 deletions
diff --git a/etc/snippets/tempel/text-mode b/etc/snippets/tempel/text-mode
index da72b29d3c..364c21266d 100644
--- a/etc/snippets/tempel/text-mode
+++ b/etc/snippets/tempel/text-mode
@@ -122,12 +122,34 @@ text-mode :when (and (fboundp 'git-commit-mode) (git-commit-mode))
                                      nil 'noerror)
               (match-string-no-properties 1)))
           var)
-       ": Move to "
-       (concat "("
-               (string-replace "\.scm" ""
-                               (string-replace "/" " "
-                                               (car (magit-staged-files))))
-               ").")
+       ": Move to ("
+       (p (with-temp-buffer
+            (magit-git-wash #'magit-diff-wash-diffs
+              "diff" "--staged")
+            (goto-char (point-min))
+            (when (and
+                   (re-search-forward "\\+(define-public \\(\\S-+\\)"
+                                      nil 'noerror)
+                   (re-search-backward "modified[ ]*\\(\\S-+\\)"
+                                       nil 'noerror))
+              (string-replace
+               "\.scm" ""
+               (string-replace "/" " "
+                               (match-string-no-properties 1)))))
+          new-module)
+       ")." n
        n
-       n "* " (car (magit-staged-files)) " (" (s var) "): Move from here…"
-       n "* " (cadr (magit-staged-files)) " (" (s var) "): …to here.")
+       "* " (p (with-temp-buffer
+                  (magit-git-wash #'magit-diff-wash-diffs
+                    "diff" "--staged")
+                  (goto-char (point-min))
+                  (when (and
+                         (re-search-forward "\\-(define-public \\(\\S-+\\)"
+                                            nil 'noerror)
+                         (re-search-backward "modified[ ]*\\(\\S-+\\)"
+                                             nil 'noerror))
+                    (match-string-no-properties 1)))
+                source)
+       " (" (s var) "): Move from here…" n
+       "* " (concat (string-replace " " "/" new-module) ".scm")
+       " (" (s var) "): …to here.")