]> git.eshelyaron.com Git - emacs.git/commitdiff
Remove vc-state-heuristic from the set of public methods.
authorEric S. Raymond <esr@thyrsus.com>
Mon, 1 Dec 2014 14:41:54 +0000 (09:41 -0500)
committerEric S. Raymond <esr@thyrsus.com>
Mon, 1 Dec 2014 14:41:54 +0000 (09:41 -0500)
* vc/vc.el, vc-hooks.el, and all backends: API simplification;
vc-state-heuristic is no longer a public method, having been removed
where it is redundant, unnecessary, or known buggy. This eliminated
all backends except CVS.  Eliminates bug#7850.

lisp/ChangeLog
lisp/vc/vc-bzr.el
lisp/vc/vc-dav.el
lisp/vc/vc-git.el
lisp/vc/vc-hg.el
lisp/vc/vc-hooks.el
lisp/vc/vc-src.el
lisp/vc/vc-svn.el
lisp/vc/vc.el

index 6f5bb465c310c99c9c8ff24c96b22c8a6f96d6b3..d6691f51d173a6ee0ec07658b98918a06378c567 100644 (file)
@@ -1,5 +1,10 @@
 2014-12-01  Eric S. Raymond  <esr@snark.thyrsus.com>
 
+       * vc/vc.el, vc-hooks.el, and all backends: API simplification;
+       vc-state-heuristic is no longer a public method, having been
+       removed where it is redundant, unnecessary, or known buggy. This
+       eliminated all backends except CVS.  Eliminates bug#7850.
+
        * vc/vc-cvs.el, vc/vc-hooks.el, vc/vc-rcs.el, vc/vc-sccs.el:
        Eliminate vc-mistrust-permissions.  It was only relevant to the
        RCS and SCCS back ends and defaulted to t. Code now always
index 19a8299485d4e164fd3da7f3edc39dab85b23209..34a7c7be7869aeff2ea08661419f711e4e8d6980 100644 (file)
@@ -178,113 +178,6 @@ in the repository root directory of FILE."
     (insert-file-contents-literally file)
     (sha1 (current-buffer))))
 
