changeset 98776:58d0fa1979cb

* vc-arch.el (vc-arch-dir-status): New function. (vc-arch-after-dir-status): New function.
author Magnus Henoch <mange@freemail.hu>
date Thu, 16 Oct 2008 11:48:42 +0000
parents 91b65d9aa48b
children 63f2a735a59d
files lisp/ChangeLog lisp/vc-arch.el
diffstat 2 files changed, 42 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Thu Oct 16 07:51:30 2008 +0000
+++ b/lisp/ChangeLog	Thu Oct 16 11:48:42 2008 +0000
@@ -1,3 +1,8 @@
+2008-10-16  Magnus Henoch  <mange@freemail.hu>
+
+	* vc-arch.el (vc-arch-dir-status): New function.
+	(vc-arch-after-dir-status): New function.
+
 2008-10-16  Glenn Morris  <rgm@gnu.org>
 
 	* man.el (Man-getpage-in-background): Force recent `man's to output
--- a/lisp/vc-arch.el	Thu Oct 16 07:51:30 2008 +0000
+++ b/lisp/vc-arch.el	Thu Oct 16 11:48:42 2008 +0000
@@ -288,6 +288,43 @@
 		    'up-to-date
 		  'edited)))))))))
 
+(defun vc-arch-dir-status (dir callback)
+  "Run 'tla inventory' for DIR and pass results to CALLBACK.
+CALLBACK expects (ENTRIES &optional MORE-TO-COME); see
+`vc-dir-refresh'."
+  (let ((default-directory dir))
+    (vc-arch-command t 'async nil "changes"))
+  ;; The updating could be done asynchronously.
+  (vc-exec-after
+   `(vc-arch-after-dir-status ',callback)))
+
+(defun vc-arch-after-dir-status (callback)
+  (let* ((state-map '(("M " . edited)
+		      ("Mb" . edited)	;binary
+		      ("D " . removed)
+		      ("D/" . removed)	;directory
+		      ("A " . added)
+		      ("A/" . added)	;directory
+		      ("=>" . renamed)
+		      ("/>" . renamed)	;directory
+		      ("lf" . symlink-to-file)
+		      ("fl" . file-to-symlink)
+		      ("--" . permissions-changed)
+		      ("-/" . permissions-changed) ;directory
+		      ))
+	 (state-map-regexp (regexp-opt (mapcar 'car state-map) t))
+	 (entry-regexp (concat "^" state-map-regexp " \\(.*\\)$"))
+	 result)
+    (goto-char (point-min))
+    ;;(message "Got %s" (buffer-string))
+    (while (re-search-forward entry-regexp nil t)
+      (let* ((state-string (match-string 1))
+	     (state (cdr (assoc state-string state-map)))
+	     (filename (match-string 2)))
+	(push (list filename state) result)))
+
+    (funcall callback result nil)))
+
 (defun vc-arch-working-revision (file)
   (let* ((root (expand-file-name "{arch}" (vc-arch-root file)))
 	 (defbranch (vc-arch-default-version file)))