branch: externals/vc-hgcmd
commit 7e4fc392a03cbd26c90a3cce48f5148b3d4818c8
Author: muffinmad <andreyk....@gmail.com>
Commit: muffinmad <andreyk....@gmail.com>

    Custom function to edit initial commit message
---
 README.md   | 12 ++++++++++++
 vc-hgcmd.el | 43 +++++++++++++++++++++++++++++++++++++------
 2 files changed, 49 insertions(+), 6 deletions(-)

diff --git a/README.md b/README.md
index 0a454aa..57bf0b0 100644
--- a/README.md
+++ b/README.md
@@ -69,6 +69,18 @@ If `vc-create-tag` is invoked with prefix argument then 
named branch will be cre
 While committing merge changes commit message will be set to `merged <branch>` 
if
 different branch was merged or to `merged <node>`.
 
+Additionally predefined commit message passed to custom function 
`vc-hgcmd-log-edit-message-function` so one can change it. For example, to 
include current task in commit message:
+
+```elisp
+(defun my/hg-commit-message (original-message)
+  (if org-clock-current-task
+      (concat org-clock-current-task " " original-message)
+    original-message))
+
+(custom-set-variables
+ '(vc-hgcmd-log-edit-message-function 'my/hg-commit-message))
+```
+
 ## Installation
 
 `vc-hgcmd` available on [MELPA](http://melpa.org):
diff --git a/vc-hgcmd.el b/vc-hgcmd.el
index a716c1e..fa365db 100644
--- a/vc-hgcmd.el
+++ b/vc-hgcmd.el
@@ -5,7 +5,7 @@
 ;; Author: Andrii Kolomoiets <andreyk....@gmail.com>
 ;; Keywords: vc
 ;; URL: https://github.com/muffinmad/emacs-vc-hgcmd
-;; Package-Version: 1.2
+;; Package-Version: 1.3
 ;; Package-Requires: ((emacs "25.1"))
 
 ;; This file is NOT part of GNU Emacs.
@@ -72,7 +72,20 @@
 ;;
 ;; - Predefined commit message
 ;; While committing merge changes commit message will be set to 'merged 
<branch>' if
-;; different branch was merged or to 'merged <node>'
+;; different branch was merged or to 'merged <node>'.
+;;
+;; Additionally predefined commit message passed to custom function
+;; `vc-hgcmd-log-edit-message-function' so one can change it.
+;; For example, to include current task in commit message:
+;;
+;;     (defun my/hg-commit-message (original-message)
+;;       (if org-clock-current-task
+;;           (concat org-clock-current-task " " original-message)
+;;         original-message))
+;;
+;;     (custom-set-variables
+;;      '(vc-hgcmd-log-edit-message-function 'my/hg-commit-message))
+
 
 ;;; Code:
 
@@ -106,6 +119,15 @@ You can edit this arguments for specific pull command by 
invoke `vc-pull' with p
   "Initial value for hg push arguments when asked."
   :type '(string))
 
+(defcustom vc-hgcmd-log-edit-message-function nil
+  "Function to return string that will be used as initial value for log edit.
+First param will be commit message computed by backend: 'merged <branch>' if
+named branch was merged to current branch or 'merged <node>' if two heads on
+same branch was merged."
+  :type '(choice
+          (function)
+          (const :tag "Default commit message" nil)))
+
 
 ;;;; Consts. Customizing this can lead to unexpected behaviour
 
@@ -752,16 +774,25 @@ Insert 'Running command' and display buffer text if 
COMMAND"
 
 (declare-function log-edit-mode "log-edit" ())
 
-(defun vc-hgcmd--set-log-edit-summary ()
-  "Set summary of commit message to 'merged ...' if committing after merge."
+(defun vc-hgcmd--log-edit-default-message ()
+  "Return 'merged ...' if there are two parents."
   (let* ((parents (split-string (vc-hgcmd-command "log" "-r" "p1()+p2()" 
"--template" "{node}\\0{branch}\n") "\n"))
          (p1 (car parents))
          (p2 (cadr parents)))
     (when p2
       (let ((p1 (split-string p1 "\0"))
             (p2 (split-string p2 "\0")))
-        (save-excursion
-          (insert (concat "merged " (if (string= (cadr p1) (cadr p2)) (car p2) 
(cadr p2)))))))))
+        (concat "merged " (if (string= (cadr p1) (cadr p2)) (car p2) (cadr 
p2)))))))
+
+(defun vc-hgcmd--set-log-edit-summary ()
+  "Set summary of commit message to 'merged ...' if committing after merge."
+  (let* ((message (or (vc-hgcmd--log-edit-default-message) ""))
+         (message (if vc-hgcmd-log-edit-message-function
+                      (funcall vc-hgcmd-log-edit-message-function message)
+                    message)))
+    (when (and message (length message))
+      (save-excursion
+        (insert message)))))
 
 (defun vc-hgcmd-log-edit-toggle-close-branch ()
   "Toggle --close-branch commit option."

Reply via email to