changeset 98532:69b1ca445635

(vc-cvs-after-dir-status): Parse the output for non existent files.
author Dan Nicolaescu <dann@ics.uci.edu>
date Mon, 06 Oct 2008 05:30:25 +0000
parents 8b46bfc83346
children 604d7c98ac1a
files lisp/ChangeLog lisp/vc-cvs.el
diffstat 2 files changed, 26 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Sun Oct 05 19:07:03 2008 +0000
+++ b/lisp/ChangeLog	Mon Oct 06 05:30:25 2008 +0000
@@ -1,3 +1,8 @@
+2008-10-06  Dan Nicolaescu  <dann@ics.uci.edu>
+
+	* vc-cvs.el (vc-cvs-after-dir-status): Parse the output for non
+	existent files.
+
 2008-10-05  Chong Yidong  <cyd@stupidchicken.com>
 
 	* international/mule-cmds.el (universal-coding-system-argument):
--- a/lisp/vc-cvs.el	Sun Oct 05 19:07:03 2008 +0000
+++ b/lisp/vc-cvs.el	Mon Oct 06 05:30:25 2008 +0000
@@ -830,13 +830,14 @@
 	(file nil)
 	(result nil)
 	(missing nil)
+	(ignore-next nil)
 	(subdir default-directory))
     (goto-char (point-min))
     (while
 	;; Look for either a file entry, an unregistered file, or a
 	;; directory change.
 	(re-search-forward
-	 "\\(^=+\n\\([^=c?\n].*\n\\|\n\\)+\\)\\|\\(\\(^?? .*\n\\)+\\)\\|\\(^cvs status: Examining .*\n\\)"
+	 "\\(^=+\n\\([^=c?\n].*\n\\|\n\\)+\\)\\|\\(\\(^?? .*\n\\)+\\)\\|\\(^cvs status: \\(Examining\\|nothing\\) .*\n\\)"
 	 nil t)
       ;; FIXME: get rid of narrowing here.
       (narrow-to-region (match-beginning 0) (match-end 0))
@@ -850,6 +851,21 @@
 		    (expand-file-name (match-string 1) subdir)))
 	(push (list file 'unregistered) result)
 	(forward-line 1))
+      (when (looking-at "cvs status: nothing known about")
+	;; We asked about a non existent file.  The output looks like this:
+
+	;; cvs status: nothing known about `lisp/v.diff'
+	;; ===================================================================
+	;; File: no file v.diff            Status: Unknown
+	;;
+	;;    Working revision:    No entry for v.diff
+	;;    Repository revision: No revision control file
+	;;
+
+	;; Due to narrowing in this iteration we only see the "cvs
+	;; status:" line, so just set a flag so that we can ignore the
+	;; file in the next iteration.
+	(setq ignore-next t))
       ;; A file entry.
       (when (re-search-forward "^File: \\(no file \\)?\\(.*[^ \t]\\)[ \t]+Status: \\(.*\\)" nil t)
 	(setq missing (match-string 1))
@@ -868,8 +884,10 @@
 	       ((string-match "File had conflicts " status-str) 'conflict)
 	       ((string-match "Unknown" status-str) 'unregistered)
 	       (t 'edited)))
-	(unless (eq status 'up-to-date)
-	  (push (list file status) result)))
+	(if ignore-next
+	    (setq ignore-next nil)
+	  (unless (eq status 'up-to-date)
+	    (push (list file status) result))))
       (goto-char (point-max))
       (widen))
     (funcall update-function result))