From: Eric S. Raymond Date: Wed, 13 Aug 2014 08:05:45 +0000 (-0400) Subject: Integrate Rüdiger Sonderfeld's code for detecting conflicted files under git. X-Git-Tag: emacs-25.0.90~2635^2~679^2~474 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=2cc441ecbf093d2d7e319f2359b80fd358589b0f;p=emacs.git Integrate Rüdiger Sonderfeld's code for detecting conflicted files under git. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7bb7415bc9c..764d6d12c8a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2014-08-13 Eric S. Raymond + + * vc/vc-git.el (vc-git-conflicted-files): Integrate Rüdiger + Sonderfeld's code for detecting conflicted files using a status + listing. Useful in itself and a step towards better smerge + support. + 2014-08-12 Stefan Monnier * mpc.el (mpc-reorder): Don't bother splitting the "active"s elements diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index 9c8ab3ba393..3e9228601d8 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el @@ -102,6 +102,7 @@ ;; - delete-file (file) OK ;; - rename-file (old new) OK ;; - find-file-hook () NOT NEEDED +;; - conflicted-files OK ;;; Code: @@ -769,6 +770,23 @@ This prompts for a branch to merge from." (with-current-buffer buffer (vc-run-delayed (vc-compilation-mode 'git))) (vc-set-async-update buffer))) +(defun vc-git-conflicted-files (directory) + "Return the list of files with conflicts in DIRECTORY." + (let* ((status + (vc-git--run-command-string directory "status" "--porcelain" "--")) + (lines (split-string status "\n" 'omit-nulls)) + files) + (dolist (line lines files) + (when (string-match "\\([ MADRCU?!][ MADRCU?!]\\) \\(.+\\)\\(?: -> \\(.+\\)\\)?" + line) + (let ((state (match-string 1 line)) + (file (match-string 2 line))) + ;; See git-status(1). + (when (member state '("AU" "UD" "UA" ;; "DD" + "DU" "AA" "UU")) + (push file files))))))) + + ;;; HISTORY FUNCTIONS (autoload 'vc-setup-buffer "vc-dispatcher")