]> git.eshelyaron.com Git - emacs.git/commitdiff
Clean up vc*-revision-granularity and vc*-checkout-model.
authorEric S. Raymond <esr@snark.thyrsus.com>
Fri, 2 May 2008 17:47:25 +0000 (17:47 +0000)
committerEric S. Raymond <esr@snark.thyrsus.com>
Fri, 2 May 2008 17:47:25 +0000 (17:47 +0000)
12 files changed:
lisp/vc-arch.el
lisp/vc-bzr.el
lisp/vc-cvs.el
lisp/vc-git.el
lisp/vc-hg.el
lisp/vc-hooks.el
lisp/vc-mcvs.el
lisp/vc-mtn.el
lisp/vc-rcs.el
lisp/vc-sccs.el
lisp/vc-svn.el
lisp/vc.el

index 1573e55bd78134b5064279959cdb8612099376f1..18eddb6f9c766aa55db4a21740ca5c90b06933dc 100644 (file)
 
 (eval-when-compile (require 'vc) (require 'cl))
 
+;;; Properties of the backend
+
+(defun vc-arch-revision-granularity () 'repository)
+(defun vc-arch-checkout-model (files) 'implicit)
+
 ;;;
 ;;; Customization options
 ;;;
@@ -369,8 +374,6 @@ Return non-nil if FILE is unchanged."
        (message "There are unresolved conflicts in %s"
                 (file-name-nondirectory rej))))))
 
