]> git.eshelyaron.com Git - emacs.git/commitdiff
* vc-git.el (vc-git--ls-files-state): New function.
authorDan Nicolaescu <dann@ics.uci.edu>
Thu, 3 Jan 2008 06:29:38 +0000 (06:29 +0000)
committerDan Nicolaescu <dann@ics.uci.edu>
Thu, 3 Jan 2008 06:29:38 +0000 (06:29 +0000)
(vc-git-dir-state): Use it instead of processing the status
results here.

lisp/ChangeLog
lisp/vc-git.el

index 224a63ed28322bc85d75d6df5ca9f108ba71f744..06972d33e2314fd201c8d34184fd42051d0a69f4 100644 (file)
@@ -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
index 64bcbeb0b2bb1f1964c007a60919f278ada2fbc7..c73c458fcb7484641b48f25d83357569ccb01a5b 100644 (file)
         'edited
       'up-to-date)))
 
-(defun vc-git-dir-state (dir)
-  "Git-specific version of `dir-state'."
-  ;; FIXME: This can't set 'ignored yet
+(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
-    (vc-git-command (current-buffer) nil nil "ls-files" "-t" "-c" "-m" "-o")
+    (apply 'vc-git-command (current-buffer) nil nil "ls-files" "-z" args)
     (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)))))
+    (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'."
+  (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'."