Slimmed right down the log-edit stuff.
This commit is contained in:
parent
03c5dec5b6
commit
b9ad56506c
2 changed files with 46 additions and 172 deletions
|
@ -46,13 +46,11 @@
|
||||||
(define-key map (kbd "F") (lambda ()
|
(define-key map (kbd "F") (lambda ()
|
||||||
(interactive)
|
(interactive)
|
||||||
(magit-key-mode 'pulling)))
|
(magit-key-mode 'pulling)))
|
||||||
(define-key map (kbd "c") (lambda ()
|
|
||||||
(interactive)
|
|
||||||
(magit-key-mode 'committing)))
|
|
||||||
(define-key map (kbd "l") (lambda ()
|
(define-key map (kbd "l") (lambda ()
|
||||||
(interactive)
|
(interactive)
|
||||||
(magit-key-mode 'logging)))
|
(magit-key-mode 'logging)))
|
||||||
(define-key map (kbd "$") 'magit-display-process)
|
(define-key map (kbd "$") 'magit-display-process)
|
||||||
|
(define-key map (kbd "c") 'magit-log-edit)
|
||||||
(define-key map (kbd "E") 'magit-interactive-rebase)
|
(define-key map (kbd "E") 'magit-interactive-rebase)
|
||||||
(define-key map (kbd "q") 'quit-window)
|
(define-key map (kbd "q") 'quit-window)
|
||||||
map))
|
map))
|
||||||
|
@ -192,6 +190,16 @@
|
||||||
("=a" "Author" "--author" read-from-minibuffer)
|
("=a" "Author" "--author" read-from-minibuffer)
|
||||||
("=g" "Grep" "--grep" read-from-minibuffer)))
|
("=g" "Grep" "--grep" read-from-minibuffer)))
|
||||||
|
|
||||||
|
(committing
|
||||||
|
(actions
|
||||||
|
("c" "Commit" magit-log-edit-commit))
|
||||||
|
(switches
|
||||||
|
("-s" "Signoff" "--signoff")
|
||||||
|
("-am" "Amend" "--amend")
|
||||||
|
("-al" "All" "--all"))
|
||||||
|
(arguments
|
||||||
|
("=a" "Author" "--author" read-from-minibuffer)))
|
||||||
|
|
||||||
(fetching
|
(fetching
|
||||||
(actions
|
(actions
|
||||||
("f" "Fetch" magit-fetch)
|
("f" "Fetch" magit-fetch)
|
||||||
|
|
204
magit.el
204
magit.el
|
@ -2987,10 +2987,10 @@ typing and automatically refreshes the status buffer."
|
||||||
|
|
||||||
(defvar magit-log-edit-mode-map
|
(defvar magit-log-edit-mode-map
|
||||||
(let ((map (make-sparse-keymap)))
|
(let ((map (make-sparse-keymap)))
|
||||||
(define-key map (kbd "C-c C-c") 'magit-log-edit-commit)
|
(define-key map (kbd "C-c C-c")
|
||||||
(define-key map (kbd "C-c C-a") 'magit-log-edit-toggle-amending)
|
(lambda ()
|
||||||
(define-key map (kbd "C-c C-s") 'magit-log-edit-toggle-signoff)
|
(interactive)
|
||||||
(define-key map (kbd "C-c C-e") 'magit-log-edit-toggle-allow-empty)
|
(magit-key-mode 'committing)))
|
||||||
(define-key map (kbd "M-p") 'log-edit-previous-comment)
|
(define-key map (kbd "M-p") 'log-edit-previous-comment)
|
||||||
(define-key map (kbd "M-n") 'log-edit-next-comment)
|
(define-key map (kbd "M-n") 'log-edit-next-comment)
|
||||||
(define-key map (kbd "C-c C-k") 'magit-log-edit-cancel-log-message)
|
(define-key map (kbd "C-c C-k") 'magit-log-edit-cancel-log-message)
|
||||||
|
@ -3028,136 +3028,35 @@ Prefix arg means justify as well."
|
||||||
(goto-char (point-max))
|
(goto-char (point-max))
|
||||||
(insert str "\n")))
|
(insert str "\n")))
|
||||||
|
|
||||||
(defconst magit-log-header-end "-- End of Magit header --\n")
|
|
||||||
|
|
||||||
(defun magit-log-edit-get-fields ()
|
|
||||||
(let ((buf (get-buffer magit-log-edit-buffer-name))
|
|
||||||
(result nil))
|
|
||||||
(if buf
|
|
||||||
(with-current-buffer buf
|
|
||||||
(goto-char (point-min))
|
|
||||||
(while (looking-at "^\\([A-Za-z0-9-_]+\\): *\\(.*\\)$")
|
|
||||||
(setq result (acons (intern (downcase (match-string 1)))
|
|
||||||
(match-string 2)
|
|
||||||
result))
|
|
||||||
(forward-line))
|
|
||||||
(if (not (looking-at (regexp-quote magit-log-header-end)))
|
|
||||||
(setq result nil))))
|
|
||||||
(nreverse result)))
|
|
||||||
|
|
||||||
(defun magit-log-edit-set-fields (fields)
|
|
||||||
(let ((buf (get-buffer-create magit-log-edit-buffer-name)))
|
|
||||||
(with-current-buffer buf
|
|
||||||
(goto-char (point-min))
|
|
||||||
(if (search-forward-regexp (format "^\\([A-Za-z0-9-_]+:.*\n\\)*%s"
|
|
||||||
(regexp-quote magit-log-header-end))
|
|
||||||
nil t)
|
|
||||||
(delete-region (match-beginning 0) (match-end 0)))
|
|
||||||
(goto-char (point-min))
|
|
||||||
(when fields
|
|
||||||
(while fields
|
|
||||||
(insert (capitalize (symbol-name (caar fields))) ": "
|
|
||||||
(cdar fields) "\n")
|
|
||||||
(setq fields (cdr fields)))
|
|
||||||
(insert magit-log-header-end)))))
|
|
||||||
|
|
||||||
(defun magit-log-edit-set-field (name value)
|
|
||||||
(let* ((fields (magit-log-edit-get-fields))
|
|
||||||
(cell (assq name fields)))
|
|
||||||
(cond (cell
|
|
||||||
(if value
|
|
||||||
(rplacd cell value)
|
|
||||||
(setq fields (delq cell fields))))
|
|
||||||
(t
|
|
||||||
(if value
|
|
||||||
(setq fields (append fields (list (cons name value)))))))
|
|
||||||
(magit-log-edit-set-fields fields)))
|
|
||||||
|
|
||||||
(defun magit-log-edit-get-field (name)
|
|
||||||
(cdr (assq name (magit-log-edit-get-fields))))
|
|
||||||
|
|
||||||
(defun magit-log-edit-toggle-field (name default)
|
|
||||||
"Toggle the log-edit field named NAME.
|
|
||||||
If it's currently unset, set it to DEFAULT (t or nil).
|
|
||||||
|
|
||||||
Return nil if the field is toggled off, and non-nil if it's
|
|
||||||
toggled on. When it's toggled on for the first time, return
|
|
||||||
'first."
|
|
||||||
(let* ((fields (magit-log-edit-get-fields))
|
|
||||||
(cell (assq name fields)) yesp)
|
|
||||||
(if cell
|
|
||||||
(progn
|
|
||||||
(setq yesp (equal (cdr cell) "yes"))
|
|
||||||
(rplacd cell (if yesp "no" "yes")))
|
|
||||||
(setq fields (acons name (if default "yes" "no") fields))
|
|
||||||
(setq yesp (if default 'first)))
|
|
||||||
(magit-log-edit-set-fields fields)
|
|
||||||
yesp))
|
|
||||||
|
|
||||||
(defun magit-log-edit-setup-author-env (author)
|
|
||||||
(cond (author
|
|
||||||
;; XXX - this is a bit strict, probably.
|
|
||||||
(or (string-match "\\(.*\\) <\\(.*\\)>, \\(.*\\)" author)
|
|
||||||
(error "Can't parse author string"))
|
|
||||||
;; Shucks, setenv destroys the match data.
|
|
||||||
(let ((name (match-string 1 author))
|
|
||||||
(email (match-string 2 author))
|
|
||||||
(date (match-string 3 author)))
|
|
||||||
(setenv "GIT_AUTHOR_NAME" name)
|
|
||||||
(setenv "GIT_AUTHOR_EMAIL" email)
|
|
||||||
(setenv "GIT_AUTHOR_DATE" date)))
|
|
||||||
(t
|
|
||||||
(setenv "GIT_AUTHOR_NAME")
|
|
||||||
(setenv "GIT_AUTHOR_EMAIL")
|
|
||||||
(setenv "GIT_AUTHOR_DATE"))))
|
|
||||||
|
|
||||||
(defun magit-log-edit-push-to-comment-ring (comment)
|
(defun magit-log-edit-push-to-comment-ring (comment)
|
||||||
(when (or (ring-empty-p log-edit-comment-ring)
|
(when (or (ring-empty-p log-edit-comment-ring)
|
||||||
(not (equal comment (ring-ref log-edit-comment-ring 0))))
|
(not (equal comment (ring-ref log-edit-comment-ring 0))))
|
||||||
(ring-insert log-edit-comment-ring comment)))
|
(ring-insert log-edit-comment-ring comment)))
|
||||||
|
|
||||||
(defun magit-log-edit-commit ()
|
(defun magit-log-edit-commit ()
|
||||||
"Finish edits and create new commit object.
|
"Finish edits and create new commit object.
|
||||||
\('git commit ...')"
|
\('git commit ...')"
|
||||||
(interactive)
|
(interactive)
|
||||||
(let* ((fields (magit-log-edit-get-fields))
|
(magit-log-edit-push-to-comment-ring (buffer-string))
|
||||||
(amend (equal (cdr (assq 'amend fields)) "yes"))
|
(magit-log-edit-cleanup)
|
||||||
(allow-empty (equal (cdr (assq 'allow-empty fields)) "yes"))
|
(if (= (buffer-size) 0)
|
||||||
(commit-all (equal (cdr (assq 'commit-all fields)) "yes"))
|
(insert "(Empty description)\n"))
|
||||||
(sign-off-field (assq 'sign-off fields))
|
(let ((commit-buf (current-buffer)))
|
||||||
(sign-off (if sign-off-field
|
(with-current-buffer (magit-find-buffer 'status default-directory)
|
||||||
(equal (cdr sign-off-field) "yes")
|
(apply #'magit-run-async-with-input commit-buf
|
||||||
magit-commit-signoff))
|
magit-git-executable
|
||||||
(tag-rev (cdr (assq 'tag-rev fields)))
|
(append
|
||||||
(tag-name (cdr (assq 'tag-name fields)))
|
magit-git-standard-options
|
||||||
(author (cdr (assq 'author fields))))
|
'("commit" "-F" "-")
|
||||||
(magit-log-edit-push-to-comment-ring (buffer-string))
|
magit-custom-options))))
|
||||||
(magit-log-edit-setup-author-env author)
|
(erase-buffer)
|
||||||
(magit-log-edit-set-fields nil)
|
(bury-buffer)
|
||||||
(magit-log-edit-cleanup)
|
(when (file-exists-p ".git/MERGE_MSG")
|
||||||
(if (= (buffer-size) 0)
|
(delete-file ".git/MERGE_MSG"))
|
||||||
(insert "(Empty description)\n"))
|
(magit-update-vc-modeline default-directory)
|
||||||
(let ((commit-buf (current-buffer)))
|
(when magit-pre-log-edit-window-configuration
|
||||||
(with-current-buffer (magit-find-buffer 'status default-directory)
|
(set-window-configuration magit-pre-log-edit-window-configuration)
|
||||||
(cond (tag-name
|
(setq magit-pre-log-edit-window-configuration nil)))
|
||||||
(magit-run-git-with-input commit-buf "tag" tag-name "-a" "-F" "-" tag-rev))
|
|
||||||
(t
|
|
||||||
(apply #'magit-run-async-with-input commit-buf
|
|
||||||
magit-git-executable
|
|
||||||
(append magit-git-standard-options
|
|
||||||
(list "commit" "-F" "-")
|
|
||||||
(if (and commit-all (not allow-empty)) '("--all") '())
|
|
||||||
(if amend '("--amend") '())
|
|
||||||
(if allow-empty '("--allow-empty"))
|
|
||||||
(if sign-off '("--signoff") '())))))))
|
|
||||||
(erase-buffer)
|
|
||||||
(bury-buffer)
|
|
||||||
(when (file-exists-p ".git/MERGE_MSG")
|
|
||||||
(delete-file ".git/MERGE_MSG"))
|
|
||||||
(magit-update-vc-modeline default-directory)
|
|
||||||
(when magit-pre-log-edit-window-configuration
|
|
||||||
(set-window-configuration magit-pre-log-edit-window-configuration)
|
|
||||||
(setq magit-pre-log-edit-window-configuration nil))))
|
|
||||||
|
|
||||||
(defun magit-log-edit-cancel-log-message ()
|
(defun magit-log-edit-cancel-log-message ()
|
||||||
"Abort edits and erase commit message being composed."
|
"Abort edits and erase commit message being composed."
|
||||||
|
@ -3171,26 +3070,6 @@ toggled on. When it's toggled on for the first time, return
|
||||||
(set-window-configuration magit-pre-log-edit-window-configuration)
|
(set-window-configuration magit-pre-log-edit-window-configuration)
|
||||||
(setq magit-pre-log-edit-window-configuration nil))))
|
(setq magit-pre-log-edit-window-configuration nil))))
|
||||||
|
|
||||||
(defun magit-log-edit-toggle-amending ()
|
|
||||||
"Toggle whether this will be an amendment to the previous commit.
|
|
||||||
\(i.e., whether eventual commit does 'git commit --amend')"
|
|
||||||
(interactive)
|
|
||||||
(when (eq (magit-log-edit-toggle-field 'amend t) 'first)
|
|
||||||
(magit-log-edit-append
|
|
||||||
(magit-format-commit "HEAD" "%s%n%n%b"))))
|
|
||||||
|
|
||||||
(defun magit-log-edit-toggle-signoff ()
|
|
||||||
"Toggle whether this commit will include a signoff.
|
|
||||||
\(i.e., whether eventual commit does 'git commit --signoff')"
|
|
||||||
(interactive)
|
|
||||||
(magit-log-edit-toggle-field 'sign-off (not magit-commit-signoff)))
|
|
||||||
|
|
||||||
(defun magit-log-edit-toggle-allow-empty ()
|
|
||||||
"Toggle whether this commit is allowed to be empty.
|
|
||||||
This means that the eventual commit does 'git commit --allow-empty'."
|
|
||||||
(interactive)
|
|
||||||
(magit-log-edit-toggle-field 'allow-empty t))
|
|
||||||
|
|
||||||
(defun magit-pop-to-log-edit (operation)
|
(defun magit-pop-to-log-edit (operation)
|
||||||
(let ((dir default-directory)
|
(let ((dir default-directory)
|
||||||
(buf (get-buffer-create magit-log-edit-buffer-name)))
|
(buf (get-buffer-create magit-log-edit-buffer-name)))
|
||||||
|
@ -3209,19 +3088,6 @@ This means that the eventual commit does 'git commit --allow-empty'."
|
||||||
(if (y-or-n-p "Rebase in progress. Continue it? ")
|
(if (y-or-n-p "Rebase in progress. Continue it? ")
|
||||||
(magit-run-git "rebase" "--continue")))
|
(magit-run-git "rebase" "--continue")))
|
||||||
(t
|
(t
|
||||||
(when (and magit-commit-all-when-nothing-staged
|
|
||||||
(not (magit-anything-staged-p)))
|
|
||||||
(cond ((eq magit-commit-all-when-nothing-staged 'ask-stage)
|
|
||||||
(if (and (not (magit-everything-clean-p))
|
|
||||||
(y-or-n-p "Nothing staged. Stage everything now? "))
|
|
||||||
(magit-stage-all)))
|
|
||||||
((not (magit-log-edit-get-field 'commit-all))
|
|
||||||
(magit-log-edit-set-field
|
|
||||||
'commit-all
|
|
||||||
(if (or (eq magit-commit-all-when-nothing-staged t)
|
|
||||||
(y-or-n-p
|
|
||||||
"Nothing staged. Commit all unstaged changes? "))
|
|
||||||
"yes" "no")))))
|
|
||||||
(magit-pop-to-log-edit "commit"))))
|
(magit-pop-to-log-edit "commit"))))
|
||||||
|
|
||||||
(defun magit-add-log ()
|
(defun magit-add-log ()
|
||||||
|
@ -3287,16 +3153,16 @@ This means that the eventual commit does 'git commit --allow-empty'."
|
||||||
(magit-read-rev "Place tag on: " (or (magit-default-rev) "HEAD"))))
|
(magit-read-rev "Place tag on: " (or (magit-default-rev) "HEAD"))))
|
||||||
(magit-run-git "tag" name rev))
|
(magit-run-git "tag" name rev))
|
||||||
|
|
||||||
(magit-define-command annotated-tag (name rev)
|
;; (magit-define-command annotated-tag (name rev)
|
||||||
"Start composing an annotated tag with the given NAME.
|
;; "Start composing an annotated tag with the given NAME.
|
||||||
Tag will point to the current 'HEAD'."
|
;; Tag will point to the current 'HEAD'."
|
||||||
(interactive
|
;; (interactive
|
||||||
(list
|
;; (list
|
||||||
(read-string "Tag name: ")
|
;; (read-string "Tag name: ")
|
||||||
(magit-read-rev "Place tag on: " (or (magit-default-rev) "HEAD"))))
|
;; (magit-read-rev "Place tag on: " (or (magit-default-rev) "HEAD"))))
|
||||||
(magit-log-edit-set-field 'tag-name name)
|
;; (magit-log-edit-set-field 'tag-name name)
|
||||||
(magit-log-edit-set-field 'tag-rev rev)
|
;; (magit-log-edit-set-field 'tag-rev rev)
|
||||||
(magit-pop-to-log-edit "tag"))
|
;; (magit-pop-to-log-edit "tag"))
|
||||||
|
|
||||||
;;; Stashing
|
;;; Stashing
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue