]> git.eshelyaron.com Git - emacs.git/commitdiff
(vc-cvs-parse-status, vc-cvs-after-dir-status): Detect
authorDan Nicolaescu <dann@ics.uci.edu>
Wed, 26 Mar 2008 07:15:05 +0000 (07:15 +0000)
committerDan Nicolaescu <dann@ics.uci.edu>
Wed, 26 Mar 2008 07:15:05 +0000 (07:15 +0000)
missing files.

lisp/ChangeLog
lisp/vc-cvs.el

index 44b84a4e1d96e04779eba9a9fefc8eeb4d401768..bb8f3cdd4efcf5e3059ceb2870a6ab258e1dd46e 100644 (file)
@@ -1,5 +1,8 @@
 2008-03-26  Dan Nicolaescu  <dann@ics.uci.edu>
 
+       * vc-cvs.el (vc-cvs-parse-status, vc-cvs-after-dir-status): Detect
+       missing files.
+
        * vc-git.el (vc-git-extra-menu-map): New key map.
        (vc-git-extra-menu, vc-git-extra-status-menu, vc-git-grep):
        New functions.
index a338b5115b8ea32b5b012fe9ab28fa3865b63f37..0d1a2be916436650cc690174559ea40c7858986b 100644 (file)
@@ -823,40 +823,42 @@ For an empty string, nil is returned (invalid CVS root)."
 Set file properties accordingly.  Unless FULL is t, parse only
 essential information. Note that this can never set the 'ignored
 state."
-  (let (file status)
+  (let (file status missing)
     (goto-char (point-min))
     (while (looking-at "? \\(.*\\)")
       (setq file (expand-file-name (match-string 1)))
       (vc-file-setprop file 'vc-state 'unregistered)
       (forward-line 1))
-    (if (re-search-forward "^File: " nil t)
-        (cond
-         ((looking-at "no file") nil)
-         ((re-search-forward "\\=\\([^ \t]+\\)" nil t)
-         (setq file (expand-file-name (match-string 1)))
-          (vc-file-setprop file 'vc-backend 'CVS)
-          (if (not (re-search-forward "\\=[ \t]+Status: \\(.*\\)" nil t))
-              (setq status "Unknown")
-            (setq status (match-string 1)))
-          (if (and full
-                   (re-search-forward
-                    "\\(RCS Version\\|RCS Revision\\|Repository revision\\):\
+    (when (re-search-forward "^File: " nil t)
+      (when (setq missing (looking-at "no file "))
+       (goto-char (match-end 0)))
+      (cond
+       ((re-search-forward "\\=\\([^ \t]+\\)" nil t)
+       (setq file (expand-file-name (match-string 1)))
+       (vc-file-setprop file 'vc-backend 'CVS)
+       (if (not (re-search-forward "\\=[ \t]+Status: \\(.*\\)" nil t))
+           (setq status "Unknown")
+         (setq status (match-string 1)))
+       (if (and full
+                (re-search-forward
+                 "\\(RCS Version\\|RCS Revision\\|Repository revision\\):\
 \[\t ]+\\([0-9.]+\\)"
-                    nil t))
-              (vc-file-setprop file 'vc-latest-revision (match-string 2)))
-          (vc-file-setprop
-           file 'vc-state
-           (cond
-            ((string-match "Up-to-date" status)
-             (vc-file-setprop file 'vc-checkout-time
-                              (nth 5 (file-attributes file)))
-             'up-to-date)
-            ((string-match "Locally Modified" status)             'edited)
-            ((string-match "Needs Merge" status)                  'needs-merge)
-            ((string-match "Needs \\(Checkout\\|Patch\\)" status) 'needs-patch)
-            ((string-match "Locally Added" status)                'added)
-            ((string-match "Locally Removed" status)              'removed)
-            (t 'edited))))))))
+                 nil t))
+           (vc-file-setprop file 'vc-latest-revision (match-string 2)))
+       (vc-file-setprop
+        file 'vc-state
+        (cond
+         ((string-match "Up-to-date" status)
+          (vc-file-setprop file 'vc-checkout-time
+                           (nth 5 (file-attributes file)))
+          'up-to-date)
+         ((string-match "Locally Modified" status)             'edited)
+         ((string-match "Needs Merge" status)                  'needs-merge)
+         ((string-match "Needs \\(Checkout\\|Patch\\)" status)
+          (if missing 'missing 'needs-patch))
+         ((string-match "Locally Added" status)                'added)
+         ((string-match "Locally Removed" status)              'removed)
+         (t 'edited))))))))
 
 (defun vc-cvs-dir-state-heuristic (dir)
   "Find the CVS state of all files in DIR, using only local information."
@@ -879,6 +881,7 @@ state."
        (status-str nil)
        (file nil)
        (result nil)
+       (missing nil)
        (subdir default-directory))
     (goto-char (point-min))
     (while
@@ -901,8 +904,9 @@ state."
        (forward-line 1))
       ;; A file entry.
       (when (re-search-forward "^File: " nil t)
+       (when (setq missing (looking-at "no file "))
+         (goto-char (match-end 0)))
        (cond
-        ((looking-at "no file") nil)
         ((re-search-forward "\\=\\([^ \t]+\\)" nil t)
          (setq file (file-relative-name 
                      (expand-file-name (match-string 1) subdir)))
@@ -915,7 +919,7 @@ state."
                   ((string-match "Locally Modified" status-str) 'edited)
                   ((string-match "Needs Merge" status-str) 'needs-merge)
                   ((string-match "Needs \\(Checkout\\|Patch\\)" status-str)
-                   'needs-patch)
+                   (if missing 'missing 'needs-patch))
                   ((string-match "Locally Added" status-str) 'added)
                   ((string-match "Locally Removed" status-str) 'removed)
                   (t 'edited)))