-(defun vc-arch-checkout-model (file) 'implicit)
-
 (defun vc-arch-checkin (files rev comment)
   (if rev (error "Committing to a specific revision is unsupported"))
   ;; FIXME: This implementation probably only works for singleton filesets
index 15529e20f0c7fd4543668da6365dd0ff19355010..3269bee7c0fecd66f599f588217b084af5863ed0 100644 (file)
 ;; For an up-to-date list of bugs, please see:
 ;;   https://bugs.launchpad.net/vc-bzr/+bugs
 
+;;; Properties of the backend
+
+(defun vc-bzr-revision-granularity () 'repository)
+(defun vc-bzr-checkout-model (files) 'implicit)
 
 ;;; Code:
 
@@ -346,8 +350,6 @@ If any error occurred in running `bzr status', then return nil."
          ((eq exitcode 0) (substring output 0 -1))
          (t nil))))))
 
-(defun vc-bzr-checkout-model (files) 'implicit)
-
 (defun vc-bzr-create-repo ()
   "Create a new Bzr repository."
   (vc-bzr-command "init" nil 0 nil))
index d67352ab250f948f364bbd2348e2d979ffee9ddb..5c3a93ff36f235f37e70a9d185b84e92c9785ca7 100644 (file)
 ;; new functions when we reload this file.
 (put 'CVS 'vc-functions nil)
 
+;;; Properties of the backend.
+
+(defun vc-cvs-revision-granularity () 'file)
+
+(defun vc-cvs-checkout-model (files)
+  "CVS-specific version of `vc-checkout-model'."
+  (if (getenv "CVSREAD")
+      'announce
+    (let* ((file (if (consp files) (car files) files))
+           (attrib (file-attributes file)))
+      (or (vc-file-getprop file 'vc-checkout-model)
+          (vc-file-setprop
+           file 'vc-checkout-model
+           (if (and attrib ;; don't check further if FILE doesn't exist
+                    ;; If the file is not writable (despite CVSREAD being
+                    ;; undefined), this is probably because the file is being
+                    ;; "watched" by other developers.
+                    ;; (If vc-mistrust-permissions was t, we actually shouldn't
+                    ;; trust this, but there is no other way to learn this from
+                    ;; CVS at the moment (version 1.9).)
+                    (string-match "r-..-..-." (nth 8 attrib)))
+               'announce
+             'implicit))))))
+
 ;;;
 ;;; Customization options
 ;;;
@@ -238,26 +262,6 @@ See also variable `vc-cvs-sticky-date-format-string'."
   (vc-cvs-registered file)
   (vc-file-getprop file 'vc-working-revision))
 
-(defun vc-cvs-checkout-model (files)
-  "CVS-specific version of `vc-checkout-model'."
-  (if (getenv "CVSREAD")
-      'announce
-    (let* ((file (if (consp files) (car files) files))
-           (attrib (file-attributes file)))
-      (or (vc-file-getprop file 'vc-checkout-model)
-          (vc-file-setprop
-           file 'vc-checkout-model
-           (if (and attrib ;; don't check further if FILE doesn't exist
-                    ;; If the file is not writable (despite CVSREAD being
-                    ;; undefined), this is probably because the file is being
-                    ;; "watched" by other developers.
-                    ;; (If vc-mistrust-permissions was t, we actually shouldn't
-                    ;; trust this, but there is no other way to learn this from
-                    ;; CVS at the moment (version 1.9).)
-                    (string-match "r-..-..-." (nth 8 attrib)))
-               'announce
-             'implicit))))))
-
 (defun vc-cvs-mode-line-string (file)
   "Return string for placement into the modeline for FILE.
 Compared to the default implementation, this function does two things:
@@ -393,7 +397,7 @@ REV is the revision to check out."
     (if (and (file-exists-p file) (not rev))
         ;; If no revision was specified, just make the file writable
         ;; if necessary (using `cvs-edit' if requested).
-        (and editable (not (eq (vc-cvs-checkout-model file) 'implicit))
+        (and editable (not (eq (vc-cvs-checkout-model (list file)) 'implicit))
              (if vc-cvs-use-edit
                  (vc-cvs-command nil 0 file "edit")
                (set-file-modes file (logior (file-modes file) 128))
@@ -421,7 +425,7 @@ REV is the revision to check out."
 (defun vc-cvs-revert (file &optional contents-done)
   "Revert FILE to the working revision on which it was based."
   (vc-default-revert 'CVS file contents-done)
-  (unless (eq (vc-cvs-checkout-model file) 'implicit)
+  (unless (eq (vc-cvs-checkout-model (list file)) 'implicit)
     (if vc-cvs-use-edit
         (vc-cvs-command nil 0 file "unedit")
       ;; Make the file read-only by switching off all w-bits
index 9c8ebfc9993bfd92b3ac215ce5ba1b77dfa3fa0b..ed13cb920812a99fa63a5151a2def9d66045602e 100644 (file)
@@ -55,7 +55,7 @@
 ;; - dir-state (dir)                              OK
 ;; * working-revision (file)                      OK
 ;; - latest-on-branch-p (file)                    NOT NEEDED
-;; * checkout-model (file                       OK
+;; * checkout-model (files)                       OK
 ;; - workfile-unchanged-p (file)                  OK
 ;; - mode-line-string (file)                      OK
 ;; - prettify-state-info (file)                           OK
 
 ;;; BACKEND PROPERTIES
 
-(defun vc-git-revision-granularity ()
-  'repository)
+(defun vc-git-revision-granularity () 'repository)
+(defun vc-git-checkout-model (files) 'implicit)
 
 ;;; STATE-QUERYING FUNCTIONS
 
         (match-string 2 str)
       str)))
 
-(defun vc-git-checkout-model (files) 'implicit)
-
 (defun vc-git-workfile-unchanged-p (file)
   (eq 'up-to-date (vc-git-state file)))
 
index a4e08e021eebcfbce3906d87261193eb9c8ecdab..85ea6e13b07b3a2c22f208e7143f5dc14b06acac 100644 (file)
@@ -47,7 +47,7 @@
 ;; - dir-state (dir)                           OK
 ;; * working-revision (file)                   OK
 ;; - latest-on-branch-p (file)                 ??
-;; * checkout-model (file                    OK
+;; * checkout-model (files)                    OK
 ;; - workfile-unchanged-p (file)               OK
 ;; - mode-line-string (file)                   NOT NEEDED
 ;; - prettify-state-info (file)                OK
 \f
 ;;; Properties of the backend
 
-(defun vc-hg-revision-granularity ()
-     'repository)
+(defun vc-hg-revision-granularity () 'repository)
+(defun vc-hg-checkout-model (files) 'implicit)
 
 ;;; State querying functions
 
@@ -444,8 +444,6 @@ REV is the revision to check out into WORKFILE."
         (vc-hg-command t 0 file "cat" "-r" rev)
       (vc-hg-command t 0 file "cat")))))
 
-(defun vc-hg-checkout-model (files) 'implicit)
-
 ;; Modelled after the similar function in vc-bzr.el
 (defun vc-hg-workfile-unchanged-p (file)
   (eq 'up-to-date (vc-hg-state file)))
index 0d63abc9b9e308cd7b4bb0fbf452dc30e324e456..a09d62604b68f70562579962d6eda20b23367ab8 100644 (file)
@@ -746,7 +746,7 @@ Before doing that, check if there are any old backups and get rid of them."
     (ignore-errors               ;Be careful not to prevent saving the file.
       (and (setq backend (vc-backend file))
            (vc-up-to-date-p file)
-           (eq (vc-checkout-model backend file) 'implicit)
+           (eq (vc-checkout-model backend (list file)) 'implicit)
            (vc-call make-version-backups-p file)
            (vc-make-version-backup file)))))
 
@@ -768,7 +768,7 @@ Before doing that, check if there are any old backups and get rid of them."
                  (vc-file-setprop file 'vc-checkout-time nil))
             t)
          (vc-up-to-date-p file)
-         (eq (vc-checkout-model backend file) 'implicit)
+         (eq (vc-checkout-model backend (list file)) 'implicit)
          (vc-file-setprop file 'vc-state 'edited)
         (vc-mode-line file)
         (when (featurep 'vc)
index df8a4ebad0b805da60c7dd38254d1e79620ad09c..ff40647ead457988204830df4dd6de8aeea7223f 100644 (file)
@@ -111,8 +111,8 @@ This is only meaningful if you don't use the implicit checkout model
 
 ;;; Properties of the backend
 
-(defun vc-mcvs-revision-granularity ()
-     'file)
+(defalias 'vc-mcvs-revision-granularity 'vc-cvs-revision-granularity)
+(defalias 'vc-mcvs-checkout-model 'vc-cvs-checkout-model)
 
 ;;;
 ;;; State-querying functions
@@ -202,8 +202,6 @@ This is only meaningful if you don't use the implicit checkout model
    (expand-file-name (vc-file-getprop file 'mcvs-inode)
                     (vc-file-getprop file 'mcvs-root))))
 
-(defalias 'vc-mcvs-checkout-model 'vc-cvs-checkout-model)
-
 ;;;
 ;;; State-changing functions
 ;;;
@@ -344,7 +342,7 @@ This is only possible if Meta-CVS is responsible for FILE's directory.")
   (if (and (file-exists-p file) (not rev))
       ;; If no revision was specified, just make the file writable
       ;; if necessary (using `cvs-edit' if requested).
-      (and editable (not (eq (vc-mcvs-checkout-model file) 'implicit))
+      (and editable (not (eq (vc-mcvs-checkout-model (list file)) 'implicit))
           (if vc-mcvs-use-edit
               (vc-mcvs-command nil 0 file "edit")
             (set-file-modes file (logior (file-modes file) 128))
@@ -367,7 +365,7 @@ This is only possible if Meta-CVS is responsible for FILE's directory.")
 (defun vc-mcvs-revert (file &optional contents-done)
   "Revert FILE to the working revision it was based on."
   (vc-default-revert 'MCVS file contents-done)
-  (unless (eq (vc-mcvs-checkout-model file) 'implicit)
+  (unless (eq (vc-mcvs-checkout-model (list file)) 'implicit)
     (if vc-mcvs-use-edit
         (vc-mcvs-command nil 0 file "unedit")
       ;; Make the file read-only by switching off all w-bits
index 9f300a8f8eb6b50b6ad4269e0a85f9244e93651a..558889dcba62a920c9a1372515b41f50dbb80a90 100644 (file)
@@ -49,7 +49,7 @@
 ;;;###autoload         (vc-mtn-registered file))))
 
 (defun vc-mtn-revision-granularity () 'repository)
-(defun vc-mtn-checkout-model (file) 'implicit)
+(defun vc-mtn-checkout-model (files) 'implicit)
 
 (defun vc-mtn-root (file)
   (setq file (if (file-directory-p file)
index d6157171985aa310b1ad0237c91737fb2ebb00af..84cd589d4b7154e31b8f825037f145999ccf8ea6 100644 (file)
@@ -102,8 +102,19 @@ For a description of possible values, see `vc-check-master-templates'."
 \f
 ;;; Properties of the backend
 
-(defun vc-rcs-revision-granularity ()
-     'file)
+(defun vc-rcs-revision-granularity () 'file)
+
+(defun vc-rcs-checkout-model (files)
+  "RCS-specific version of `vc-checkout-model'."
+  (let ((file (if (consp files) (car files) files))
+        result)
+    (when vc-consult-headers
+      (vc-file-setprop file 'vc-checkout-model nil)
+      (vc-rcs-consult-headers file)
+      (setq result (vc-file-getprop file 'vc-checkout-model)))
+    (or result
+        (progn (vc-rcs-fetch-master-state file)
+               (vc-file-getprop file 'vc-checkout-model)))))
 
 ;;;
 ;;; State-querying functions
@@ -134,7 +145,7 @@ For a description of possible values, see `vc-check-master-templates'."
          state
        (if (vc-workfile-unchanged-p file)
            'up-to-date
-         (if (eq (vc-rcs-checkout-model file) 'locking)
+         (if (eq (vc-rcs-checkout-model (list file)) 'locking)
              'unlocked-changes
            'edited))))))
 
@@ -218,18 +229,6 @@ When VERSION is given, perform check for that version."
               (vc-insert-file (vc-name file) "^desc")
               (vc-rcs-find-most-recent-rev (vc-branch-part version))))))
 
-(defun vc-rcs-checkout-model (files)
-  "RCS-specific version of `vc-checkout-model'."
-  (let ((file (if (consp files) (car files) files))
-        result)
-    (when vc-consult-headers
-      (vc-file-setprop file 'vc-checkout-model nil)
-      (vc-rcs-consult-headers file)
-      (setq result (vc-file-getprop file 'vc-checkout-model)))
-    (or result
-        (progn (vc-rcs-fetch-master-state file)
-               (vc-file-getprop file 'vc-checkout-model)))))
-
 (defun vc-rcs-workfile-unchanged-p (file)
   "RCS-specific implementation of `vc-workfile-unchanged-p'."
   ;; Try to use rcsdiff --brief.  If rcsdiff does not understand that,
@@ -320,7 +319,7 @@ expanded if `vc-keep-workfiles' is non-nil, otherwise, delete the workfile."
 
 (defun vc-rcs-receive-file (file rev)
   "Implementation of receive-file for RCS."
-  (let ((checkout-model (vc-rcs-checkout-model file)))
+  (let ((checkout-model (vc-rcs-checkout-model (list file))))
     (vc-rcs-register file rev "")
     (when (eq checkout-model 'implicit)
       (vc-rcs-set-non-strict-locking file))
@@ -431,7 +430,7 @@ whether to remove it."
                   nil 0 "co" (vc-name file)
                   ;; If locking is not strict, force to overwrite
                   ;; the writable workfile.
-                  (if (eq (vc-rcs-checkout-model file) 'implicit) "-f")
+                  (if (eq (vc-rcs-checkout-model (list file)) 'implicit) "-f")
                   (if editable "-l")
                    (if (stringp rev)
                        ;; a literal revision was specified
@@ -894,7 +893,7 @@ file."
         ;; locked by the calling user
         ((and (stringp locking-user)
               (string= locking-user (vc-user-login-name file)))
-         (if (or (eq (vc-rcs-checkout-model file) 'locking)
+         (if (or (eq (vc-rcs-checkout-model (list file)) 'locking)
                  workfile-is-latest
                  (vc-rcs-latest-on-branch-p file working-revision))
              'edited
index 481d37ecc618d464d7ef9b81ad01554f701616a8..ce1b977e7f6b7dacd8a0e88f6dd1585877957b75 100644 (file)
@@ -102,6 +102,7 @@ For a description of possible values, see `vc-check-master-templates'."
 ;;; Properties of the backend
 
 (defun vc-sccs-revision-granularity () 'file)
+(defun vc-sccs-checkout-model (files) 'locking)
 
 ;;;
 ;;; State-querying functions
@@ -177,10 +178,6 @@ For a description of possible values, see `vc-check-master-templates'."
     (vc-insert-file (vc-name file) "^\001e\n\001[^s]")
     (vc-parse-buffer "^\001d D \\([^ ]+\\)" 1)))
 
-(defun vc-sccs-checkout-model (file)
-  "SCCS-specific version of `vc-checkout-model'."
-  'locking)
-
 (defun vc-sccs-workfile-unchanged-p (file)
   "SCCS-specific implementation of `vc-workfile-unchanged-p'."
   (zerop (apply 'vc-do-command nil 1 "vcdiff" (vc-name file)
index 053c7fd1965d3e01df9390d63a45e04481ce46a5..5ddedc364ae7c64e1ce277b3a57688c6f3df5f12 100644 (file)
@@ -91,8 +91,9 @@ If you want to force an empty list of arguments, use t."
 
 ;;; Properties of the backend
 
-(defun vc-svn-revision-granularity ()
-     'repository)
+(defun vc-svn-revision-granularity () 'repository)
+(defun vc-svn-checkout-model (files) 'implicit)
+
 ;;;
 ;;; State-querying functions
 ;;;
@@ -193,11 +194,6 @@ RESULT is a list of conses (FILE . STATE) for directory DIR."
   (vc-svn-registered file)
   (vc-file-getprop file 'vc-working-revision))
 
-(defun vc-svn-checkout-model (files)
-  "SVN-specific version of `vc-checkout-model'."
-  ;; It looks like Subversion has no equivalent of CVSREAD.
-  'implicit)
-
 ;; vc-svn-mode-line-string doesn't exist because the default implementation
 ;; works just fine.
 
index 426f7660eda77b39d05c696125d9b3ae27a6cab9..0434bde7cad2fdf13fa8acc64a05ce7bf926fa59 100644 (file)
@@ -1537,7 +1537,7 @@ Otherwise, throw an error."
   "Return non-nil if FILE can be edited."
   (let ((backend (vc-backend file)))
     (and backend
-         (or (eq (vc-checkout-model backend file) 'implicit)
+         (or (eq (vc-checkout-model backend (list file)) 'implicit)
              (memq (vc-state file) '(edited needs-merge conflict))))))
 
 (defun vc-revert-buffer-internal (&optional arg no-confirm)
@@ -1626,7 +1626,7 @@ merge in the changes into your working copy."
        (unless (vc-compatible-state (vc-state file) state)
          (error "%s:%s clashes with %s:%s"
                 file (vc-state file) (car files) state))
-       (unless (eq (vc-checkout-model backend file) model)
+       (unless (eq (vc-checkout-model backend (list file)) model)
          (error "Fileset has mixed checkout models"))))
     ;; Check for buffers in the fileset not matching the on-disk contents.
     (dolist (file files)
@@ -1967,7 +1967,7 @@ After check-out, runs the normal hook `vc-checkout-hook'."
            (let ((buf (get-file-buffer file)))
              (when buf (with-current-buffer buf (toggle-read-only -1)))))
          (signal (car err) (cdr err))))
-      `((vc-state . ,(if (or (eq (vc-checkout-model backend file) 'implicit)
+      `((vc-state . ,(if (or (eq (vc-checkout-model backend (list file)) 'implicit)
                              (not writable))
                          (if (vc-call latest-on-branch-p file)
                              'up-to-date
@@ -3857,7 +3857,7 @@ changes from the current branch are merged into the working file."
        (error "Please kill or save all modified buffers before updating."))
       (if (vc-up-to-date-p file)
          (vc-checkout file nil t)
-       (if (eq (vc-checkout-model backend file) 'locking)
+       (if (eq (vc-checkout-model backend (list file)) 'locking)
            (if (eq (vc-state file) 'edited)
                (error "%s"
                       (substitute-command-keys
@@ -3984,7 +3984,7 @@ backend to NEW-BACKEND, and unregister FILE from the current backend.
              (vc-call-backend new-backend 'receive-file file rev))
          (when modified-file
            (vc-switch-backend file new-backend)
-           (unless (eq (vc-checkout-model new-backend file) 'implicit)
+           (unless (eq (vc-checkout-model new-backend (list file)) 'implicit)
              (vc-checkout file t nil))
            (rename-file modified-file file 'ok-if-already-exists)
            (vc-file-setprop file 'vc-checkout-time nil)))))