-(defun vc-bzr-state-heuristic (file)
-  "Like `vc-bzr-state' but hopefully without running Bzr."
-  ;; `bzr status' could be slow with large histories and pending merges,
-  ;; so this tries to avoid calling it if possible.  bzr status is
-  ;; faster now, so this is not as important as it was.
-  ;;
-  ;; This function tries first to parse Bzr internal file
-  ;; `checkout/dirstate', but it may fail if Bzr internal file format
-  ;; has changed.  As a safeguard, the `checkout/dirstate' file is
-  ;; only parsed if it contains the string `#bazaar dirstate flat
-  ;; format 3' in the first line.
-  ;; If the `checkout/dirstate' file cannot be parsed, fall back to
-  ;; running `vc-bzr-state'."
-  ;;
-  ;; The format of the dirstate file is explained in bzrlib/dirstate.py
-  ;; in the bzr distribution.  Basically:
-  ;; header-line giving the version of the file format in use.
-  ;; a few lines of stuff
-  ;; entries, one per line, with null-separated fields.  Each line:
-  ;; entry_key = dirname (may be empty), basename, file-id
-  ;; current = common ( = kind, fingerprint, size, executable )
-  ;;           + working ( = packed_stat )
-  ;; parent = common ( as above ) + history ( = rev_id )
-  ;; kinds = (r)elocated, (a)bsent, (d)irectory, (f)ile, (l)ink
-  (let* ((root (vc-bzr-root file))
-         (dirstate (expand-file-name vc-bzr-admin-dirstate root)))
-    (when root                          ; Short cut.
-      (condition-case err
-          (with-temp-buffer
-            (insert-file-contents dirstate)
-            (goto-char (point-min))
-            (if (not (looking-at "#bazaar dirstate flat format 3"))
-                (vc-bzr-state file)     ; Some other unknown format?
-              (let* ((relfile (file-relative-name file root))
-                     (reldir (file-name-directory relfile)))
-                (cond
-                 ((not
-                   (re-search-forward
-                    (concat "^\0"
-                            (if reldir (regexp-quote
-                                        (directory-file-name reldir)))
-                            "\0"
-                            (regexp-quote (file-name-nondirectory relfile))
-                            "\0"
-                            "[^\0]*\0"             ;id?
-                            "\\([^\0]*\\)\0"       ;"a/f/d", a=removed?
-                            "\\([^\0]*\\)\0"       ;sha1 (empty if conflicted)?
-                            "\\([^\0]*\\)\0"       ;size?p
-                            ;; y/n.  Whether or not the current copy
-                            ;; was executable the last time bzr checked?
-                            "[^\0]*\0"
-                            "[^\0]*\0"  ;?
-                            ;; Parent information.  Absent in a new repo.
-                            "\\(?:\\([^\0]*\\)\0"  ;"a/f/d" a=added?
-                            "\\([^\0]*\\)\0"       ;sha1 again?
-                            "\\([^\0]*\\)\0"       ;size again?
-                            ;; y/n.  Whether or not the repo thinks
-                            ;; the file should be executable?
-                            "\\([^\0]*\\)\0"
-                            "[^\0]*\0\\)?" ;last revid?
-                            ;; There are more fields when merges are pending.
-                            )
-                    nil t))
-                  'unregistered)
-                 ;; Apparently the second sha1 is the one we want: when
-                 ;; there's a conflict, the first sha1 is absent (and the
-                 ;; first size seems to correspond to the file with
-                 ;; conflict markers).
-                 ((eq (char-after (match-beginning 1)) ?a) 'removed)
-                 ;; If there is no parent, this must be a new repo.
-                 ;; If file is in dirstate, can only be added (b#8025).
-                 ((or (not (match-beginning 4))
-                      (eq (char-after (match-beginning 4)) ?a)) 'added)
-                 ((or (and (eq (string-to-number (match-string 3))
-                               (nth 7 (file-attributes file)))
-                           (equal (match-string 5)
-                                  (save-match-data (vc-bzr-sha1 file)))
-                           ;; For a file, does the executable state match?
-                           ;; (Bug#7544)
-                           (or (not
-                                (eq (char-after (match-beginning 1)) ?f))
-                               (let ((exe
-                                      (memq
-                                       ?x
-                                       (mapcar
-                                        'identity
-                                        (nth 8 (file-attributes file))))))
-                                 (if (eq (char-after (match-beginning 7))
-                                         ?y)
-                                     exe
-                                   (not exe)))))
-                      (and
-                       ;; It looks like for lightweight
-                       ;; checkouts \2 is empty and we need to
-                       ;; look for size in \6.
-                       (eq (match-beginning 2) (match-end 2))
-                       (eq (string-to-number (match-string 6))
-                           (nth 7 (file-attributes file)))
-                       (equal (match-string 5)
-                              (vc-bzr-sha1 file))))
-                  'up-to-date)
-                 (t 'edited)))))
-        ;; The dirstate file can't be read, or some other problem.
-        (error
-         (message "Falling back on \"slow\" status detection (%S)" err)
-         (vc-bzr-state file))))))
-
 ;; This is a cheap approximation that is autoloaded.  If it finds a
 ;; possible match it loads this file and runs the real function.
 ;; It requires vc-bzr-admin-checkout-format-file to be autoloaded too.
@@ -296,7 +189,7 @@ in the repository root directory of FILE."
 
 (defun vc-bzr-registered (file)
   "Return non-nil if FILE is registered with bzr."
-  (let ((state (vc-bzr-state-heuristic file)))
+  (let ((state (vc-bzr-state file)))
     (not (memq state '(nil unregistered ignored)))))
 
 (defconst vc-bzr-state-words
@@ -494,8 +387,6 @@ in the branch repository (or whose status not be determined)."
     (message "There are unresolved conflicts in this file")))
 
 (defun vc-bzr-working-revision (file)
-  ;; Together with the code in vc-state-heuristic, this makes it possible
-  ;; to get the initial VC state of a Bzr file even if Bzr is not installed.
   (let* ((rootdir (vc-bzr-root file))
          (branch-format-file (expand-file-name vc-bzr-admin-branch-format-file
                                                rootdir))
index e6ab771ed81358554f491b58ee54709bd0680b55..dd1841df401818c2d22a409dbb32caefb1ea5a88 100644 (file)
@@ -133,10 +133,6 @@ It should return a status of either 0 (no differences found), or
 
 
 ;;; Optional functions
-;; Should be faster than vc-dav-state - but how?
-(defun vc-dav-state-heuristic (url)
-  "Estimate the version control state of URL at visiting time."
-  (vc-dav-state url))
 
 ;; This should use url-dav-get-properties with a depth of `1' to get
 ;; all the properties.
index f2cb99733baa8134933204c470b1ff862e194a82..0aceb5537cb3e987f253aadf02d3407d504816d0 100644 (file)
@@ -50,7 +50,6 @@
 ;; STATE-QUERYING FUNCTIONS
 ;; * registered (file)                             OK
 ;; * state (file)                                  OK
-;; - state-heuristic (file)                        NOT NEEDED
 ;; * working-revision (file)                       OK
 ;; - latest-on-branch-p (file)                     NOT NEEDED
 ;; * checkout-model (files)                        OK
index 52d5ceb12caa824e6ae774f89a7aa951821bcd41..9bb79a74e94633918bbdcf519d6d0a8e6f94b7b1 100644 (file)
@@ -43,7 +43,6 @@
 ;; STATE-QUERYING FUNCTIONS
 ;; * registered (file)                         OK
 ;; * state (file)                              OK
-;; - state-heuristic (file)                    NOT NEEDED
 ;; - dir-status (dir update-function)          OK
 ;; - dir-status-files (dir files ds uf)        OK
 ;; - dir-extra-headers (dir)                   OK
index 46a6b3194b95ced08945df86b7ab0c040e097242..39c18d4b57bc602c6169089572d74cfd6f896dd0 100644 (file)
@@ -548,18 +548,12 @@ status of this file.  Otherwise, the value returned is one of:
   "Quickly recompute the `state' of FILE."
   (vc-file-setprop
    file 'vc-state
-   (vc-call-backend backend 'state-heuristic file)))
+   (vc-call-backend backend 'state file)))
 
 (defsubst vc-up-to-date-p (file)
   "Convenience function that checks whether `vc-state' of FILE is `up-to-date'."
   (eq (vc-state file) 'up-to-date))
 
-(defun vc-default-state-heuristic (backend file)
-  "Default implementation of vc-BACKEND-state-heuristic.
-It simply calls the real state computation function `vc-BACKEND-state'
-and does not employ any heuristic at all."
-   (vc-call-backend backend 'state file))
-
 (defun vc-working-revision (file &optional backend)
   "Return the repository version from which FILE was checked out.
 If FILE is not registered, this function always returns nil."
index 931dc5a2a9373a0f59690dbf14a685fdf2bcba96..046222304c4174ea0b5f46901f92521264e2b775 100644 (file)
@@ -31,7 +31,6 @@
 ;; STATE-QUERYING FUNCTIONS
 ;; * registered (file)                         OK
 ;; * state (file)                              OK
-;; - state-heuristic (file)                    NOT NEEDED
 ;; * dir-status (dir update-function)          OK
 ;; - dir-status-files (dir files ds uf)        ??
 ;; - dir-extra-headers (dir)                   NOT NEEDED
index fa584fac5c7ea2af0941cc60cf4059ed876fda2c..0479519bde98dee6159cf17a647a90dfaa9baf1c 100644 (file)
@@ -9,7 +9,7 @@
 ;; This file is part of GNU Emacs.
 
 ;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
+;; it under the` terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
@@ -162,25 +162,6 @@ If you want to force an empty list of arguments, use t."
       (vc-svn-command t 0 file "status" (if localp "-v" "-u"))
       (vc-svn-parse-status file))))
 
-;; NB this does not handle svn properties, which can be changed
-;; without changing the file timestamp.
-;; Note that unlike vc-cvs-state-heuristic, this is not called from
-;; vc-svn-state.  AFAICS, it is only called from vc-state-refresh via
-;; vc-after-save (bug#7850).  Therefore the fact that it ignores
-;; properties is irrelevant.  If you want to make vc-svn-state call
-;; this, it should be extended to handle svn properties.
-(defun vc-svn-state-heuristic (file)
-  "SVN-specific state heuristic."
-  ;; If the file has not changed since checkout, consider it `up-to-date'.
-  ;; Otherwise consider it `edited'.  Copied from vc-cvs-state-heuristic.
-  (let ((checkout-time (vc-file-getprop file 'vc-checkout-time))
-        (lastmod (nth 5 (file-attributes file))))
-    (cond
-     ((equal checkout-time lastmod) 'up-to-date)
-     ((string= (vc-working-revision file) "0") 'added)
-     ((null checkout-time) 'unregistered)
-     (t 'edited))))
-
 ;; FIXME it would be better not to have the "remote" argument,
 ;; but to distinguish the two output formats based on content.
 (defun vc-svn-after-dir-status (callback &optional remote)
index 0d0639ba86c80be390938ebcb29b54b105d35705..54fb9cd50169da93992984a8026ea67438048aac 100644 (file)
 ;;   Return the current version control state of FILE.  For a list of
 ;;   possible values, see `vc-state'.  This function should do a full and
 ;;   reliable state computation; it is usually called immediately after
-;;   C-x v v.  If you want to use a faster heuristic when visiting a
-;;   file, put that into `state-heuristic' below.  Note that under most
-;;   VCSes this won't be called at all, dir-status is used instead.
-;;
-;; - state-heuristic (file)
-;;
-;;   If provided, this function is used to estimate the version control
-;;   state of FILE at visiting time.  It should be considerably faster
-;;   than the implementation of `state'.  For a list of possible values,
-;;   see the doc string of `vc-state'.
+;;   C-x v v.
 ;;
 ;; - dir-status (dir update-function)
 ;;
 ;;   moves closer to emulating modern non-locking behavior even on very
 ;;   old VCSes.
 ;;
+;; - vc-state-heuristic is no longer a public method (the CVS backend
+;;   retains it as a private one).
+;;
 ;; - the vc-mistrust-permissions configuration variable is gone; the
 ;;   code no longer relies on permissions except in one corner case where
 ;;   CVS leaves no alternative (which was not gated by this variable).  The