If new custom variable git-auto-revert is 't', after git-revert-file, revert corresponding emacs buffers from reverted files provided the buffers were not changed. This is how pcl-cvs behaves. * git-auto-revert: new customizable variable. * git-revert-some-buffers: new function. * git-revert-file: call git-revert-some-buffers. Signed-off-by: Sergei Organov <osv@xxxxxxxxx> --- contrib/emacs/git.el | 23 +++++++++++++++++++++++ 1 files changed, 23 insertions(+), 0 deletions(-) diff --git a/contrib/emacs/git.el b/contrib/emacs/git.el index d8a0638..c3c0c45 100644 --- a/contrib/emacs/git.el +++ b/contrib/emacs/git.el @@ -112,6 +112,11 @@ if there is already one that displays the same directory." :group 'git :type 'boolean) +(defcustom git-auto-revert t + "Non-nil if `git-revert-file' should automatically revert corresponding buffers." + :group 'git + :type 'boolean) + (defface git-status-face '((((class color) (background light)) (:foreground "purple")) @@ -989,6 +994,23 @@ Return the list of files that haven't been handled." (git-success-message "Removed" files)) (message "Aborting")))) +;; stolen from pcl-cvs's cvs-revert-if-needed +(defun git-revert-some-buffers (fis) + (dolist (fileinfo fis) + (let* ((file (git-fileinfo->name fileinfo)) + (buffer (find-buffer-visiting file))) + ;; For a revert to happen the user must be editing the file... + (unless (or (null buffer) + (buffer-modified-p buffer)) + (with-current-buffer buffer + (ignore-errors + (revert-buffer 'ignore-auto 'dont-ask 'preserve-modes) + ;; `preserve-modes' avoids changing the (minor) modes. But we + ;; do want to reset the mode for VC, so we do it explicitly. + (vc-find-file-hook) + (when (eq (git-fileinfo->state fileinfo) 'unmerged) + (smerge-mode 1)))))))) + (defun git-revert-file () "Revert changes to the marked file(s)." (interactive) @@ -1008,6 +1030,7 @@ Return the list of files that haven't been handled." (when modified (apply #'git-call-process-env nil nil "checkout" "HEAD" modified)) (git-update-status-files (append added modified) 'uptodate) + (if git-auto-revert (git-revert-some-buffers files)) (git-success-message "Reverted" (git-get-filenames files))))) (defun git-resolve-file () -- 1.5.4.18.gd0b8 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html