branch: elpa/magit
commit c170fcf39918e567948fec43b70a592765ed5fe7
Author: Jonas Bernoulli <jo...@bernoul.li>
Commit: Jonas Bernoulli <jo...@bernoul.li>

    Distribute git-commit.el as part of magit
---
 CHANGELOG          |   3 +
 lisp/git-commit.el | 181 ++++++++++++++---------------------------------------
 lisp/magit.el      |   1 -
 3 files changed, 50 insertions(+), 135 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 40f8864a48..9a08fca2e6 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,9 @@
 # -*- mode: org -*-
 * v4.1.0    UNRELEASED
 
+- The library ~git-commit.el~ is no longer distributed as a separate
+  package, ~git-commit~, but as part of the ~magit~ package.
+
 - Improved ~magit-tag-release~'s consistency and handling of arguments.
   #5102
 
diff --git a/lisp/git-commit.el b/lisp/git-commit.el
index 308e9c7513..a2578efcdc 100644
--- a/lisp/git-commit.el
+++ b/lisp/git-commit.el
@@ -8,17 +8,6 @@
 ;;     Marius Vollmer <marius.voll...@gmail.com>
 ;; Maintainer: Jonas Bernoulli <emacs.ma...@jonas.bernoulli.dev>
 
-;; Homepage: https://github.com/magit/magit
-;; Keywords: git tools vc
-
-;; Package-Version: 4.0.0
-;; Package-Requires: (
-;;     (emacs "26.1")
-;;     (compat "30.0.0.0")
-;;     (seq "2.24")
-;;     (transient "0.7.4")
-;;     (with-editor "3.4.1"))
-
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 
 ;; Magit is free software: you can redistribute it and/or modify
@@ -111,13 +100,7 @@
 
 ;;; Code:
 
-(require 'compat)
-(require 'subr-x)
-
-(when (and (featurep 'seq)
-           (not (fboundp 'seq-keep)))
-  (unload-feature 'seq 'force))
-(require 'seq)
+(require 'magit-mode)
 
 (require 'log-edit)
 (require 'ring)
@@ -125,17 +108,6 @@
 (require 'transient)
 (require 'with-editor)
 
-;; For historic reasons Magit isn't a hard dependency.
-(require 'magit-base nil t)
-(require 'magit-git nil t)
-(declare-function magit-completing-read "magit-base"
-                  ( prompt collection &optional predicate require-match
-                    initial-input hist def fallback))
-(declare-function magit-expand-git-file-name "magit-git" (filename))
-(declare-function magit-git-lines "magit-git" (&rest args))
-(declare-function magit-hook-custom-get "magit-base" (symbol))
-(declare-function magit-list-local-branch-names "magit-git" ())
-
 (defvar diff-default-read-only)
 (defvar flyspell-generic-check-word-predicate)
 (defvar font-lock-beg)
@@ -229,7 +201,7 @@ Also note that `git-commit-mode' (which see) is not a 
major-mode.")
   "Hook run at the end of `git-commit-setup'."
   :group 'git-commit
   :type 'hook
-  :get (and (featurep 'magit-base) #'magit-hook-custom-get)
+  :get #'magit-hook-custom-get
   :options '(git-commit-ensure-comment-gap
              git-commit-save-message
              git-commit-setup-changelog-support
@@ -254,12 +226,10 @@ 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.
 
-This hook is only run if `magit' is available.
-
 Also see `magit-post-commit-hook'."
   :group 'git-commit
   :type 'hook
-  :get (and (featurep 'magit-base) #'magit-hook-custom-get))
+  :get #'magit-hook-custom-get)
 
 (defcustom git-commit-post-finish-hook-timeout 1
   "Time in seconds to wait for git to create a commit.
@@ -335,9 +305,7 @@ serves as a good introduction."
   "Whether to use a local message ring instead of the global one.
 
 This can be set globally, in which case every repository gets its
-own commit message ring, or locally for a single repository.  If
-Magit isn't available, then setting this to a non-nil value has
-no effect."
+own commit message ring, or locally for a single repository."
   :group 'git-commit
   :safe 'booleanp
   :type 'boolean)
@@ -402,18 +370,13 @@ In this context a \"keyword\" is text surrounded by 
brackets."
   :group 'git-commit-faces)
 
 (defface git-commit-comment-branch-local
-  (if (featurep 'magit)
-      '((t :inherit magit-branch-local))
-    '((t :inherit font-lock-variable-name-face)))
+  '((t :inherit magit-branch-local))
   "Face used for names of local branches in commit message comments."
   :group 'git-commit-faces)
 
 (defface git-commit-comment-branch-remote
-  (if (featurep 'magit)
-      '((t :inherit magit-branch-remote))
-    '((t :inherit font-lock-variable-name-face)))
-  "Face used for names of remote branches in commit message comments.
-This is only used if Magit is available."
+  '((t :inherit magit-branch-remote))
+  "Face used for names of remote branches in commit message comments."
   :group 'git-commit-faces)
 
 (defface git-commit-comment-detached
@@ -532,16 +495,7 @@ the redundant bindings, then set this to nil, before 
loading
                                            buffer-file-name)))
                   (not (file-accessible-directory-p
                         (file-name-directory buffer-file-name)))
-                  (if (require 'magit-git nil t)
-                      ;; Emacs prepends a "c:".
-                      (magit-expand-git-file-name
-                       (substring buffer-file-name 2))
-                    ;; Fallback if we can't load `magit-git'.
-                    (and (string-match
-                          "\\`[a-z]:/\\(cygdrive/\\)?\\([a-z]\\)/\\(.*\\)"
-                          buffer-file-name)
-                         (concat (match-string 2 buffer-file-name) ":/"
-                                 (match-string 3 buffer-file-name)))))))
+                  (magit-expand-git-file-name (substring buffer-file-name 
2)))))
     (when (file-accessible-directory-p (file-name-directory file))
       (let ((inhibit-read-only t))
         (insert-file-contents file t)
@@ -575,15 +529,8 @@ Used as the local value of `header-line-format', in buffer 
using
 
 (defun git-commit-setup ()
   (let ((gitdir default-directory)
-        (cd nil))
-    (when (and (fboundp 'magit-toplevel)
-               (boundp 'magit--separated-gitdirs))
-      ;; `magit-toplevel' is autoloaded and defined in magit-git.el.  That
-      ;; library declares this function without loading magit-process.el,
-      ;; which defines it.
-      (require 'magit-process nil t)
-      (when git-commit-cd-to-toplevel
-        (setq cd (or (car (rassoc default-directory magit--separated-gitdirs))
+        (cd (and git-commit-cd-to-toplevel
+                 (or (car (rassoc default-directory magit--separated-gitdirs))
                      (magit-toplevel)))))
     ;; Pretend that git-commit-mode is a major-mode,
     ;; so that directory-local settings can be used.
@@ -595,7 +542,6 @@ Used as the local value of `header-line-format', in buffer 
using
                     ;; because the maintainer can use the latter
                     ;; to enforce conventions, while s/he has no
                     ;; control over the former.
-                    (fboundp 'magit-toplevel)
                     (or cd (magit-toplevel)))
                gitdir)))
       (let ((buffer-file-name nil)         ; trick hack-dir-local-variables
@@ -634,14 +580,13 @@ 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))
-  (when (and (fboundp 'magit-rev-parse)
-             (not (memq last-command
-                        '(magit-sequencer-continue
-                          magit-sequencer-skip
-                          magit-am-continue
-                          magit-am-skip
-                          magit-rebase-continue
-                          magit-rebase-skip))))
+  (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"))
@@ -667,9 +612,7 @@ Used as the local value of `header-line-format', in buffer 
using
   (with-editor-usage-message))
 
 (defun git-commit-run-post-finish-hook (previous)
-  (when (and git-commit-post-finish-hook
-             (require 'magit nil t)
-             (fboundp 'magit-rev-parse))
+  (when git-commit-post-finish-hook
     (cl-block nil
       (let ((break (time-add (current-time)
                              (seconds-to-time
@@ -856,8 +799,7 @@ Save current message first."
         (when-let ((index (ring-member log-edit-comment-ring message)))
           (ring-remove log-edit-comment-ring index))
         (ring-insert log-edit-comment-ring message)
-        (when (and git-commit-use-local-message-ring
-                   (fboundp 'magit-repository-local-set))
+        (when git-commit-use-local-message-ring
           (magit-repository-local-set 'log-edit-comment-ring
                                       log-edit-comment-ring))
         (message "Message saved"))
@@ -865,8 +807,7 @@ Save current message first."
 
 (defun git-commit-prepare-message-ring ()
   (make-local-variable 'log-edit-comment-ring-index)
-  (when (and git-commit-use-local-message-ring
-             (fboundp 'magit-repository-local-get))
+  (when git-commit-use-local-message-ring
     (setq-local log-edit-comment-ring
                 (magit-repository-local-get
                  'log-edit-comment-ring
@@ -894,13 +835,6 @@ Save current message first."
              (setq str (replace-match "\n" t t str)))
            str))))
 
-;;; Utilities
-
-(defsubst git-commit-executable ()
-  (if (fboundp 'magit-git-executable)
-      (magit-git-executable)
-    "git"))
-
 ;;; Trailers
 
 (transient-define-prefix git-commit-insert-trailer ()
@@ -989,16 +923,14 @@ return name and email of the current user (you)."
     (list (or (getenv "GIT_AUTHOR_NAME")
               (getenv "GIT_COMMITTER_NAME")
               (with-demoted-errors "Error running 'git config user.name': %S"
-                (car (process-lines
-                      (git-commit-executable) "config" "user.name")))
+                (magit-get "user.name"))
               user-full-name
               (read-string "Name: "))
           (or (getenv "GIT_AUTHOR_EMAIL")
               (getenv "GIT_COMMITTER_EMAIL")
               (getenv "EMAIL")
               (with-demoted-errors "Error running 'git config user.email': %S"
-                (car (process-lines
-                      (git-commit-executable) "config" "user.email")))
+                (magit-get "user.email"))
               (read-string "Email: ")))))
 
 (defalias 'git-commit-self-ident #'git-commit-get-ident)
@@ -1007,23 +939,19 @@ return name and email of the current user (you)."
 
 (defun git-commit-read-ident (prompt)
   "Read a name and email, prompting with PROMPT, and return them.
-If Magit is available, read them using a single prompt, offering
-past commit authors as completion candidates.  The input must
-have the form \"NAME <EMAIL>\"."
-  (if (require 'magit-git nil t)
-      (let ((str (magit-completing-read
-                  prompt
-                  (sort (delete-dups
-                         (magit-git-lines "log" "-n9999" "--format=%aN <%ae>"))
-                        #'string<)
-                  nil nil nil 'git-commit-read-ident-history)))
-        (save-match-data
-          (if (string-match "\\`\\([^<]+\\) *<\\([^>]+\\)>\\'" str)
-              (list (save-match-data (string-trim (match-string 1 str)))
-                    (string-trim (match-string 2 str)))
-            (user-error "Invalid input"))))
-    (list (read-string "Name: ")
-          (read-string "Email: "))))
+Read them using a single prompt, offering past commit authors as
+completion candidates.  The input must have the form \"NAME <EMAIL>\"."
+  (let ((str (magit-completing-read
+              prompt
+              (sort (delete-dups
+                     (magit-git-lines "log" "-n9999" "--format=%aN <%ae>"))
+                    #'string<)
+              nil nil nil 'git-commit-read-ident-history)))
+    (save-match-data
+      (if (string-match "\\`\\([^<]+\\) *<\\([^>]+\\)>\\'" str)
+          (list (save-match-data (string-trim (match-string 1 str)))
+                (string-trim (match-string 2 str)))
+        (user-error "Invalid input")))))
 
 (defun git-commit--insert-ident-trailer (trailer name email)
   (git-commit--insert-trailer trailer (format "%s <%s>" name email)))
@@ -1196,17 +1124,7 @@ Added to `font-lock-extend-region-functions'."
       (modify-syntax-entry ?\' "." table)
       (modify-syntax-entry ?`  "." table)
       (set-syntax-table table))
-    (setq-local comment-start
-                (or (with-temp-buffer
-                      (and (zerop
-                            (call-process
-                             (git-commit-executable) nil (list t nil) nil
-                             "config" "core.commentchar"))
-                           (not (bobp))
-                           (progn
-                             (goto-char (point-min))
-                             (buffer-substring (point) (line-end-position)))))
-                    "#"))
+    (setq-local comment-start (or (magit-get "core.commentchar") "#"))
     (setq-local comment-start-skip (format "^%s+[\s\t]*" comment-start))
     (setq-local comment-end "")
     (setq-local comment-end-skip "\n")
@@ -1219,22 +1137,17 @@ Added to `font-lock-extend-region-functions'."
                                  (aref comment-start 0)))
                          (markdown-fill-paragraph justify)))))
     (setq-local git-commit--branch-name-regexp
-                (if (and (featurep 'magit-git)
-                         ;; When using cygwin git, we may end up in a
-                         ;; non-existing directory, which would cause
-                         ;; any git calls to signal an error.
-                         (file-accessible-directory-p default-directory))
-                    (progn
-                      ;; Make sure the below functions are available.
-                      (require 'magit)
-                      ;; Font-Lock wants every submatch to succeed, so
-                      ;; also match the empty string.  Avoid listing
-                      ;; remote branches and using `regexp-quote',
-                      ;; because in repositories that have thousands of
-                      ;; branches that would be very slow.  See #4353.
-                      (format "\\(\\(?:%s\\)\\|\\)\\([^']+\\)"
-                              (string-join (magit-list-local-branch-names)
-                                           "\\|")))
+                ;; When using cygwin git, we may end up in a
+                ;; non-existing directory, which would cause
+                ;; any git calls to signal an error.
+                (if (file-accessible-directory-p default-directory)
+                    ;; Font-Lock wants every submatch to succeed, so
+                    ;; also match the empty string.  Avoid listing
+                    ;; remote branches and using `regexp-quote',
+                    ;; because in repositories that have thousands of
+                    ;; branches that would be very slow.  See #4353.
+                    (format "\\(\\(?:%s\\)\\|\\)\\([^']+\\)"
+                            (string-join (magit-list-local-branch-names) 
"\\|"))
                   "\\([^']*\\)"))
     (setq-local font-lock-multiline t)
     (add-hook 'font-lock-extend-region-functions
diff --git a/lisp/magit.el b/lisp/magit.el
index e6172daa2b..2b87820795 100644
--- a/lisp/magit.el
+++ b/lisp/magit.el
@@ -22,7 +22,6 @@
 ;;     (emacs "26.1")
 ;;     (compat "30.0.0.0")
 ;;     (dash "2.19.1")
-;;     (git-commit "4.0.0")
 ;;     (magit-section "4.0.0")
 ;;     (seq "2.24")
 ;;     (transient "0.7.4")

Reply via email to