Mercurial > emacs
changeset 87525:77d4b0e5e5d2
* vc-git.el (vc-git--ls-files-state): New function.
(vc-git-dir-state): Use it instead of processing the status
results here.
author | Dan Nicolaescu <dann@ics.uci.edu> |
---|---|
date | Thu, 03 Jan 2008 06:29:38 +0000 |
parents | 7a64dd146336 |
children | 4fefdc5cff24 |
files | lisp/ChangeLog lisp/vc-git.el |
diffstat | 2 files changed, 24 insertions(+), 33 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Thu Jan 03 01:59:42 2008 +0000 +++ b/lisp/ChangeLog Thu Jan 03 06:29:38 2008 +0000 @@ -1,3 +1,9 @@ +2008-01-03 Alexandre Julliard <julliard@winehq.org> + + * vc-git.el (vc-git--ls-files-state): New function. + (vc-git-dir-state): Use it instead of processing the status + results here. + 2008-01-02 Eric S. Raymond <esr@snark.thyrsus.com> * progmodes/grep.el (grep-find-ignored-directories): Initialize
--- a/lisp/vc-git.el Thu Jan 03 01:59:42 2008 +0000 +++ b/lisp/vc-git.el Thu Jan 03 06:29:38 2008 +0000 @@ -151,41 +151,26 @@ 'edited 'up-to-date))) +(defun vc-git--ls-files-state (state &rest args) + "Set state to STATE on all files found with git-ls-files ARGS." + (with-temp-buffer + (apply 'vc-git-command (current-buffer) nil nil "ls-files" "-z" args) + (goto-char (point-min)) + (let ((start (point))) + (while (search-forward "\0" nil t) + (let ((file (expand-file-name + (buffer-substring-no-properties start (1- (point)))))) + (vc-file-setprop file 'vc-backend (if state 'Git 'none)) + (vc-file-setprop file 'vc-state state)) + (setq start (point)))))) + (defun vc-git-dir-state (dir) "Git-specific version of `dir-state'." - ;; FIXME: This can't set 'ignored yet - (with-temp-buffer - (vc-git-command (current-buffer) nil nil "ls-files" "-t" "-c" "-m" "-o") - (goto-char (point-min)) - (let ((status-char nil) - (file nil)) - (while (not (eobp)) - (setq status-char (char-after)) - (setq file - (expand-file-name - (buffer-substring-no-properties (+ (point) 2) - (line-end-position)))) - (cond - ;; The rest of the possible states in "git ls-files -t" output: - ;; K to be killed - ;; should not show up in vc-dired, so don't deal with them - ;; here. - ((eq status-char ?H) - (vc-file-setprop file 'vc-backend 'Git) - (vc-file-setprop file 'vc-state 'up-to-date)) - ((eq status-char ?R) - (vc-file-setprop file 'vc-backend 'Git) - (vc-file-setprop file 'vc-state 'removed)) - ((eq status-char ?M) - (vc-file-setprop file 'vc-backend 'Git) - (vc-file-setprop file 'vc-state 'edited)) - ((eq status-char ?C) - (vc-file-setprop file 'vc-backend 'Git) - (vc-file-setprop file 'vc-state 'edited)) - ((eq status-char ??) - (vc-file-setprop file 'vc-backend 'none) - (vc-file-setprop file 'vc-state nil))) - (forward-line))))) + (vc-git--ls-files-state 'up-to-date "-c") + (vc-git--ls-files-state 'edited "-m") + (vc-git--ls-files-state 'removed "-d") + (vc-git--ls-files-state 'ignored "-o" "-i" "--exclude-standard") + (vc-git--ls-files-state nil "-o" "--exclude-standard")) (defun vc-git-working-revision (file) "Git-specific version of `vc-working-revision'."