зеркало из https://github.com/microsoft/git.git
git.el: Set the default commit coding system from the repository config.
If not otherwise specified, take the default coding system for commits from the 'i18n.commitencoding' repository configuration value. Also set the buffer-file-coding-system variable in the log buffer to make the selected coding system visible on the modeline. Signed-off-by: Alexandre Julliard <julliard@winehq.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Родитель
a94f457e89
Коммит
14b4f2dbd1
|
@ -75,10 +75,11 @@ then to `add-log-mailing-address' and then to `user-mail-address'."
|
||||||
:type '(choice (const :tag "Default" nil)
|
:type '(choice (const :tag "Default" nil)
|
||||||
(string :tag "Email")))
|
(string :tag "Email")))
|
||||||
|
|
||||||
(defcustom git-commits-coding-system 'utf-8
|
(defcustom git-commits-coding-system nil
|
||||||
"Default coding system for the log message of git commits."
|
"Default coding system for the log message of git commits."
|
||||||
:group 'git
|
:group 'git
|
||||||
:type 'coding-system)
|
:type '(choice (const :tag "From repository config" nil)
|
||||||
|
(coding-system)))
|
||||||
|
|
||||||
(defcustom git-append-signed-off-by nil
|
(defcustom git-append-signed-off-by nil
|
||||||
"Whether to append a Signed-off-by line to the commit message before editing."
|
"Whether to append a Signed-off-by line to the commit message before editing."
|
||||||
|
@ -236,6 +237,15 @@ and returns the process output as a string."
|
||||||
(and (fboundp 'user-mail-address) (user-mail-address))
|
(and (fboundp 'user-mail-address) (user-mail-address))
|
||||||
(and (boundp 'user-mail-address) user-mail-address)))
|
(and (boundp 'user-mail-address) user-mail-address)))
|
||||||
|
|
||||||
|
(defun git-get-commits-coding-system ()
|
||||||
|
"Return the coding system to use for commits."
|
||||||
|
(let ((repo-config (git-config "i18n.commitencoding")))
|
||||||
|
(or git-commits-coding-system
|
||||||
|
(and repo-config
|
||||||
|
(fboundp 'locale-charset-to-coding-system)
|
||||||
|
(locale-charset-to-coding-system repo-config))
|
||||||
|
'utf-8)))
|
||||||
|
|
||||||
(defun git-escape-file-name (name)
|
(defun git-escape-file-name (name)
|
||||||
"Escape a file name if necessary."
|
"Escape a file name if necessary."
|
||||||
(if (string-match "[\n\t\"\\]" name)
|
(if (string-match "[\n\t\"\\]" name)
|
||||||
|
@ -327,7 +337,7 @@ and returns the process output as a string."
|
||||||
"Call git-commit-tree with buffer as input and return the resulting commit SHA1."
|
"Call git-commit-tree with buffer as input and return the resulting commit SHA1."
|
||||||
(let ((author-name (git-get-committer-name))
|
(let ((author-name (git-get-committer-name))
|
||||||
(author-email (git-get-committer-email))
|
(author-email (git-get-committer-email))
|
||||||
author-date log-start log-end args)
|
author-date log-start log-end args coding-system-for-write)
|
||||||
(when head
|
(when head
|
||||||
(push "-p" args)
|
(push "-p" args)
|
||||||
(push head args))
|
(push head args))
|
||||||
|
@ -350,12 +360,12 @@ and returns the process output as a string."
|
||||||
(push "-p" args)
|
(push "-p" args)
|
||||||
(push (match-string 1) args))))
|
(push (match-string 1) args))))
|
||||||
(setq log-start (point-min)))
|
(setq log-start (point-min)))
|
||||||
(setq log-end (point-max)))
|
(setq log-end (point-max))
|
||||||
|
(setq coding-system-for-write buffer-file-coding-system))
|
||||||
(git-get-string-sha1
|
(git-get-string-sha1
|
||||||
(with-output-to-string
|
(with-output-to-string
|
||||||
(with-current-buffer standard-output
|
(with-current-buffer standard-output
|
||||||
(let ((coding-system-for-write git-commits-coding-system)
|
(let ((env `(("GIT_AUTHOR_NAME" . ,author-name)
|
||||||
(env `(("GIT_AUTHOR_NAME" . ,author-name)
|
|
||||||
("GIT_AUTHOR_EMAIL" . ,author-email)
|
("GIT_AUTHOR_EMAIL" . ,author-email)
|
||||||
("GIT_COMMITTER_NAME" . ,(git-get-committer-name))
|
("GIT_COMMITTER_NAME" . ,(git-get-committer-name))
|
||||||
("GIT_COMMITTER_EMAIL" . ,(git-get-committer-email)))))
|
("GIT_COMMITTER_EMAIL" . ,(git-get-committer-email)))))
|
||||||
|
@ -888,6 +898,7 @@ and returns the process output as a string."
|
||||||
(let ((buffer (get-buffer-create "*git-commit*"))
|
(let ((buffer (get-buffer-create "*git-commit*"))
|
||||||
(merge-heads (git-get-merge-heads))
|
(merge-heads (git-get-merge-heads))
|
||||||
(dir default-directory)
|
(dir default-directory)
|
||||||
|
(coding-system (git-get-commits-coding-system))
|
||||||
(sign-off git-append-signed-off-by))
|
(sign-off git-append-signed-off-by))
|
||||||
(with-current-buffer buffer
|
(with-current-buffer buffer
|
||||||
(when (eq 0 (buffer-size))
|
(when (eq 0 (buffer-size))
|
||||||
|
@ -912,6 +923,7 @@ and returns the process output as a string."
|
||||||
(git-get-committer-name) (git-get-committer-email)))))))
|
(git-get-committer-name) (git-get-committer-email)))))))
|
||||||
(log-edit #'git-do-commit nil #'git-log-edit-files buffer)
|
(log-edit #'git-do-commit nil #'git-log-edit-files buffer)
|
||||||
(setq font-lock-keywords (font-lock-compile-keywords git-log-edit-font-lock-keywords))
|
(setq font-lock-keywords (font-lock-compile-keywords git-log-edit-font-lock-keywords))
|
||||||
|
(setq buffer-file-coding-system coding-system)
|
||||||
(re-search-forward (regexp-quote (concat git-log-msg-separator "\n")) nil t)))
|
(re-search-forward (regexp-quote (concat git-log-msg-separator "\n")) nil t)))
|
||||||
|
|
||||||
(defun git-find-file ()
|
(defun git-find-file ()
|
||||||
|
|
Загрузка…
Ссылка в новой задаче