]> git.eshelyaron.com Git - emacs.git/commitdiff
(vc-call-backend): Give better error message when backend function is missing.
authorStefan Monnier <monnier@iro.umontreal.ca>
Sat, 31 May 2003 17:43:28 +0000 (17:43 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sat, 31 May 2003 17:43:28 +0000 (17:43 +0000)
(vc-find-file-hook): USe unless.  Merge if and cond.

lisp/vc-hooks.el

index f6e39b76f85b8539a1e634bb7b622181f61f411d..2cec6fb2ae0700f0d8661e7d6349ad32d18cc995 100644 (file)
@@ -1,11 +1,12 @@
 ;;; vc-hooks.el --- resident support for version-control
 
-;; Copyright (C) 1992,93,94,95,96,98,99,2000  Free Software Foundation, Inc.
+;; Copyright (C) 1992,93,94,95,96,98,99,2000,2003
+;;           Free Software Foundation, Inc.
 
 ;; Author:     FSF (see vc.el for full credits)
 ;; Maintainer: Andre Spiegel <spiegel@gnu.org>
 
-;; $Id: vc-hooks.el,v 1.149 2003/05/07 17:22:28 monnier Exp $
+;; $Id: vc-hooks.el,v 1.150 2003/05/08 17:45:08 monnier Exp $
 
 ;; This file is part of GNU Emacs.
 
@@ -195,14 +196,15 @@ and else calls
     (apply 'vc-default-FUN BACKEND ARGS)
 
 It is usually called via the `vc-call' macro."
-  (let ((f (cdr (assoc function-name (get backend 'vc-functions)))))
-    (unless f
+  (let ((f (assoc function-name (get backend 'vc-functions))))
+    (if f (setq f (cdr f))
       (setq f (vc-find-backend-function backend function-name))
-      (put backend 'vc-functions (cons (cons function-name f)
-                                      (get backend 'vc-functions))))
-    (if (consp f)
-       (apply (car f) (cdr f) args)
-      (apply f args))))
+      (push (cons function-name f) (get backend 'vc-functions)))
+    (cond
+     ((null f)
+      (error "Sorry, %s is not implemented for %s" function-name backend))
+     ((consp f)        (apply (car f) (cdr f) args))
+     (t                (apply f args)))))
 
 (defmacro vc-call (fun file &rest args)
   ;; BEWARE!! `file' is evaluated twice!!
@@ -649,39 +651,39 @@ current, and kill the buffer that visits the link."
     (vc-file-clearprops buffer-file-name)
     (cond
      ((vc-backend buffer-file-name)
+      ;; Compute the state and put it in the modeline.
       (vc-mode-line buffer-file-name)
-      (cond ((not vc-make-backup-files)
-            ;; Use this variable, not make-backup-files,
-            ;; because this is for things that depend on the file name.
-            (make-local-variable 'backup-inhibited)
-            (setq backup-inhibited t))))
+      (unless vc-make-backup-files
+       ;; Use this variable, not make-backup-files,
+       ;; because this is for things that depend on the file name.
+       (set (make-local-variable 'backup-inhibited) t)))
      ((let* ((link (file-symlink-p buffer-file-name))
             (link-type (and link (vc-backend (file-chase-links link)))))
-       (if link-type
-            (cond ((eq vc-follow-symlinks nil)
-                   (message
+       (cond ((not link-type) nil)     ;Nothing to do.
+             ((eq vc-follow-symlinks nil)
+              (message
         "Warning: symbolic link to %s-controlled source file" link-type))
-                  ((or (not (eq vc-follow-symlinks 'ask))
-                      ;; If we already visited this file by following
-                      ;; the link, don't ask again if we try to visit
-                      ;; it again.  GUD does that, and repeated questions
-                      ;; are painful.
-                      (get-file-buffer
-                       (abbreviate-file-name
-                         (file-chase-links buffer-file-name))))
-
-                  (vc-follow-link)
-                  (message "Followed link to %s" buffer-file-name)
-                  (vc-find-file-hook))
-                  (t
-                   (if (yes-or-no-p (format
+             ((or (not (eq vc-follow-symlinks 'ask))
+                  ;; If we already visited this file by following
+                  ;; the link, don't ask again if we try to visit
+                  ;; it again.  GUD does that, and repeated questions
+                  ;; are painful.
+                  (get-file-buffer
+                   (abbreviate-file-name
+                    (file-chase-links buffer-file-name))))
+
+              (vc-follow-link)
+              (message "Followed link to %s" buffer-file-name)
+              (vc-find-file-hook))
+             (t
+              (if (yes-or-no-p (format
         "Symbolic link to %s-controlled source file; follow link? " link-type))
-                       (progn (vc-follow-link)
-                              (message "Followed link to %s" buffer-file-name)
-                              (vc-find-file-hook))
-                     (message
+                  (progn (vc-follow-link)
+                         (message "Followed link to %s" buffer-file-name)
+                         (vc-find-file-hook))
+                (message
         "Warning: editing through the link bypasses version control")
-                     )))))))))
+                ))))))))
 
 (add-hook 'find-file-hook 'vc-find-file-hook)