changeset 107972:d7f8e879d70c

Fix the version number for added files. * vc-hg.el (vc-hg-working-revision): Check if the file is registered after hg parent fails (Bug#5961).
author Dan Nicolaescu <dann@ics.uci.edu>
date Sat, 17 Apr 2010 09:10:19 -0700
parents ab970852cf46
children 34a427c407fe
files lisp/ChangeLog lisp/vc-hg.el
diffstat 2 files changed, 27 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Fri Apr 16 19:07:48 2010 -0700
+++ b/lisp/ChangeLog	Sat Apr 17 09:10:19 2010 -0700
@@ -1,3 +1,9 @@
+2010-04-17  Dan Nicolaescu  <dann@ics.uci.edu>
+
+	Fix the version number for added files.
+	* vc-hg.el (vc-hg-working-revision): Check if the file is
+	registered after hg parent fails (Bug#5961).
+
 2010-04-17  Glenn Morris  <rgm@gnu.org>
 
 	* htmlfontify.el (htmlfontify-buffer)
--- a/lisp/vc-hg.el	Fri Apr 16 19:07:48 2010 -0700
+++ b/lisp/vc-hg.el	Sat Apr 17 09:10:19 2010 -0700
@@ -196,16 +196,16 @@
   (let*
       ((status nil)
        (default-directory (file-name-directory file))
+       ;; Avoid localization of messages so we can parse the output.
+       (avoid-local-env (append (list "TERM=dumb" "LANGUAGE=C" "HGRC=")
+				     process-environment))
        (out
         (with-output-to-string
           (with-current-buffer
               standard-output
             (setq status
                   (condition-case nil
-		      (let ((process-environment
-			     ;; Avoid localization of messages so we can parse the output.
-			     (append (list "TERM=dumb" "LANGUAGE=C" "HGRC=")
-				     process-environment)))
+		      (let ((process-environment avoid-local-env))
 			;; Ignore all errors.
 			(process-file
 			 "hg" nil t nil
@@ -213,7 +213,23 @@
                     ;; Some problem happened.  E.g. We can't find an `hg'
                     ;; executable.
                     (error nil)))))))
-    (when (eq 0 status) out)))
+    (if (eq 0 status)
+	out
+      ;; Check if the file is in the 'added state, the above hg
+      ;; command does not distinguish between 'added and 'unregistered.
+      (setq status
+	    (condition-case nil
+		(let ((process-environment avoid-local-env))
+		  (process-file
+		   "hg" nil nil nil
+		   ;; We use "log" here, if there's a faster command
+		   ;; that returns true for an 'added file and false
+		   ;; for an 'unregistered one, we could use that.
+		   "log" "-l1" (file-relative-name file)))
+	      ;; Some problem happened.  E.g. We can't find an `hg'
+	      ;; executable.
+	      (error nil)))
+      (when (eq 0 status) "0"))))
 
 ;;; History functions