Add 2011 to FSF/AIST copyright years.
[bpt/emacs.git] / lisp / vc-sccs.el
index b8957b9..4e89e72 100644 (file)
@@ -1,7 +1,7 @@
 ;;; vc-sccs.el --- support for SCCS version-control
 
 ;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-;;   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+;;   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   Free Software Foundation, Inc.
 
 ;; Author:     FSF (see vc.el for full credits)
 
 ;;; Commentary:
 
+;; Proper function of the SCCS diff commands requires the shellscript vcdiff
+;; to be installed somewhere on Emacs's path for executables.
+;;
+
 ;;; Code:
 
 (eval-when-compile
 ;;   :group 'vc)
 
 (defcustom vc-sccs-register-switches nil
-  "*Extra switches for registering a file in SCCS.
+  "Switches for registering a file in SCCS.
 A string or list of strings passed to the checkin program by
-\\[vc-sccs-register]."
-  :type '(choice (const :tag "None" nil)
+\\[vc-register].  If nil, use the value of `vc-register-switches'.
+If t, use no switches."
+  :type '(choice (const :tag "Unspecified" nil)
+                (const :tag "None" t)
                 (string :tag "Argument String")
-                (repeat :tag "Argument List"
-                        :value ("")
-                        string))
+                (repeat :tag "Argument List" :value ("") string))
   :version "21.1"
   :group 'vc)
 
 (defcustom vc-sccs-diff-switches nil
-  "*A string or list of strings specifying extra switches for `vcdiff',
-the diff utility used for SCCS under VC."
-    :type '(choice (const :tag "None" nil)
+  "String or list of strings specifying switches for SCCS diff under VC.
+If nil, use the value of `vc-diff-switches'.  If t, use no switches."
+  :type '(choice (const :tag "Unspecified" nil)
+                (const :tag "None" t)
                 (string :tag "Argument String")
-                (repeat :tag "Argument List"
-                        :value ("")
-                        string))
+                (repeat :tag "Argument List" :value ("") string))
   :version "21.1"
   :group 'vc)
 
 (defcustom vc-sccs-header (or (cdr (assoc 'SCCS vc-header-alist)) '("%W%"))
-  "*Header keywords to be inserted by `vc-insert-headers'."
+  "Header keywords to be inserted by `vc-insert-headers'."
   :type '(repeat string)
   :group 'vc)
 
 ;;;###autoload
 (defcustom vc-sccs-master-templates
-  '("%sSCCS/s.%s" "%ss.%s" vc-sccs-search-project-dir)
-  "*Where to look for SCCS master files.
+  (purecopy '("%sSCCS/s.%s" "%ss.%s" vc-sccs-search-project-dir))
+  "Where to look for SCCS master files.
 For a description of possible values, see `vc-check-master-templates'."
   :type '(choice (const :tag "Use standard SCCS file names"
                        ("%sSCCS/s.%s" "%ss.%s" vc-sccs-search-project-dir))
@@ -203,9 +206,8 @@ For a description of possible values, see `vc-check-master-templates'."
   "Register FILES into the SCCS version-control system.
 REV is the optional revision number for the file.  COMMENT can be used
 to provide an initial description of FILES.
-
-`vc-register-switches' and `vc-sccs-register-switches' are passed to
-the SCCS command (in that order).
+Passes either `vc-sccs-register-switches' or `vc-register-switches'
+to the SCCS command.
 
 Automatically retrieve a read-only version of the files with keywords
 expanded if `vc-keep-workfiles' is non-nil, otherwise, delete the workfile."
@@ -290,7 +292,7 @@ locked.  REV is the revision to check out."
 are expanded to all version-controlled subfiles."
   (setq files (vc-expand-dirs files))
   (if (not files)
-      (error "SCCS backend doesn't support directory-level rollback."))
+      (error "SCCS backend doesn't support directory-level rollback"))
   (dolist (file files)
          (let ((discard (vc-working-revision file)))
            (if (null (yes-or-no-p (format "Remove version %s from %s history? "
@@ -333,10 +335,11 @@ revert all subfiles."
 ;;; History functions
 ;;;
 
-(defun vc-sccs-print-log (files &optional buffer)
+(defun vc-sccs-print-log (files buffer &optional shortlog start-revision-ignored limit)
   "Get change log associated with FILES."
   (setq files (vc-expand-dirs files))
-  (vc-sccs-do-command buffer 0 "prs" (mapcar 'vc-name files)))
+  (vc-sccs-do-command buffer 0 "prs" (mapcar 'vc-name files))
+  (when limit 'limit-unsupported))
 
 (defun vc-sccs-diff (files &optional oldvers newvers buffer)
   "Get a difference report using SCCS between two filesets."
@@ -372,6 +375,12 @@ revert all subfiles."
 ;;; Miscellaneous
 ;;;
 
+(defun vc-sccs-previous-revision (file rev)
+  (vc-call-backend 'RCS 'previous-revision file rev))
+
+(defun vc-sccs-next-revision (file rev)
+  (vc-call-backend 'RCS 'next-revision file rev))
+
 (defun vc-sccs-check-headers ()
   "Check if the current file has any headers in it."
   (save-excursion
@@ -393,6 +402,13 @@ revert all subfiles."
     (basic-save-buffer)
     (kill-buffer (current-buffer))))
 
+(defun vc-sccs-find-file-hook ()
+  ;; If the file is locked by some other user, make
+  ;; the buffer read-only.  Like this, even root
+  ;; cannot modify a file that someone else has locked.
+  (and (stringp (vc-state buffer-file-name 'SCCS))
+       (setq buffer-read-only t)))
+
 \f
 ;;;
 ;;; Internal functions