emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/git-commit dd14e0c3c6: git-commit: Ignore leading comment


From: ELPA Syncer
Subject: [nongnu] elpa/git-commit dd14e0c3c6: git-commit: Ignore leading comment when inserting headers
Date: Sun, 15 Oct 2023 19:00:14 -0400 (EDT)

branch: elpa/git-commit
commit dd14e0c3c6604f97a447967f0c1ace9947a09e66
Author: Magnar Sveen <magnars@gmail.com>
Commit: Jonas Bernoulli <jonas@bernoul.li>

    git-commit: Ignore leading comment when inserting headers
    
    It is suggested in several places on the internet to use a git
    commit template, for instance here [1].  These often include a
    header comment:
    
        # Title: Summary, imperative, start upper case, don't end with a period
        # No more than 50 chars. #### 50 chars is here:  #
    
    [1]: 
https://gist.github.com/lisawolderiksen/a7b99d94c92c6671181611be1641c733
    
    This change ensures that headers are inserted after this leading
    comment (meaning there are no empty lines before it), instead of
    above it.  Headers are still inserted before the comments added
    by Git itself.
---
 lisp/git-commit.el | 33 ++++++++++++++++++++++-----------
 1 file changed, 22 insertions(+), 11 deletions(-)

diff --git a/lisp/git-commit.el b/lisp/git-commit.el
index f44ff2233e..558f376b9c 100644
--- a/lisp/git-commit.el
+++ b/lisp/git-commit.el
@@ -943,17 +943,28 @@ have the form \"NAME <EMAIL>\"."
 (defun git-commit-insert-header (header name email)
   (setq header (format "%s: %s <%s>" header name email))
   (save-excursion
-    (goto-char (point-max))
-    (cond ((re-search-backward "^[-a-zA-Z]+: [^<\n]+? <[^>\n]+>" nil t)
-           (end-of-line)
-           (insert ?\n header)
-           (unless (= (char-after) ?\n)
-             (insert ?\n)))
-          (t
-           (while (re-search-backward (concat "^" comment-start) nil t))
-           (unless (looking-back "\n\n" nil)
-             (insert ?\n))
-           (insert header ?\n)))
+    (let ((leading-comment-end nil))
+      ;; Make sure we skip forward past any leading comments.
+      (goto-char (point-min))
+      (while (looking-at comment-start)
+        (forward-line))
+      (setq leading-comment-end (point))
+      (goto-char (point-max))
+      (cond
+       ;; Look backwards for existing headers.
+       ((re-search-backward "^[-a-zA-Z]+: [^<\n]+? <[^>\n]+>" nil t)
+        (end-of-line)
+        (insert ?\n header)
+        (unless (= (char-after) ?\n)
+          (insert ?\n)))
+       ;; Or place the new header right before the first non-leading
+       ;; comments.
+       (t
+        (while (re-search-backward (concat "^" comment-start)
+                                   leading-comment-end t))
+        (unless (looking-back "\n\n" nil)
+          (insert ?\n))
+        (insert header ?\n))))
     (unless (or (eobp) (= (char-after) ?\n))
       (insert ?\n))))
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]