emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/vc-hg.el,v


From: Dan Nicolaescu
Subject: [Emacs-diffs] Changes to emacs/lisp/vc-hg.el,v
Date: Thu, 01 May 2008 06:35:13 +0000

CVSROOT:        /cvsroot/emacs
Module name:    emacs
Changes by:     Dan Nicolaescu <dann>   08/05/01 06:35:12

Index: vc-hg.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/vc-hg.el,v
retrieving revision 1.65
retrieving revision 1.66
diff -u -b -r1.65 -r1.66
--- vc-hg.el    29 Apr 2008 15:32:56 -0000      1.65
+++ vc-hg.el    1 May 2008 06:35:08 -0000       1.66
@@ -473,7 +473,27 @@
 
 (define-derived-mode vc-hg-incoming-mode vc-hg-log-view-mode "Hg-Incoming")
 
-;; XXX Experimental function for the vc-dired replacement.
+(defstruct (vc-hg-extra-fileinfo
+            (:copier nil)
+            (:constructor vc-hg-create-extra-fileinfo (rename-state 
extra-name))
+            (:conc-name vc-hg-extra-fileinfo->))
+  rename-state        ;; rename or copy state
+  extra-name)         ;; original name for copies and rename targets, new name 
for 
+
+(defun vc-hg-status-printer (info)
+  "Pretty-printer for the vc-dir-fileinfo structure."
+  (let ((extra (vc-dir-fileinfo->extra info)))
+    (vc-default-status-printer 'Hg info)
+    (when extra
+      (insert (propertize
+              (format "   (%s %s)"
+                      (case (vc-hg-extra-fileinfo->rename-state extra)
+                        ('copied "copied from")
+                        ('renamed-from "renamed from")
+                        ('renamed-to "renamed to"))
+                      (vc-hg-extra-fileinfo->extra-name extra))
+              'face 'font-lock-comment-face)))))
+
 (defun vc-hg-after-dir-status (update-function)
   (let ((status-char nil)
        (file nil)
@@ -484,24 +504,50 @@
                       (?M . edited)
                       (?I . ignored)
                       (?! . missing)
+                      (?  . copy-rename-line)
                       (?? . unregistered)))
        (translated nil)
-       (result nil))
+       (result nil)
+       (last-added nil)
+       (last-line-copy nil))
       (goto-char (point-min))
       (while (not (eobp))
-       (setq status-char (char-after))
+       (setq translated (cdr (assoc (char-after) translation)))
        (setq file
              (buffer-substring-no-properties (+ (point) 2)
                                              (line-end-position)))
-       (setq translated (assoc status-char translation))
-       (when (and translated (not (eq (cdr translated) 'up-to-date)))
-         (push (list file (cdr translated)) result))
+       (cond ((not translated)
+              (setq last-line-copy nil))
+             ((eq translated 'up-to-date)
+              (setq last-line-copy nil))
+             ((eq translated 'copy-rename-line)
+              ;; For copied files the output looks like this:
+              ;; A COPIED_FILE_NAME
+              ;;   ORIGINAL_FILE_NAME
+              (setf (nth 2 last-added) 
+                    (vc-hg-create-extra-fileinfo 'copied file))
+              (setq last-line-copy t))
+             ((and last-line-copy (eq translated 'removed))
+              ;; For renamed files the output looks like this:
+              ;; A NEW_FILE_NAME
+              ;;   ORIGINAL_FILE_NAME
+              ;; R ORIGINAL_FILE_NAME
+              ;; We need to adjust the previous entry to not think it is a 
copy.
+              (setf (vc-hg-extra-fileinfo->rename-state (nth 2 last-added))
+                    'renamed-from)
+              (push (list file translated
+                          (vc-hg-create-extra-fileinfo
+                           'renamed-to (nth 0 last-added))) result)
+              (setq last-line-copy nil))
+             (t
+              (setq last-added (list file translated nil))
+              (push last-added result)
+              (setq last-line-copy nil)))
        (forward-line))
       (funcall update-function result)))
 
-;; XXX Experimental function for the vc-dired replacement.
 (defun vc-hg-dir-status (dir update-function)
-  (vc-hg-command (current-buffer) 'async dir "status")
+  (vc-hg-command (current-buffer) 'async dir "status" "-C")
   (vc-exec-after
    `(vc-hg-after-dir-status (quote ,update-function))))
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]