]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/vc/vc-mtn.el (vc-mtn-revision-completion-table): Handle completion
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 15 Aug 2012 19:20:26 +0000 (15:20 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 15 Aug 2012 19:20:26 +0000 (15:20 -0400)
for composite selectors.
* lisp/vc/vc.el (vc-diff-build-argument-list-internal): Don't prevent
operation just because we can't find a previous revision.

lisp/ChangeLog
lisp/vc/vc-mtn.el
lisp/vc/vc.el

index cf8e3ee2181a48410eea4ceb10674ab3e2cf5699..cc42b1493eeca7dadeee87ed3e840bd41724f29c 100644 (file)
@@ -1,3 +1,10 @@
+2012-08-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * vc/vc-mtn.el (vc-mtn-revision-completion-table): Handle completion
+       for composite selectors.
+       * vc/vc.el (vc-diff-build-argument-list-internal): Don't prevent
+       operation just because we can't find a previous revision.
+
 2012-08-15  Chong Yidong  <cyd@gnu.org>
 
        * frame.el (set-frame-font): Accept font objects.
index 67c0f985ae12e3c750ae883157dfe2530443a47b..8429b2b213d592cbaabf422a57822fcbd0f0df13 100644 (file)
@@ -305,29 +305,28 @@ If nil, use the value of `vc-diff-switches'.  If t, use no switches."
       ids)))
 
 (defun vc-mtn-revision-completion-table (_files)
-  ;; TODO: Implement completion for selectors
-  ;; TODO: Implement completion for composite selectors.
   ;; What about using `files'?!?  --Stef
   (lambda (string pred action)
     (cond
+     ;; Special chars for composite selectors.
+     ((string-match ".*[^\\]\\(\\\\\\\\\\)*[/|;(]" string)
+      (completion-table-with-context (substring string 0 (match-end 0))
+                                     (vc-mtn-revision-completion-table nil)
+                                     (substring string (match-end 0))
+                                     pred action))
      ;; "Tag" selectors.
      ((string-match "\\`t:" string)
       (complete-with-action action
                             (mapcar (lambda (tag) (concat "t:" tag))
                                     (vc-mtn-list-tags))
                             string pred))
-     ;; "Branch" selectors.
-     ((string-match "\\`b:" string)
-      (complete-with-action action
-                            (mapcar (lambda (tag) (concat "b:" tag))
-                                    (vc-mtn-list-branches))
-                            string pred))
-     ;; "Head" selectors.  Not sure how they differ from "branch" selectors.
-     ((string-match "\\`h:" string)
-      (complete-with-action action
-                            (mapcar (lambda (tag) (concat "h:" tag))
-                                    (vc-mtn-list-branches))
-                            string pred))
+     ;; "Branch" or "Head" selectors.
+     ((string-match "\\`[hb]:" string)
+      (let ((prefix (match-string 0 string)))
+        (complete-with-action action
+                              (mapcar (lambda (tag) (concat prefix tag))
+                                      (vc-mtn-list-branches))
+                              string pred)))
      ;; "ID" selectors.
      ((string-match "\\`i:" string)
       (complete-with-action action
@@ -339,7 +338,13 @@ If nil, use the value of `vc-diff-switches'.  If t, use no switches."
       (complete-with-action action
                             '("t:" "b:" "h:" "i:"
                               ;; Completion not implemented for these.
-                              "a:" "c:" "d:" "e:" "l:")
+                              "c:" "a:" "k:" "d:" "m:" "e:" "l:" "i:" "p:"
+                              ;; These have no arg to complete.
+                              "u:" "w:"
+                              ;; Selector functions.
+                              "difference(" "lca(" "max(" "ancestors("
+                              "descendants(" "parents(" "children("
+                              "pick(")
                             string pred)))))
 
 
index 87028194aa27ea542e2edb059e6aca1ebbe8643c..ddb9565544da26d6d55f15c5c6ce1571561a2993 100644 (file)
@@ -1652,8 +1652,9 @@ Return t if the buffer had changes, nil otherwise."
       (setq rev1-default (vc-working-revision first)))
      ;; if the file is not locked, use last and previous revisions as defaults
      (t
-      (setq rev1-default (vc-call-backend backend 'previous-revision first
-                                          (vc-working-revision first)))
+      (setq rev1-default (ignore-errors ;If `previous-revision' doesn't work.
+                           (vc-call-backend backend 'previous-revision first
+                                            (vc-working-revision first))))
       (when (string= rev1-default "") (setq rev1-default nil))
       (setq rev2-default (vc-working-revision first))))
     ;; construct argument list