diff options
| author | Jonas Bernoulli <jonas@bernoul.li> | 2025-12-15 23:22:36 +0100 |
|---|---|---|
| committer | Jonas Bernoulli <jonas@bernoul.li> | 2025-12-15 23:22:36 +0100 |
| commit | feaaa75897934f67b02015a6f1d338bd7cadc24d (patch) | |
| tree | afa5750c76cba08326394bd658c3c8fc0f777d1e /lisp/git-commit.el | |
| parent | 0749e8b6fc3573f823cb28051ff57692fbfdaf4f (diff) | |
Collect git-commit-post-finish-hook and support in one place
The goal is to (at least semi-) deprecate this eventually,
which is why I want it out of the way.
Diffstat (limited to 'lisp/git-commit.el')
| -rw-r--r-- | lisp/git-commit.el | 109 |
1 files changed, 57 insertions, 52 deletions
diff --git a/lisp/git-commit.el b/lisp/git-commit.el index 915f422..82c4dee 100644 --- a/lisp/git-commit.el +++ b/lisp/git-commit.el @@ -216,36 +216,6 @@ Also note that `git-commit-mode' (which see) is not a major-mode.") git-commit-propertize-diff bug-reference-mode)) -(defcustom git-commit-post-finish-hook nil - "Hook run after the user finished writing a commit message. - -\\<with-editor-mode-map>\ -This hook is only run after pressing \\[with-editor-finish] in a buffer used -to edit a commit message. If a commit is created without the -user typing a message into a buffer, then this hook is not run. - -This hook is not run until the new commit has been created. If -that takes Git longer than `git-commit-post-finish-hook-timeout' -seconds, then this hook isn't run at all. For certain commands -such as `magit-rebase-continue' this hook is never run because -doing so would lead to a race condition. - -Also see `magit-post-commit-hook'." - :group 'git-commit - :type 'hook - :get #'magit-hook-custom-get) - -(defcustom git-commit-post-finish-hook-timeout 2 - "Time in seconds to wait for git to create a commit. - -The hook `git-commit-post-finish-hook' (which see) is run only -after git is done creating a commit. If it takes longer than -`git-commit-post-finish-hook-timeout' seconds to create the -commit, then the hook is not run at all." - :group 'git-commit - :safe 'numberp - :type 'number) - (defcustom git-commit-finish-query-functions (list #'git-commit-check-style-conventions) "List of functions called to query before performing commit. @@ -586,17 +556,7 @@ Used as the local value of `header-line-format', in buffer using (when (fboundp 'magit-commit--reset-command) (add-hook 'with-editor-post-finish-hook #'magit-commit--reset-command) (add-hook 'with-editor-post-cancel-hook #'magit-commit--reset-command)) - (unless (memq last-command - '(magit-sequencer-continue - magit-sequencer-skip - magit-am-continue - magit-am-skip - magit-rebase-continue - magit-rebase-skip)) - (add-hook 'with-editor-post-finish-hook - (apply-partially #'git-commit-run-post-finish-hook - (magit-rev-parse "HEAD")) - nil t)) + (git-commit-add-post-finish-hook) (setq with-editor-cancel-message #'git-commit-cancel-message) (git-commit-setup-font-lock) @@ -615,17 +575,6 @@ Used as the local value of `header-line-format', in buffer using (setq with-editor-usage-message git-commit-usage-message)) (with-editor-usage-message)) -(defun git-commit-run-post-finish-hook (previous) - (when git-commit-post-finish-hook - (if (with-timeout (git-commit-post-finish-hook-timeout) - (while (equal (magit-rev-parse "HEAD") previous) - (sit-for 0.01)) - t) - (run-hooks 'git-commit-post-finish-hook) - (message "No commit created after %s second. Not running %s." - git-commit-post-finish-hook-timeout - 'git-commit-post-finish-hook)))) - (define-minor-mode git-commit-mode "Auxiliary minor mode used when editing Git commit messages. This mode is only responsible for setting up some key bindings. @@ -1201,6 +1150,62 @@ Elisp doc-strings, including this one. Unlike in doc-strings, (1 font-lock-constant-face prepend)) ("\"[^\"]*\"" (0 font-lock-string-face prepend)))) +;;; Post Hook + +(defcustom git-commit-post-finish-hook nil + "Hook run after the user finished writing a commit message. + +\\<with-editor-mode-map>\ +This hook is only run after pressing \\[with-editor-finish] in a buffer used +to edit a commit message. If a commit is created without the +user typing a message into a buffer, then this hook is not run. + +This hook is not run until the new commit has been created. If +that takes Git longer than `git-commit-post-finish-hook-timeout' +seconds, then this hook isn't run at all. For certain commands +such as `magit-rebase-continue' this hook is never run because +doing so would lead to a race condition. + +Also see `magit-post-commit-hook'." + :group 'git-commit + :type 'hook + :get #'magit-hook-custom-get) + +(defcustom git-commit-post-finish-hook-timeout 2 + "Time in seconds to wait for git to create a commit. + +The hook `git-commit-post-finish-hook' (which see) is run only +after git is done creating a commit. If it takes longer than +`git-commit-post-finish-hook-timeout' seconds to create the +commit, then the hook is not run at all." + :group 'git-commit + :safe 'numberp + :type 'number) + +(defun git-commit-add-post-finish-hook () + (unless (memq last-command + '(magit-sequencer-continue + magit-sequencer-skip + magit-am-continue + magit-am-skip + magit-rebase-continue + magit-rebase-skip)) + (add-hook 'with-editor-post-finish-hook + (apply-partially #'git-commit-run-post-finish-hook + (magit-rev-parse "HEAD")) + nil t))) + +(defun git-commit-run-post-finish-hook (previous) + (when git-commit-post-finish-hook + (if (with-timeout (git-commit-post-finish-hook-timeout) + (while (equal (magit-rev-parse "HEAD") previous) + (sit-for 0.01)) + t) + (run-hooks 'git-commit-post-finish-hook) + (message "No commit created after %s second. Not running %s." + git-commit-post-finish-hook-timeout + 'git-commit-post-finish-hook)))) + ;;; _ (define-obsolete-function-alias |
