;; Author: FSF (see vc.el for full credits)
;; Maintainer: Andre Spiegel <spiegel@gnu.org>
-;; $Id: vc-hooks.el,v 1.141 2002/07/19 13:26:11 spiegel Exp $
+;; $Id: vc-hooks.el,v 1.146 2002/10/17 15:46:06 lektu Exp $
;; This file is part of GNU Emacs.
;; Customization Variables (the rest is in vc.el)
-(defvar vc-ignore-vc-files nil "Obsolete -- use `vc-handled-backends'.")
-(defvar vc-master-templates () "Obsolete -- use vc-BACKEND-master-templates.")
-(defvar vc-header-alist () "Obsolete -- use vc-BACKEND-header.")
+(defvar vc-ignore-vc-files nil)
+(make-obsolete-variable 'vc-ignore-vc-files 'vc-handled-backends)
+(defvar vc-master-templates ())
+(make-obsolete-variable 'vc-master-templates 'vc-BACKEND-master-templates)
+(defvar vc-header-alist ())
+(make-obsolete-variable 'vc-header-alist 'vc-BACKEND-header)
(defcustom vc-handled-backends '(RCS CVS SCCS)
"*List of version control backends for which VC will be used.
(defun vc-find-backend-function (backend fun)
"Return BACKEND-specific implementation of FUN.
-If there is no such implementation, return the default implementation;
+If there is no such implementation, return the default implementation;
if that doesn't exist either, return nil."
(let ((f (vc-make-backend-sym backend fun)))
(if (fboundp f) f
Optional argument LIMIT is a regexp. If present, the file is inserted
in chunks of size BLOCKSIZE (default 8 kByte), until the first
-occurrence of LIMIT is found. Anything from the start of that occurence
+occurrence of LIMIT is found. Anything from the start of that occurrence
to the end of the buffer is then deleted. The function returns
non-nil if FILE exists and its contents were successfully inserted."
(erase-buffer)
(and (vc-call-backend b 'registered file)
(vc-file-setprop file 'vc-backend b)
(throw 'found t)))
- (if (or (not backend) (eq backend 'none))
+ (if (or (not backend) (eq backend 'none))
vc-handled-backends
(cons backend vc-handled-backends))))
;; File is not registered.
USER The current version of the working file is locked by
some other USER (a string).
-
+
'needs-patch The file has not been edited by the user, but there is
a more recent version on the current branch stored
in the master file.
and does not employ any heuristic at all."
(vc-call-backend backend 'state file))
+(defun vc-workfile-unchanged-p (file)
+ "Return non-nil if FILE has not changed since the last checkout."
+ (let ((checkout-time (vc-file-getprop file 'vc-checkout-time))
+ (lastmod (nth 5 (file-attributes file))))
+ (if checkout-time
+ (equal checkout-time lastmod)
+ (let ((unchanged (vc-call workfile-unchanged-p file)))
+ (vc-file-setprop file 'vc-checkout-time (if unchanged lastmod 0))
+ unchanged))))
+
+(defun vc-default-workfile-unchanged-p (backend file)
+ "Check if FILE is unchanged by diffing against the master version.
+Return non-nil if FILE is unchanged."
+ (zerop (vc-call diff file (vc-workfile-version file))))
+
(defun vc-workfile-version (file)
"Return the version level of the current workfile FILE.
If FILE is not registered, this function always returns nil."
(vc-file-setprop file 'vc-workfile-version
(vc-call workfile-version file)))))
-;;; actual version-control code starts here
-
(defun vc-default-registered (backend file)
"Check if FILE is registered in BACKEND using vc-BACKEND-master-templates."
(let ((sym (vc-make-backend-sym backend 'master-templates)))
(if regexp
(concat (regexp-quote (file-name-nondirectory file))
"\\.~[0-9.]+" (unless manual "\\.") "~")
- (expand-file-name (concat (file-name-nondirectory file)
- ".~" (or rev (vc-workfile-version file))
+ (expand-file-name (concat (file-name-nondirectory file)
+ ".~" (or rev (vc-workfile-version file))
(unless manual ".") "~")
(file-name-directory file))))
(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))
(if (buffer-file-name)
(vc-file-clearprops (buffer-file-name))))
-;; ??? DL: why is this not done?
-;;;(add-hook 'kill-buffer-hook 'vc-kill-buffer-hook)
+(add-hook 'kill-buffer-hook 'vc-kill-buffer-hook)
;; Now arrange for (autoloaded) bindings of the main package.
;; Bindings for this have to go in the global map, as we'll often