annotate lisp/vc-rcs.el @ 76022:e892213b9815

(w32_set_scroll_bar_thumb): Don't resize scroll-bar handle while dragging, except when we get close to eob. Fix position and size calculations so we don't scroll backwards just by clicking on the handle.
author Kim F. Storm <storm@cua.dk>
date Mon, 19 Feb 2007 14:45:39 +0000
parents e3694f1cb928
children f35ed3fecce9 b8d9a391daf3 95d0cdf160ea
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1 ;;; vc-rcs.el --- support for RCS version-control
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2
64762
41bb365f41c4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64091
diff changeset
3 ;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
75347
e3694f1cb928 Add 2007 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 68651
diff changeset
4 ;; 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
5
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
6 ;; Author: FSF (see vc.el for full credits)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
7 ;; Maintainer: Andre Spiegel <spiegel@gnu.org>
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
8
56953
2cc3f5b16438 Doc fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56318
diff changeset
9 ;; $Id$
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
10
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
11 ;; This file is part of GNU Emacs.
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
12
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
13 ;; GNU Emacs is free software; you can redistribute it and/or modify
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
14 ;; it under the terms of the GNU General Public License as published by
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
15 ;; the Free Software Foundation; either version 2, or (at your option)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
16 ;; any later version.
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
17
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
18 ;; GNU Emacs is distributed in the hope that it will be useful,
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
21 ;; GNU General Public License for more details.
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
22
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
24 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64091
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 59181
diff changeset
25 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 59181
diff changeset
26 ;; Boston, MA 02110-1301, USA.
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
27
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 36712
diff changeset
28 ;;; Commentary:
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 36712
diff changeset
29
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 36712
diff changeset
30 ;; See vc.el
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
31
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
32 ;;; Code:
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
33
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
34 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
35 ;;; Customization options
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
36 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
37
31840
a05558c54226 (toplevel): Require `vc' when compiling.
Gerd Moellmann <gerd@gnu.org>
parents: 31835
diff changeset
38 (eval-when-compile
35822
cd59c63d4aac (vc-rcs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35178
diff changeset
39 (require 'cl)
cd59c63d4aac (vc-rcs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35178
diff changeset
40 (require 'vc))
31840
a05558c54226 (toplevel): Require `vc' when compiling.
Gerd Moellmann <gerd@gnu.org>
parents: 31835
diff changeset
41
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
42 (defcustom vc-rcs-release nil
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
43 "*The release number of your RCS installation, as a string.
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
44 If nil, VC itself computes this value when it is first needed."
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
45 :type '(choice (const :tag "Auto" nil)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
46 (string :tag "Specified")
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
47 (const :tag "Unknown" unknown))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
48 :group 'vc)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
49
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
50 (defcustom vc-rcs-register-switches nil
31476
18bf0c070870 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
51 "*Extra switches for registering a file in RCS.
18bf0c070870 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
52 A string or list of strings. These are passed to the checkin program
18bf0c070870 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
53 by \\[vc-rcs-register]."
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
54 :type '(choice (const :tag "None" nil)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
55 (string :tag "Argument String")
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
56 (repeat :tag "Argument List"
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
57 :value ("")
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
58 string))
31476
18bf0c070870 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
59 :version "21.1"
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
60 :group 'vc)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
61
35822
cd59c63d4aac (vc-rcs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35178
diff changeset
62 (defcustom vc-rcs-diff-switches nil
cd59c63d4aac (vc-rcs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35178
diff changeset
63 "*A string or list of strings specifying extra switches for rcsdiff under VC."
cd59c63d4aac (vc-rcs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35178
diff changeset
64 :type '(choice (const :tag "None" nil)
cd59c63d4aac (vc-rcs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35178
diff changeset
65 (string :tag "Argument String")
cd59c63d4aac (vc-rcs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35178
diff changeset
66 (repeat :tag "Argument List"
cd59c63d4aac (vc-rcs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35178
diff changeset
67 :value ("")
cd59c63d4aac (vc-rcs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35178
diff changeset
68 string))
cd59c63d4aac (vc-rcs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35178
diff changeset
69 :version "21.1"
cd59c63d4aac (vc-rcs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35178
diff changeset
70 :group 'vc)
cd59c63d4aac (vc-rcs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35178
diff changeset
71
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
72 (defcustom vc-rcs-header (or (cdr (assoc 'RCS vc-header-alist)) '("\$Id\$"))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
73 "*Header keywords to be inserted by `vc-insert-headers'."
35178
ae1b8d0257a7 (vc-rcs-header): Fix :type.
Dave Love <fx@gnu.org>
parents: 35133
diff changeset
74 :type '(repeat string)
31476
18bf0c070870 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
75 :version "21.1"
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
76 :group 'vc)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
77
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
78 (defcustom vc-rcsdiff-knows-brief nil
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
79 "*Indicates whether rcsdiff understands the --brief option.
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
80 The value is either `yes', `no', or nil. If it is nil, VC tries
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
81 to use --brief and sets this variable to remember whether it worked."
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
82 :type '(choice (const :tag "Work out" nil) (const yes) (const no))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
83 :group 'vc)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
84
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
85 ;;;###autoload
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
86 (defcustom vc-rcs-master-templates
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
87 '("%sRCS/%s,v" "%s%s,v" "%sRCS/%s")
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
88 "*Where to look for RCS master files.
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
89 For a description of possible values, see `vc-check-master-templates'."
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
90 :type '(choice (const :tag "Use standard RCS file names"
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
91 '("%sRCS/%s,v" "%s%s,v" "%sRCS/%s"))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
92 (repeat :tag "User-specified"
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
93 (choice string
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
94 function)))
31476
18bf0c070870 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
95 :version "21.1"
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
96 :group 'vc)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
97
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
98
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
99 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
100 ;;; State-querying functions
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
101 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
102
48282
0cae7bc9a8b8 (vc-rcs-registered): Improve comment.
André Spiegel <spiegel@gnu.org>
parents: 48263
diff changeset
103 ;;; The autoload cookie below places vc-rcs-registered directly into
0cae7bc9a8b8 (vc-rcs-registered): Improve comment.
André Spiegel <spiegel@gnu.org>
parents: 48263
diff changeset
104 ;;; loaddefs.el, so that vc-rcs.el does not need to be loaded for
0cae7bc9a8b8 (vc-rcs-registered): Improve comment.
André Spiegel <spiegel@gnu.org>
parents: 48263
diff changeset
105 ;;; every file that is visited. The definition is repeated below
0cae7bc9a8b8 (vc-rcs-registered): Improve comment.
André Spiegel <spiegel@gnu.org>
parents: 48263
diff changeset
106 ;;; so that Help and etags can find it.
0cae7bc9a8b8 (vc-rcs-registered): Improve comment.
André Spiegel <spiegel@gnu.org>
parents: 48263
diff changeset
107
0cae7bc9a8b8 (vc-rcs-registered): Improve comment.
André Spiegel <spiegel@gnu.org>
parents: 48263
diff changeset
108 ;;;###autoload (defun vc-rcs-registered (f) (vc-default-registered 'RCS f))
48263
b05233e8524d (vc-rcs-registered): Handle the autoload cookie so that the definition
Markus Rost <rost@math.uni-bielefeld.de>
parents: 47805
diff changeset
109 (defun vc-rcs-registered (f) (vc-default-registered 'RCS f))
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
110
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
111 (defun vc-rcs-state (file)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
112 "Implementation of `vc-state' for RCS."
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
113 (or (boundp 'vc-rcs-headers-result)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
114 (and vc-consult-headers
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
115 (vc-rcs-consult-headers file)))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
116 (let ((state
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
117 ;; vc-workfile-version might not be known; in that case the
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
118 ;; property is nil. vc-rcs-fetch-master-state knows how to
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
119 ;; handle that.
31476
18bf0c070870 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
120 (vc-rcs-fetch-master-state file
18bf0c070870 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
121 (vc-file-getprop file
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
122 'vc-workfile-version))))
33636
2c1708b98891 (vc-rcs-state): Before calling vc-workfile-unchanged-p, require vc.
André Spiegel <spiegel@gnu.org>
parents: 33610
diff changeset
123 (if (not (eq state 'up-to-date))
2c1708b98891 (vc-rcs-state): Before calling vc-workfile-unchanged-p, require vc.
André Spiegel <spiegel@gnu.org>
parents: 33610
diff changeset
124 state
2c1708b98891 (vc-rcs-state): Before calling vc-workfile-unchanged-p, require vc.
André Spiegel <spiegel@gnu.org>
parents: 33610
diff changeset
125 (if (vc-workfile-unchanged-p file)
2c1708b98891 (vc-rcs-state): Before calling vc-workfile-unchanged-p, require vc.
André Spiegel <spiegel@gnu.org>
parents: 33610
diff changeset
126 'up-to-date
2c1708b98891 (vc-rcs-state): Before calling vc-workfile-unchanged-p, require vc.
André Spiegel <spiegel@gnu.org>
parents: 33610
diff changeset
127 (if (eq (vc-checkout-model file) 'locking)
2c1708b98891 (vc-rcs-state): Before calling vc-workfile-unchanged-p, require vc.
André Spiegel <spiegel@gnu.org>
parents: 33610
diff changeset
128 'unlocked-changes
2c1708b98891 (vc-rcs-state): Before calling vc-workfile-unchanged-p, require vc.
André Spiegel <spiegel@gnu.org>
parents: 33610
diff changeset
129 'edited)))))
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
130
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
131 (defun vc-rcs-state-heuristic (file)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
132 "State heuristic for RCS."
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
133 (let (vc-rcs-headers-result)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
134 (if (and vc-consult-headers
31476
18bf0c070870 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
135 (setq vc-rcs-headers-result
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
136 (vc-rcs-consult-headers file))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
137 (eq vc-rcs-headers-result 'rev-and-lock))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
138 (let ((state (vc-file-getprop file 'vc-state)))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
139 ;; If the headers say that the file is not locked, the
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
140 ;; permissions can tell us whether locking is used for
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
141 ;; the file or not.
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
142 (if (and (eq state 'up-to-date)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
143 (not (vc-mistrust-permissions file)))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
144 (cond
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
145 ((string-match ".rw..-..-." (nth 8 (file-attributes file)))
31809
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
146 (vc-file-setprop file 'vc-checkout-model 'implicit)
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49092
diff changeset
147 (setq state
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49092
diff changeset
148 (if (vc-rcs-workfile-is-newer file)
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49092
diff changeset
149 'edited
31809
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
150 'up-to-date)))
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
151 ((string-match ".r-..-..-." (nth 8 (file-attributes file)))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
152 (vc-file-setprop file 'vc-checkout-model 'locking))))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
153 state)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
154 (if (not (vc-mistrust-permissions file))
68332
a6ef676caa6d (vc-rcs-state-heuristic): Use file-attributes with ID-FORMAT
André Spiegel <spiegel@gnu.org>
parents: 64762
diff changeset
155 (let* ((attributes (file-attributes file 'string))
a6ef676caa6d (vc-rcs-state-heuristic): Use file-attributes with ID-FORMAT
André Spiegel <spiegel@gnu.org>
parents: 64762
diff changeset
156 (owner-name (nth 2 attributes))
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
157 (permissions (nth 8 attributes)))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
158 (cond ((string-match ".r-..-..-." permissions)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
159 (vc-file-setprop file 'vc-checkout-model 'locking)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
160 'up-to-date)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
161 ((string-match ".rw..-..-." permissions)
31809
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
162 (if (eq (vc-checkout-model file) 'locking)
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
163 (if (file-ownership-preserved-p file)
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
164 'edited
68332
a6ef676caa6d (vc-rcs-state-heuristic): Use file-attributes with ID-FORMAT
André Spiegel <spiegel@gnu.org>
parents: 64762
diff changeset
165 owner-name)
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49092
diff changeset
166 (if (vc-rcs-workfile-is-newer file)
31809
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
167 'edited
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
168 'up-to-date)))
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
169 (t
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
170 ;; Strange permissions. Fall through to
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
171 ;; expensive state computation.
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
172 (vc-rcs-state file))))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
173 (vc-rcs-state file)))))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
174
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
175 (defun vc-rcs-workfile-version (file)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
176 "RCS-specific version of `vc-workfile-version'."
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
177 (or (and vc-consult-headers
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
178 (vc-rcs-consult-headers file)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
179 (vc-file-getprop file 'vc-workfile-version))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
180 (progn
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
181 (vc-rcs-fetch-master-state file)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
182 (vc-file-getprop file 'vc-workfile-version))))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
183
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
184 (defun vc-rcs-latest-on-branch-p (file &optional version)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
185 "Return non-nil if workfile version of FILE is the latest on its branch.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
186 When VERSION is given, perform check for that version."
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
187 (unless version (setq version (vc-workfile-version file)))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
188 (with-temp-buffer
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
189 (string= version
42549
6301bb6ec388 (vc-rcs-steal-lock): Do a real checkout after stealing the lock, so
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
190 (if (vc-trunk-p version)
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
191 (progn
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
192 ;; Compare VERSION to the head version number.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
193 (vc-insert-file (vc-name file) "^[0-9]")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
194 (vc-parse-buffer "^head[ \t\n]+\\([^;]+\\);" 1))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
195 ;; If we are not on the trunk, we need to examine the
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
196 ;; whole current branch.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
197 (vc-insert-file (vc-name file) "^desc")
42549
6301bb6ec388 (vc-rcs-steal-lock): Do a real checkout after stealing the lock, so
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
198 (vc-rcs-find-most-recent-rev (vc-branch-part version))))))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
199
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
200 (defun vc-rcs-checkout-model (file)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
201 "RCS-specific version of `vc-checkout-model'."
56318
b9c0ed2a46bd (vc-rcs-checkout-model): Look at the version headers only if
André Spiegel <spiegel@gnu.org>
parents: 54466
diff changeset
202 (let (result)
b9c0ed2a46bd (vc-rcs-checkout-model): Look at the version headers only if
André Spiegel <spiegel@gnu.org>
parents: 54466
diff changeset
203 (when vc-consult-headers
b9c0ed2a46bd (vc-rcs-checkout-model): Look at the version headers only if
André Spiegel <spiegel@gnu.org>
parents: 54466
diff changeset
204 (vc-file-setprop file 'vc-checkout-model nil)
b9c0ed2a46bd (vc-rcs-checkout-model): Look at the version headers only if
André Spiegel <spiegel@gnu.org>
parents: 54466
diff changeset
205 (vc-rcs-consult-headers file)
b9c0ed2a46bd (vc-rcs-checkout-model): Look at the version headers only if
André Spiegel <spiegel@gnu.org>
parents: 54466
diff changeset
206 (setq result (vc-file-getprop file 'vc-checkout-model)))
b9c0ed2a46bd (vc-rcs-checkout-model): Look at the version headers only if
André Spiegel <spiegel@gnu.org>
parents: 54466
diff changeset
207 (or result
b9c0ed2a46bd (vc-rcs-checkout-model): Look at the version headers only if
André Spiegel <spiegel@gnu.org>
parents: 54466
diff changeset
208 (progn (vc-rcs-fetch-master-state file)
b9c0ed2a46bd (vc-rcs-checkout-model): Look at the version headers only if
André Spiegel <spiegel@gnu.org>
parents: 54466
diff changeset
209 (vc-file-getprop file 'vc-checkout-model)))))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
210
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
211 (defun vc-rcs-workfile-unchanged-p (file)
56953
2cc3f5b16438 Doc fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56318
diff changeset
212 "RCS-specific implementation of `vc-workfile-unchanged-p'."
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
213 ;; Try to use rcsdiff --brief. If rcsdiff does not understand that,
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
214 ;; do a double take and remember the fact for the future
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
215 (let* ((version (concat "-r" (vc-workfile-version file)))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
216 (status (if (eq vc-rcsdiff-knows-brief 'no)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
217 (vc-do-command nil 1 "rcsdiff" file version)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
218 (vc-do-command nil 2 "rcsdiff" file "--brief" version))))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
219 (if (eq status 2)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
220 (if (not vc-rcsdiff-knows-brief)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
221 (setq vc-rcsdiff-knows-brief 'no
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
222 status (vc-do-command nil 1 "rcsdiff" file version))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
223 (error "rcsdiff failed"))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
224 (if (not vc-rcsdiff-knows-brief) (setq vc-rcsdiff-knows-brief 'yes)))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
225 ;; The workfile is unchanged if rcsdiff found no differences.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
226 (zerop status)))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
227
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
228
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
229 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
230 ;;; State-changing functions
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
231 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
232
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
233 (defun vc-rcs-register (file &optional rev comment)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
234 "Register FILE into the RCS version-control system.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
235 REV is the optional revision number for the file. COMMENT can be used
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
236 to provide an initial description of FILE.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
237
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
238 `vc-register-switches' and `vc-rcs-register-switches' are passed to
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
239 the RCS command (in that order).
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
240
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
241 Automatically retrieve a read-only version of the file with keywords
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
242 expanded if `vc-keep-workfiles' is non-nil, otherwise, delete the workfile."
50903
c03b80e1bacd (vc-rcs-register, vc-rcs-checkin, vc-rcs-checkout)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49597
diff changeset
243 (let ((subdir (expand-file-name "RCS" (file-name-directory file))))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
244 (and (not (file-exists-p subdir))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
245 (not (directory-files (file-name-directory file)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
246 nil ".*,v$" t))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
247 (yes-or-no-p "Create RCS subdirectory? ")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
248 (make-directory subdir))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
249 (apply 'vc-do-command nil 0 "ci" file
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
250 ;; if available, use the secure registering option
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
251 (and (vc-rcs-release-p "5.6.4") "-i")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
252 (concat (if vc-keep-workfiles "-u" "-r") rev)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
253 (and comment (concat "-t-" comment))
50903
c03b80e1bacd (vc-rcs-register, vc-rcs-checkin, vc-rcs-checkout)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49597
diff changeset
254 (vc-switches 'RCS 'register))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
255 ;; parse output to find master file name and workfile version
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
256 (with-current-buffer "*vc*"
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
257 (goto-char (point-min))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
258 (let ((name (if (looking-at (concat "^\\(.*\\) <-- "
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
259 (file-name-nondirectory file)))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
260 (match-string 1))))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
261 (if (not name)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
262 ;; if we couldn't find the master name,
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
263 ;; run vc-rcs-registered to get it
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
264 ;; (will be stored into the vc-name property)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
265 (vc-rcs-registered file)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
266 (vc-file-setprop file 'vc-name
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
267 (if (file-name-absolute-p name)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
268 name
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
269 (expand-file-name
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
270 name
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
271 (file-name-directory file))))))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
272 (vc-file-setprop file 'vc-workfile-version
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
273 (if (re-search-forward
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
274 "^initial revision: \\([0-9.]+\\).*\n"
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
275 nil t)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
276 (match-string 1))))))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
277
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
278 (defun vc-rcs-responsible-p (file)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
279 "Return non-nil if RCS thinks it would be responsible for registering FILE."
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
280 ;; TODO: check for all the patterns in vc-rcs-master-templates
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
281 (file-directory-p (expand-file-name "RCS" (file-name-directory file))))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
282
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
283 (defun vc-rcs-receive-file (file rev)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
284 "Implementation of receive-file for RCS."
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
285 (let ((checkout-model (vc-checkout-model file)))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
286 (vc-rcs-register file rev "")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
287 (when (eq checkout-model 'implicit)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
288 (vc-rcs-set-non-strict-locking file))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
289 (vc-rcs-set-default-branch file (concat rev ".1"))))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
290
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
291 (defun vc-rcs-unregister (file)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
292 "Unregister FILE from RCS.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
293 If this leaves the RCS subdirectory empty, ask the user
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
294 whether to remove it."
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
295 (let* ((master (vc-name file))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
296 (dir (file-name-directory master))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
297 (backup-info (find-backup-file-name master)))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
298 (if (not backup-info)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
299 (delete-file master)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
300 (rename-file master (car backup-info) 'ok-if-already-exists)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
301 (dolist (f (cdr backup-info)) (ignore-errors (delete-file f))))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
302 (and (string= (file-name-nondirectory (directory-file-name dir)) "RCS")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
303 ;; check whether RCS dir is empty, i.e. it does not
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
304 ;; contain any files except "." and ".."
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49092
diff changeset
305 (not (directory-files dir nil
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
306 "^\\([^.]\\|\\.[^.]\\|\\.\\.[^.]\\).*"))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
307 (yes-or-no-p (format "Directory %s is empty; remove it? " dir))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
308 (delete-directory dir))))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
309
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
310 (defun vc-rcs-checkin (file rev comment)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
311 "RCS-specific version of `vc-backend-checkin'."
50903
c03b80e1bacd (vc-rcs-register, vc-rcs-checkin, vc-rcs-checkout)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49597
diff changeset
312 (let ((switches (vc-switches 'RCS 'checkin)))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
313 (let ((old-version (vc-workfile-version file)) new-version
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
314 (default-branch (vc-file-getprop file 'vc-rcs-default-branch)))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49092
diff changeset
315 ;; Force branch creation if an appropriate
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
316 ;; default branch has been set.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
317 (and (not rev)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
318 default-branch
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
319 (string-match (concat "^" (regexp-quote old-version) "\\.")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
320 default-branch)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
321 (setq rev default-branch)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
322 (setq switches (cons "-f" switches)))
48969
8a48bb5e7e5b (vc-rcs-checkin): By default, always specify the
André Spiegel <spiegel@gnu.org>
parents: 48966
diff changeset
323 (if (and (not rev) old-version)
8a48bb5e7e5b (vc-rcs-checkin): By default, always specify the
André Spiegel <spiegel@gnu.org>
parents: 48966
diff changeset
324 (setq rev (vc-branch-part old-version)))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
325 (apply 'vc-do-command nil 0 "ci" (vc-name file)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
326 ;; if available, use the secure check-in option
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
327 (and (vc-rcs-release-p "5.6.4") "-j")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
328 (concat (if vc-keep-workfiles "-u" "-r") rev)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
329 (concat "-m" comment)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
330 switches)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
331 (vc-file-setprop file 'vc-workfile-version nil)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
332
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
333 ;; determine the new workfile version
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
334 (set-buffer "*vc*")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
335 (goto-char (point-min))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
336 (when (or (re-search-forward
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
337 "new revision: \\([0-9.]+\\);" nil t)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
338 (re-search-forward
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
339 "reverting to previous revision \\([0-9.]+\\)" nil t))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
340 (setq new-version (match-string 1))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
341 (vc-file-setprop file 'vc-workfile-version new-version))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
342
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
343 ;; if we got to a different branch, adjust the default
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
344 ;; branch accordingly
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
345 (cond
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
346 ((and old-version new-version
42549
6301bb6ec388 (vc-rcs-steal-lock): Do a real checkout after stealing the lock, so
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
347 (not (string= (vc-branch-part old-version)
6301bb6ec388 (vc-rcs-steal-lock): Do a real checkout after stealing the lock, so
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
348 (vc-branch-part new-version))))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49092
diff changeset
349 (vc-rcs-set-default-branch file
42549
6301bb6ec388 (vc-rcs-steal-lock): Do a real checkout after stealing the lock, so
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
350 (if (vc-trunk-p new-version) nil
6301bb6ec388 (vc-rcs-steal-lock): Do a real checkout after stealing the lock, so
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
351 (vc-branch-part new-version)))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
352 ;; If this is an old RCS release, we might have
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
353 ;; to remove a remaining lock.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
354 (if (not (vc-rcs-release-p "5.6.2"))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
355 ;; exit status of 1 is also accepted.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
356 ;; It means that the lock was removed before.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
357 (vc-do-command nil 1 "rcs" (vc-name file)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
358 (concat "-u" old-version))))))))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
359
47797
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
360 (defun vc-rcs-find-version (file rev buffer)
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
361 (apply 'vc-do-command
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
362 buffer 0 "co" (vc-name file)
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
363 "-q" ;; suppress diagnostic output
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
364 (concat "-p" rev)
50903
c03b80e1bacd (vc-rcs-register, vc-rcs-checkin, vc-rcs-checkout)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49597
diff changeset
365 (vc-switches 'RCS 'checkout)))
47797
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
366
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
367 (defun vc-rcs-checkout (file &optional editable rev)
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
368 "Retrieve a copy of a saved version of FILE."
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
369 (let ((file-buffer (get-file-buffer file))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
370 switches)
47797
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
371 (message "Checking out %s..." file)
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
372 (save-excursion
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
373 ;; Change buffers to get local value of vc-checkout-switches.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
374 (if file-buffer (set-buffer file-buffer))
50903
c03b80e1bacd (vc-rcs-register, vc-rcs-checkin, vc-rcs-checkout)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49597
diff changeset
375 (setq switches (vc-switches 'RCS 'checkout))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
376 ;; Save this buffer's default-directory
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
377 ;; and use save-excursion to make sure it is restored
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
378 ;; in the same buffer it was saved in.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
379 (let ((default-directory default-directory))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
380 (save-excursion
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
381 ;; Adjust the default-directory so that the check-out creates
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
382 ;; the file in the right place.
47797
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
383 (setq default-directory (file-name-directory file))
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
384 (let (new-version)
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
385 ;; if we should go to the head of the trunk,
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
386 ;; clear the default branch first
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
387 (and rev (string= rev "")
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
388 (vc-rcs-set-default-branch file nil))
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
389 ;; now do the checkout
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
390 (apply 'vc-do-command
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
391 nil 0 "co" (vc-name file)
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
392 ;; If locking is not strict, force to overwrite
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
393 ;; the writable workfile.
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
394 (if (eq (vc-checkout-model file) 'implicit) "-f")
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
395 (if editable "-l")
48966
a327c58de610 (vc-rcs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 48282
diff changeset
396 (if (stringp rev)
a327c58de610 (vc-rcs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 48282
diff changeset
397 ;; a literal revision was specified
a327c58de610 (vc-rcs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 48282
diff changeset
398 (concat "-r" rev)
a327c58de610 (vc-rcs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 48282
diff changeset
399 (let ((workrev (vc-workfile-version file)))
a327c58de610 (vc-rcs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 48282
diff changeset
400 (if workrev
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49092
diff changeset
401 (concat "-r"
48966
a327c58de610 (vc-rcs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 48282
diff changeset
402 (if (not rev)
a327c58de610 (vc-rcs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 48282
diff changeset
403 ;; no revision specified:
a327c58de610 (vc-rcs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 48282
diff changeset
404 ;; use current workfile version
a327c58de610 (vc-rcs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 48282
diff changeset
405 workrev
a327c58de610 (vc-rcs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 48282
diff changeset
406 ;; REV is t ...
49092
da6da3a685c2 (vc-rcs-checkout): Fix the check whether we are on a branch.
André Spiegel <spiegel@gnu.org>
parents: 49021
diff changeset
407 (if (not (vc-trunk-p workrev))
48966
a327c58de610 (vc-rcs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 48282
diff changeset
408 ;; ... go to head of current branch
a327c58de610 (vc-rcs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 48282
diff changeset
409 (vc-branch-part workrev)
a327c58de610 (vc-rcs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 48282
diff changeset
410 ;; ... go to head of trunk
a327c58de610 (vc-rcs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 48282
diff changeset
411 (vc-rcs-set-default-branch file
a327c58de610 (vc-rcs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 48282
diff changeset
412 nil)
a327c58de610 (vc-rcs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 48282
diff changeset
413 ""))))))
47797
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
414 switches)
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
415 ;; determine the new workfile version
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
416 (with-current-buffer "*vc*"
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
417 (setq new-version
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
418 (vc-parse-buffer "^revision \\([0-9.]+\\).*\n" 1)))
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
419 (vc-file-setprop file 'vc-workfile-version new-version)
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
420 ;; if necessary, adjust the default branch
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
421 (and rev (not (string= rev ""))
58320
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
422 (vc-rcs-set-default-branch
47797
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
423 file
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
424 (if (vc-rcs-latest-on-branch-p file new-version)
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
425 (if (vc-trunk-p new-version) nil
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
426 (vc-branch-part new-version))
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
427 new-version)))))
d0555af982c8 (vc-rcs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47757
diff changeset
428 (message "Checking out %s...done" file)))))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
429
39001
d13c2139752b (vc-*-revert-file): Handle new optional arg CONTENTS-DONE.
André Spiegel <spiegel@gnu.org>
parents: 38436
diff changeset
430 (defun vc-rcs-revert (file &optional contents-done)
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
431 "Revert FILE to the version it was based on."
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
432 (vc-do-command nil 0 "co" (vc-name file) "-f"
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49092
diff changeset
433 (concat (if (eq (vc-state file) 'edited) "-u" "-r")
49021
f5b3c92f968b (vc-rcs-revert): Unlock only if the user does have the lock.
André Spiegel <spiegel@gnu.org>
parents: 48969
diff changeset
434 (vc-workfile-version file))))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
435
35133
1b45907ef7a8 (vc-rcs-checkout, vc-rcs-cancel-version): Renamed arg WRITABLE to EDITABLE.
André Spiegel <spiegel@gnu.org>
parents: 33636
diff changeset
436 (defun vc-rcs-cancel-version (file editable)
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
437 "Undo the most recent checkin of FILE.
35133
1b45907ef7a8 (vc-rcs-checkout, vc-rcs-cancel-version): Renamed arg WRITABLE to EDITABLE.
André Spiegel <spiegel@gnu.org>
parents: 33636
diff changeset
438 EDITABLE non-nil means previous version should be locked."
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
439 (let* ((target (vc-workfile-version file))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
440 (previous (if (vc-trunk-p target) "" (vc-branch-part target)))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
441 (config (current-window-configuration))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
442 (done nil))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
443 (vc-do-command nil 0 "rcs" (vc-name file) (concat "-o" target))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
444 ;; Check out the most recent remaining version. If it fails, because
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
445 ;; the whole branch got deleted, do a double-take and check out the
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
446 ;; version where the branch started.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
447 (while (not done)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
448 (condition-case err
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
449 (progn
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
450 (vc-do-command nil 0 "co" (vc-name file) "-f"
35133
1b45907ef7a8 (vc-rcs-checkout, vc-rcs-cancel-version): Renamed arg WRITABLE to EDITABLE.
André Spiegel <spiegel@gnu.org>
parents: 33636
diff changeset
451 (concat (if editable "-l" "-u") previous))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
452 (setq done t))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
453 (error (set-buffer "*vc*")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
454 (goto-char (point-min))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
455 (if (search-forward "no side branches present for" nil t)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
456 (progn (setq previous (vc-branch-part previous))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
457 (vc-rcs-set-default-branch file previous)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
458 ;; vc-do-command popped up a window with
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
459 ;; the error message. Get rid of it, by
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
460 ;; restoring the old window configuration.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
461 (set-window-configuration config))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
462 ;; No, it was some other error: re-signal it.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
463 (signal (car err) (cdr err))))))))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
464
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
465 (defun vc-rcs-merge (file first-version &optional second-version)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
466 "Merge changes into current working copy of FILE.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
467 The changes are between FIRST-VERSION and SECOND-VERSION."
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
468 (vc-do-command nil 1 "rcsmerge" (vc-name file)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
469 "-kk" ; ignore keyword conflicts
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
470 (concat "-r" first-version)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
471 (if second-version (concat "-r" second-version))))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
472
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
473 (defun vc-rcs-steal-lock (file &optional rev)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
474 "Steal the lock on the current workfile for FILE and revision REV.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
475 Needs RCS 5.6.2 or later for -M."
42549
6301bb6ec388 (vc-rcs-steal-lock): Do a real checkout after stealing the lock, so
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
476 (vc-do-command nil 0 "rcs" (vc-name file) "-M" (concat "-u" rev))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49092
diff changeset
477 ;; Do a real checkout after stealing the lock, so that we see
42549
6301bb6ec388 (vc-rcs-steal-lock): Do a real checkout after stealing the lock, so
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
478 ;; expanded headers.
6301bb6ec388 (vc-rcs-steal-lock): Do a real checkout after stealing the lock, so
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
479 (vc-do-command nil 0 "co" (vc-name file) "-f" (concat "-l" rev)))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
480
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
481
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
482
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
483 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
484 ;;; History functions
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
485 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
486
54466
37e95eddf2e8 (vc-rcs-print-log, vc-rcs-diff): Add optional BUFFER argument.
André Spiegel <spiegel@gnu.org>
parents: 52401
diff changeset
487 (defun vc-rcs-print-log (file &optional buffer)
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
488 "Get change log associated with FILE."
54466
37e95eddf2e8 (vc-rcs-print-log, vc-rcs-diff): Add optional BUFFER argument.
André Spiegel <spiegel@gnu.org>
parents: 52401
diff changeset
489 (vc-do-command buffer 0 "rlog" (vc-name file)))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
490
54466
37e95eddf2e8 (vc-rcs-print-log, vc-rcs-diff): Add optional BUFFER argument.
André Spiegel <spiegel@gnu.org>
parents: 52401
diff changeset
491 (defun vc-rcs-diff (file &optional oldvers newvers buffer)
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
492 "Get a difference report using RCS between two versions of FILE."
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
493 (if (not oldvers) (setq oldvers (vc-workfile-version file)))
54466
37e95eddf2e8 (vc-rcs-print-log, vc-rcs-diff): Add optional BUFFER argument.
André Spiegel <spiegel@gnu.org>
parents: 52401
diff changeset
494 (apply 'vc-do-command (or buffer "*vc-diff*") 1 "rcsdiff" file
35822
cd59c63d4aac (vc-rcs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35178
diff changeset
495 (append (list "-q"
cd59c63d4aac (vc-rcs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35178
diff changeset
496 (concat "-r" oldvers)
cd59c63d4aac (vc-rcs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35178
diff changeset
497 (and newvers (concat "-r" newvers)))
50903
c03b80e1bacd (vc-rcs-register, vc-rcs-checkin, vc-rcs-checkout)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49597
diff changeset
498 (vc-switches 'RCS 'diff))))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
499
58320
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
500 (defun vc-rcs-annotate-command (file buffer &optional revision)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
501 "Annotate FILE, inserting the results in BUFFER.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
502 Optional arg REVISION is a revision to annotate from."
59181
a22da8bff83f (vc-rcs-annotate-command):
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 58320
diff changeset
503 (vc-setup-buffer buffer)
58320
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
504 ;; Aside from the "head revision on the trunk", the instructions for
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
505 ;; each revision on the trunk are an ordered list of kill and insert
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
506 ;; commands necessary to go from the chronologically-following
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
507 ;; revision to this one. That is, associated with revision N are
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
508 ;; edits that applied to revision N+1 would result in revision N.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
509 ;;
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
510 ;; On a branch, however, (some) things are inverted: the commands
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
511 ;; listed are those necessary to go from the chronologically-preceding
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
512 ;; revision to this one. That is, associated with revision N are
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
513 ;; edits that applied to revision N-1 would result in revision N.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
514 ;;
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
515 ;; So, to get per-line history info, we apply reverse-chronological
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
516 ;; edits, starting with the head revision on the trunk, all the way
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
517 ;; back through the initial revision (typically "1.1" or similar),
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
518 ;; then apply forward-chronological edits -- keeping track of which
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
519 ;; revision is associated with each inserted line -- until we reach
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
520 ;; the desired revision for display (which may be either on the trunk
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
521 ;; or on a branch).
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
522 (let* ((tree (with-temp-buffer
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
523 (insert-file-contents (vc-rcs-registered file))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
524 (vc-rcs-parse)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
525 (revisions (cdr (assq 'revisions tree)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
526 ;; The revision N whose instructions we currently are processing.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
527 (cur (cdr (assq 'head (cdr (assq 'headers tree)))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
528 ;; Alist from the parse tree for N.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
529 (meta (cdr (assoc cur revisions)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
530 ;; Point and temporary string, respectively.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
531 p s
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
532 ;; "Next-branch list". Nil means the desired revision to
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
533 ;; display lives on the trunk. Non-nil means it lives on a
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
534 ;; branch, in which case the value is a list of revision pairs
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
535 ;; (PARENT . CHILD), the first PARENT being on the trunk, that
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
536 ;; links each series of revisions in the path from the initial
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
537 ;; revision to the desired revision to display.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
538 nbls
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
539 ;; "Path-accumulate-predicate plus revision/date/author".
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
540 ;; Until set, forward-chronological edits are not accumulated.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
541 ;; Once set, its value (updated every revision) is used for
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
542 ;; the text property `:vc-rcs-r/d/a' for inserts during
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
543 ;; processing of forward-chronological instructions for N.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
544 ;; See internal func `r/d/a'.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
545 prda
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
546 ;; List of forward-chronological instructions, each of the
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
547 ;; form: (POS . ACTION), where POS is a buffer position. If
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
548 ;; ACTION is a string, it is inserted, otherwise it is taken as
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
549 ;; the number of characters to be deleted.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
550 path
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
551 ;; N+1. When `cur' is "", this is the initial revision.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
552 pre)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
553 (unless revision
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
554 (setq revision cur))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
555 (unless (assoc revision revisions)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
556 (error "No such revision: %s" revision))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
557 ;; Find which branches (if any) must be included in the edits.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
558 (let ((par revision)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
559 bpt kids)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
560 (while (setq bpt (vc-branch-part par)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
561 par (vc-branch-part bpt))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
562 (setq kids (cdr (assq 'branches (cdr (assoc par revisions)))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
563 ;; A branchpoint may have multiple children. Find the right one.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
564 (while (not (string= bpt (vc-branch-part (car kids))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
565 (setq kids (cdr kids)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
566 (push (cons par (car kids)) nbls)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
567 ;; Start with the full text.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
568 (set-buffer buffer)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
569 (insert (cdr (assq 'text meta)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
570 ;; Apply reverse-chronological edits on the trunk, computing and
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
571 ;; accumulating forward-chronological edits after some point, for
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
572 ;; later.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
573 (flet ((r/d/a () (vector pre
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
574 (cdr (assq 'date meta))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
575 (cdr (assq 'author meta)))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
576 (while (when (setq pre cur cur (cdr (assq 'next meta)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
577 (not (string= "" cur)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
578 (setq
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
579 ;; Start accumulating the forward-chronological edits when N+1
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
580 ;; on the trunk is either the desired revision to display, or
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
581 ;; the appropriate branchpoint for it. Do this before
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
582 ;; updating `meta' since `r/d/a' uses N+1's `meta' value.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
583 prda (when (or prda (string= (if nbls (caar nbls) revision) pre))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
584 (r/d/a))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
585 meta (cdr (assoc cur revisions)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
586 ;; Edits in the parse tree specify a line number (in the buffer
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
587 ;; *BEFORE* editing occurs) to start from, but line numbers
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
588 ;; change as a result of edits. To DTRT, we apply edits in
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
589 ;; order of descending buffer position so that edits further
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
590 ;; down in the buffer occur first w/o corrupting specified
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
591 ;; buffer positions of edits occurring towards the beginning of
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
592 ;; the buffer. In this way we avoid using markers. A pleasant
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
593 ;; property of this approach is ability to push instructions
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
594 ;; onto `path' directly, w/o need to maintain rev boundaries.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
595 (dolist (insn (cdr (assq :insn meta)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
596 (goto-line (pop insn))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
597 (setq p (point))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
598 (case (pop insn)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
599 (k (setq s (buffer-substring-no-properties
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
600 p (progn (forward-line (car insn))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
601 (point))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
602 (when prda
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
603 (push `(,p . ,(propertize s :vc-rcs-r/d/a prda)) path))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
604 (delete-region p (point)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
605 (i (setq s (car insn))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
606 (when prda
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
607 (push `(,p . ,(length s)) path))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
608 (insert s)))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
609 ;; For the initial revision, setting `:vc-rcs-r/d/a' directly is
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
610 ;; equivalent to pushing an insert instruction (of the entire buffer
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
611 ;; contents) onto `path' then erasing the buffer, but less wasteful.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
612 (put-text-property (point-min) (point-max) :vc-rcs-r/d/a (r/d/a))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
613 ;; Now apply the forward-chronological edits for the trunk.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
614 (dolist (insn path)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
615 (goto-char (pop insn))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
616 (if (stringp insn)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
617 (insert insn)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
618 (delete-char insn)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
619 ;; Now apply the forward-chronological edits (directly from the
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
620 ;; parse-tree) for the branch(es), if necessary. We re-use vars
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
621 ;; `pre' and `meta' for the sake of internal func `r/d/a'.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
622 (while nbls
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
623 (setq pre (cdr (pop nbls)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
624 (while (progn
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
625 (setq meta (cdr (assoc pre revisions))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
626 prda nil)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
627 (dolist (insn (cdr (assq :insn meta)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
628 (goto-line (pop insn))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
629 (case (pop insn)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
630 (k (delete-region
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
631 (point) (progn (forward-line (car insn))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
632 (point))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
633 (i (insert (propertize
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
634 (car insn)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
635 :vc-rcs-r/d/a
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
636 (or prda (setq prda (r/d/a))))))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
637 (prog1 (not (string= (if nbls (caar nbls) revision) pre))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
638 (setq pre (cdr (assq 'next meta)))))))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
639 ;; Lastly, for each line, insert at bol nicely-formatted history info.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
640 ;; We do two passes to collect summary information used to minimize
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
641 ;; the annotation's usage of screen real-estate: (1) Consider rendered
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
642 ;; width of revision plus author together as a unit; and (2) Omit
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
643 ;; author entirely if all authors are the same as the user.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
644 (let ((ht (make-hash-table :test 'eq))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
645 (me (user-login-name))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
646 (maxw 0)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
647 (all-me t)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
648 rda w a)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
649 (goto-char (point-max))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
650 (while (not (bobp))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
651 (forward-line -1)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
652 (setq rda (get-text-property (point) :vc-rcs-r/d/a))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
653 (unless (gethash rda ht)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
654 (setq a (aref rda 2)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
655 all-me (and all-me (string= a me)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
656 (puthash rda (setq w (+ (length (aref rda 0))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
657 (length a)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
658 ht)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
659 (setq maxw (max w maxw))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
660 (let ((padding (make-string maxw 32)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
661 (flet ((pad (w) (substring-no-properties padding w))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
662 (render (rda &rest ls)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
663 (propertize
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
664 (apply 'concat
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
665 (format-time-string "%Y-%m-%d" (aref rda 1))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
666 " "
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
667 (aref rda 0)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
668 ls)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
669 :vc-rcs-r/d/a rda)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
670 (maphash
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
671 (if all-me
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
672 (lambda (rda w)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
673 (puthash rda (render rda (pad w) ": ") ht))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
674 (lambda (rda w)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
675 (puthash rda (render rda " " (pad w) " " (aref rda 2) ": ") ht)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
676 ht)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
677 (while (not (eobp))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
678 (insert (gethash (get-text-property (point) :vc-rcs-r/d/a) ht))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
679 (forward-line 1))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
680
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
681 (defun vc-rcs-annotate-current-time ()
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
682 "Return the current time, based at midnight of the current day, and
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
683 encoded as fractional days."
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
684 (vc-annotate-convert-time
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
685 (apply 'encode-time 0 0 0 (nthcdr 3 (decode-time (current-time))))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
686
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
687 (defun vc-rcs-annotate-time ()
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
688 "Return the time of the next annotation (as fraction of days)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
689 systime, or nil if there is none. Also, reposition point."
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
690 (unless (eobp)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
691 (search-forward ": ")
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
692 (vc-annotate-convert-time
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
693 (aref (get-text-property (point) :vc-rcs-r/d/a) 1))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
694
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
695 (defun vc-rcs-annotate-extract-revision-at-line ()
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
696 (aref (get-text-property (point) :vc-rcs-r/d/a) 0))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
697
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
698
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
699 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
700 ;;; Snapshot system
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
701 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
702
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
703 (defun vc-rcs-assign-name (file name)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
704 "Assign to FILE's latest version a given NAME."
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
705 (vc-do-command nil 0 "rcs" (vc-name file) (concat "-n" name ":")))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
706
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
707
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
708 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
709 ;;; Miscellaneous
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
710 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
711
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
712 (defun vc-rcs-check-headers ()
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
713 "Check if the current file has any headers in it."
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
714 (save-excursion
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
715 (goto-char (point-min))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
716 (re-search-forward "\\$[A-Za-z\300-\326\330-\366\370-\377]+\
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
717 \\(: [\t -#%-\176\240-\377]*\\)?\\$" nil t)))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
718
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
719 (defun vc-rcs-clear-headers ()
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
720 "Implementation of vc-clear-headers for RCS."
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
721 (let ((case-fold-search nil))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
722 (goto-char (point-min))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
723 (while (re-search-forward
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
724 (concat "\\$\\(Author\\|Date\\|Header\\|Id\\|Locker\\|Name\\|"
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
725 "RCSfile\\|Revision\\|Source\\|State\\): [^$\n]+\\$")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
726 nil t)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
727 (replace-match "$\\1$"))))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
728
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
729 (defun vc-rcs-rename-file (old new)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
730 ;; Just move the master file (using vc-rcs-master-templates).
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
731 (vc-rename-master (vc-name old) new vc-rcs-master-templates))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
732
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
733
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
734 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
735 ;;; Internal functions
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
736 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 32096
diff changeset
737
31809
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
738 (defun vc-rcs-workfile-is-newer (file)
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
739 "Return non-nil if FILE is newer than its RCS master.
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
740 This likely means that FILE has been changed with respect
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
741 to its master version."
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
742 (let ((file-time (nth 5 (file-attributes file)))
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
743 (master-time (nth 5 (file-attributes (vc-name file)))))
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
744 (or (> (nth 0 file-time) (nth 0 master-time))
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
745 (and (= (nth 0 file-time) (nth 0 master-time))
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
746 (> (nth 1 file-time) (nth 1 master-time))))))
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
747
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
748 (defun vc-rcs-find-most-recent-rev (branch)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
749 "Find most recent revision on BRANCH."
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
750 (goto-char (point-min))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
751 (let ((latest-rev -1) value)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
752 (while (re-search-forward (concat "^\\(" (regexp-quote branch)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
753 "\\.\\([0-9]+\\)\\)\ndate[ \t]+[0-9.]+;")
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
754 nil t)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
755 (let ((rev (string-to-number (match-string 2))))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
756 (when (< latest-rev rev)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
757 (setq latest-rev rev)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
758 (setq value (match-string 1)))))
31809
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
759 (or value
42549
6301bb6ec388 (vc-rcs-steal-lock): Do a real checkout after stealing the lock, so
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
760 (vc-branch-part branch))))
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
761
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
762 (defun vc-rcs-fetch-master-state (file &optional workfile-version)
31476
18bf0c070870 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
763 "Compute the master file's idea of the state of FILE.
18bf0c070870 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
764 If a WORKFILE-VERSION is given, compute the state of that version,
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
765 otherwise determine the workfile version based on the master file.
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
766 This function sets the properties `vc-workfile-version' and
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
767 `vc-checkout-model' to their correct values, based on the master
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
768 file."
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
769 (with-temp-buffer
46543
7fa004ccd462 (vc-rcs-fetch-master-state): Be more careful to check
André Spiegel <spiegel@gnu.org>
parents: 44004
diff changeset
770 (if (or (not (vc-insert-file (vc-name file) "^[0-9]"))
7fa004ccd462 (vc-rcs-fetch-master-state): Be more careful to check
André Spiegel <spiegel@gnu.org>
parents: 44004
diff changeset
771 (progn (goto-char (point-min))
7fa004ccd462 (vc-rcs-fetch-master-state): Be more careful to check
André Spiegel <spiegel@gnu.org>
parents: 44004
diff changeset
772 (not (looking-at "^head[ \t\n]+[^;]+;$"))))
7fa004ccd462 (vc-rcs-fetch-master-state): Be more careful to check
André Spiegel <spiegel@gnu.org>
parents: 44004
diff changeset
773 (error "File %s is not an RCS master file" (vc-name file)))
32094
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
774 (let ((workfile-is-latest nil)
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
775 (default-branch (vc-parse-buffer "^branch[ \t\n]+\\([^;]*\\);" 1)))
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
776 (vc-file-setprop file 'vc-rcs-default-branch default-branch)
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
777 (unless workfile-version
32094
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
778 ;; Workfile version not known yet. Determine that first. It
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
779 ;; is either the head of the trunk, the head of the default
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
780 ;; branch, or the "default branch" itself, if that is a full
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
781 ;; revision number.
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
782 (cond
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
783 ;; no default branch
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
784 ((or (not default-branch) (string= "" default-branch))
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
785 (setq workfile-version
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
786 (vc-parse-buffer "^head[ \t\n]+\\([^;]+\\);" 1))
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
787 (setq workfile-is-latest t))
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
788 ;; default branch is actually a revision
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
789 ((string-match "^[0-9]+\\.[0-9]+\\(\\.[0-9]+\\.[0-9]+\\)*$"
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
790 default-branch)
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
791 (setq workfile-version default-branch))
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
792 ;; else, search for the head of the default branch
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
793 (t (vc-insert-file (vc-name file) "^desc")
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
794 (setq workfile-version
32094
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
795 (vc-rcs-find-most-recent-rev default-branch))
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
796 (setq workfile-is-latest t)))
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
797 (vc-file-setprop file 'vc-workfile-version workfile-version))
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
798 ;; Check strict locking
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
799 (goto-char (point-min))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
800 (vc-file-setprop file 'vc-checkout-model
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
801 (if (re-search-forward ";[ \t\n]*strict;" nil t)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
802 'locking 'implicit))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
803 ;; Compute state of workfile version
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
804 (goto-char (point-min))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
805 (let ((locking-user
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
806 (vc-parse-buffer (concat "^locks[ \t\n]+[^;]*[ \t\n]+\\([^:]+\\):"
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
807 (regexp-quote workfile-version)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
808 "[^0-9.]")
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
809 1)))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
810 (cond
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
811 ;; not locked
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
812 ((not locking-user)
31476
18bf0c070870 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
813 (if (or workfile-is-latest
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
814 (vc-rcs-latest-on-branch-p file workfile-version))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
815 ;; workfile version is latest on branch
33610
32bcc6e27e02 (vc-rcs-state): Call vc-workfile-unchanged-p only here, and
André Spiegel <spiegel@gnu.org>
parents: 33560
diff changeset
816 'up-to-date
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
817 ;; workfile version is not latest on branch
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
818 'needs-patch))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
819 ;; locked by the calling user
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
820 ((and (stringp locking-user)
68415
469f8d551600 (vc-rcs-fetch-master-state, vc-rcs-consult-headers): Pass FILE to
André Spiegel <spiegel@gnu.org>
parents: 68332
diff changeset
821 (string= locking-user (vc-user-login-name file)))
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
822 (if (or (eq (vc-checkout-model file) 'locking)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
823 workfile-is-latest
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
824 (vc-rcs-latest-on-branch-p file workfile-version))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
825 'edited
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
826 ;; Locking is not used for the file, but the owner does
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
827 ;; have a lock, and there is a higher version on the current
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
828 ;; branch. Not sure if this can occur, and if it is right
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
829 ;; to use `needs-merge' in this case.
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
830 'needs-merge))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
831 ;; locked by somebody else
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
832 ((stringp locking-user)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
833 locking-user)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
834 (t
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
835 (error "Error getting state of RCS file")))))))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
836
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
837 (defun vc-rcs-consult-headers (file)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
838 "Search for RCS headers in FILE, and set properties accordingly.
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
839
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
840 Returns: nil if no headers were found
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
841 'rev if a workfile revision was found
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
842 'rev-and-lock if revision and lock info was found"
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
843 (cond
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
844 ((not (get-file-buffer file)) nil)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
845 ((let (status version locking-user)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
846 (save-excursion
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
847 (set-buffer (get-file-buffer file))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
848 (goto-char (point-min))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
849 (cond
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
850 ;; search for $Id or $Header
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
851 ;; -------------------------
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
852 ;; The `\ 's below avoid an RCS 5.7 bug when checking in this file.
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
853 ((or (and (search-forward "$Id\ : " nil t)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
854 (looking-at "[^ ]+ \\([0-9.]+\\) "))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
855 (and (progn (goto-char (point-min))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
856 (search-forward "$Header\ : " nil t))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
857 (looking-at "[^ ]+ \\([0-9.]+\\) ")))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
858 (goto-char (match-end 0))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
859 ;; if found, store the revision number ...
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
860 (setq version (match-string-no-properties 1))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
861 ;; ... and check for the locking state
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
862 (cond
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
863 ((looking-at
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
864 (concat "[0-9]+[/-][01][0-9][/-][0-3][0-9] " ; date
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
865 "[0-2][0-9]:[0-5][0-9]+:[0-6][0-9]+\\([+-][0-9:]+\\)? " ; time
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
866 "[^ ]+ [^ ]+ ")) ; author & state
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
867 (goto-char (match-end 0)) ; [0-6] in regexp handles leap seconds
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
868 (cond
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
869 ;; unlocked revision
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
870 ((looking-at "\\$")
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
871 (setq locking-user 'none)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
872 (setq status 'rev-and-lock))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
873 ;; revision is locked by some user
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
874 ((looking-at "\\([^ ]+\\) \\$")
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
875 (setq locking-user (match-string-no-properties 1))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
876 (setq status 'rev-and-lock))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
877 ;; everything else: false
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
878 (nil)))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
879 ;; unexpected information in
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
880 ;; keyword string --> quit
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
881 (nil)))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
882 ;; search for $Revision
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
883 ;; --------------------
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
884 ((re-search-forward (concat "\\$"
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
885 "Revision: \\([0-9.]+\\) \\$")
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
886 nil t)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
887 ;; if found, store the revision number ...
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
888 (setq version (match-string-no-properties 1))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
889 ;; and see if there's any lock information
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
890 (goto-char (point-min))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
891 (if (re-search-forward (concat "\\$" "Locker:") nil t)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
892 (cond ((looking-at " \\([^ ]+\\) \\$")
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
893 (setq locking-user (match-string-no-properties 1))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
894 (setq status 'rev-and-lock))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
895 ((looking-at " *\\$")
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
896 (setq locking-user 'none)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
897 (setq status 'rev-and-lock))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
898 (t
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
899 (setq locking-user 'none)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
900 (setq status 'rev-and-lock)))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
901 (setq status 'rev)))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
902 ;; else: nothing found
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
903 ;; -------------------
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
904 (t nil)))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
905 (if status (vc-file-setprop file 'vc-workfile-version version))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
906 (and (eq status 'rev-and-lock)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
907 (vc-file-setprop file 'vc-state
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
908 (cond
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
909 ((eq locking-user 'none) 'up-to-date)
68415
469f8d551600 (vc-rcs-fetch-master-state, vc-rcs-consult-headers): Pass FILE to
André Spiegel <spiegel@gnu.org>
parents: 68332
diff changeset
910 ((string= locking-user (vc-user-login-name file))
469f8d551600 (vc-rcs-fetch-master-state, vc-rcs-consult-headers): Pass FILE to
André Spiegel <spiegel@gnu.org>
parents: 68332
diff changeset
911 'edited)
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
912 (t locking-user)))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
913 ;; If the file has headers, we don't want to query the
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
914 ;; master file, because that would eliminate all the
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
915 ;; performance gain the headers brought us. We therefore
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
916 ;; use a heuristic now to find out whether locking is used
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
917 ;; for this file. If we trust the file permissions, and the
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
918 ;; file is not locked, then if the file is read-only we
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
919 ;; assume that locking is used for the file, otherwise
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
920 ;; locking is not used.
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
921 (not (vc-mistrust-permissions file))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
922 (vc-up-to-date-p file)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
923 (if (string-match ".r-..-..-." (nth 8 (file-attributes file)))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
924 (vc-file-setprop file 'vc-checkout-model 'locking)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
925 (vc-file-setprop file 'vc-checkout-model 'implicit)))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
926 status))))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
927
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
928 (defun vc-release-greater-or-equal (r1 r2)
31476
18bf0c070870 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
929 "Compare release numbers, represented as strings.
18bf0c070870 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
930 Release components are assumed cardinal numbers, not decimal fractions
18bf0c070870 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
931 \(5.10 is a higher release than 5.9\). Omitted fields are considered
18bf0c070870 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
932 lower \(5.6.7 is earlier than 5.6.7.1\). Comparison runs till the end
18bf0c070870 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
933 of the string is found, or a non-numeric component shows up \(5.6.7 is
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
934 earlier than \"5.6.7 beta\", which is probably not what you want in
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
935 some cases\). This code is suitable for existing RCS release numbers.
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
936 CVS releases are handled reasonably, too \(1.3 < 1.4* < 1.5\)."
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
937 (let (v1 v2 i1 i2)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
938 (catch 'done
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
939 (or (and (string-match "^\\.?\\([0-9]+\\)" r1)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
940 (setq i1 (match-end 0))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
941 (setq v1 (string-to-number (match-string 1 r1)))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
942 (or (and (string-match "^\\.?\\([0-9]+\\)" r2)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
943 (setq i2 (match-end 0))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
944 (setq v2 (string-to-number (match-string 1 r2)))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
945 (if (> v1 v2) (throw 'done t)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
946 (if (< v1 v2) (throw 'done nil)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
947 (throw 'done
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
948 (vc-release-greater-or-equal
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
949 (substring r1 i1)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
950 (substring r2 i2)))))))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
951 (throw 'done t)))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
952 (or (and (string-match "^\\.?\\([0-9]+\\)" r2)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
953 (throw 'done nil))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
954 (throw 'done t)))))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
955
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
956 (defun vc-rcs-release-p (release)
31476
18bf0c070870 Doc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
957 "Return t if we have RELEASE or better."
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
958 (let ((installation (vc-rcs-system-release)))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
959 (if (and installation
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
960 (not (eq installation 'unknown)))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
961 (vc-release-greater-or-equal installation release))))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
962
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
963 (defun vc-rcs-system-release ()
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
964 "Return the RCS release installed on this system, as a string.
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
965 Return symbol UNKNOWN if the release cannot be deducted. The user can
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
966 override this using variable `vc-rcs-release'.
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
967
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
968 If the user has not set variable `vc-rcs-release' and it is nil,
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
969 variable `vc-rcs-release' is set to the returned value."
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
970 (or vc-rcs-release
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
971 (setq vc-rcs-release
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
972 (or (and (zerop (vc-do-command nil nil "rcs" nil "-V"))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
973 (with-current-buffer (get-buffer "*vc*")
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
974 (vc-parse-buffer "^RCS version \\([0-9.]+ *.*\\)" 1)))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
975 'unknown))))
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
976
31809
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
977 (defun vc-rcs-set-non-strict-locking (file)
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
978 (vc-do-command nil 0 "rcs" file "-U")
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
979 (vc-file-setprop file 'vc-checkout-model 'implicit)
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
980 (set-file-modes file (logior (file-modes file) 128)))
a2c432c6b343 (vc-rcs-workfile-is-newer): New function.
André Spiegel <spiegel@gnu.org>
parents: 31520
diff changeset
981
32094
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
982 (defun vc-rcs-set-default-branch (file branch)
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
983 (vc-do-command nil 0 "rcs" (vc-name file) (concat "-b" branch))
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
984 (vc-file-setprop file 'vc-rcs-default-branch branch))
027fb880735d (vc-rcs-fetch-master-state): Parse and remember default branch
André Spiegel <spiegel@gnu.org>
parents: 32058
diff changeset
985
58320
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
986 (defun vc-rcs-parse (&optional buffer)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
987 "Parse current buffer, presumed to be in RCS-style masterfile format.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
988 Optional arg BUFFER specifies another buffer to parse. Return an alist
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
989 of two elements, w/ keys `headers' and `revisions' and values in turn
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
990 sub-alists. For `headers', the values unless otherwise specified are
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
991 strings and the keys are:
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
992
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
993 desc -- description
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
994 head -- latest revision
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
995 branch -- the branch the \"head revision\" lies on;
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
996 absent if the head revision lies on the trunk
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
997 access -- ???
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
998 symbols -- sub-alist of (SYMBOL . REVISION) elements
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
999 locks -- if file is checked out, something like \"ttn:1.7\"
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1000 strict -- t if \"strict locking\" is in effect, otherwise nil
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1001 comment -- may be absent; typically something like \"# \" or \"; \"
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1002 expand -- may be absent; ???
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1003
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1004 For `revisions', the car is REVISION (string), the cdr a sub-alist,
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1005 with string values (unless otherwise specified) and keys:
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1006
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1007 date -- a time value (like that returned by `encode-time'); as a
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1008 special case, a year value less than 100 is augmented by 1900
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1009 author -- username
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1010 state -- typically \"Exp\" or \"Rel\"
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1011 branches -- list of revisions that begin branches from this revision
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1012 next -- on the trunk: the chronologically-preceding revision, or \"\";
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1013 on a branch: the chronologically-following revision, or \"\"
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1014 log -- change log entry
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1015 text -- for the head revision on the trunk, the body of the file;
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1016 other revisions have `:insn' instead
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1017 :insn -- for non-head revisions, a list of parsed instructions
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1018 in one of two forms, in both cases START meaning \"first
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1019 go to line START\":
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1020 - `(START k COUNT)' -- kill COUNT lines
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1021 - `(START i TEXT)' -- insert TEXT (a string)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1022 The list is in descending order by START.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1023
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1024 The `:insn' key is a keyword to distinguish it as a vc-rcs.el extension."
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1025 (setq buffer (get-buffer (or buffer (current-buffer))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1026 (set-buffer buffer)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1027 ;; An RCS masterfile can be viewed as containing four regular (for the
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1028 ;; most part) sections: (a) the "headers", (b) the "rev headers", (c)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1029 ;; the "description" and (d) the "rev bodies", in that order. In the
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1030 ;; returned alist (see docstring), elements from (b) and (d) are
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1031 ;; combined pairwise to form the "revisions", while those from (a) and
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1032 ;; (c) are simply combined to form the "headers".
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1033 ;;
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1034 ;; Loosely speaking, each section contains a series of alternating
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1035 ;; "tags" and "printed representations". In the (b) and (d), many
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1036 ;; such series can appear, and a revision number on a line by itself
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1037 ;; precedes the series of tags and printed representations associated
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1038 ;; with it.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1039 ;;
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1040 ;; In (a) and (b), the printed representations (with the exception of
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1041 ;; the `comment' tag in the headers) terminate with a semicolon, which
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1042 ;; is NOT part of the "value" finally associated with the tag. All
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1043 ;; other printed representations are in "@@-format"; there is an "@",
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1044 ;; the middle part (to be translated into the value), another "@" and
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1045 ;; a newline. Each "@@" in the middle part indicates the position of
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1046 ;; a single "@" (and consequently the requirement of an additional
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1047 ;; initial step when translating to the value).
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1048 ;;
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1049 ;; Parser state includes vars that collect parts of the return value...
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1050 (let ((desc nil) (headers nil) (revs nil)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1051 ;; ... as well as vars that support a single-pass, tag-assisted,
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1052 ;; minimal-data-copying scan. Basically -- skirting around the
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1053 ;; grouping by revision required in (b) and (d) -- we repeatedly
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1054 ;; and context-sensitively read a tag (that MUST be present),
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1055 ;; determine the bounds of the printed representation, translate
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1056 ;; it into a value, and push the tag plus value onto one of the
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1057 ;; collection vars. Finally, we return the parse tree
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1058 ;; incorporating the values of the collection vars (see "rv").
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1059 ;;
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1060 ;; A symbol or string to keep track of context (for error messages).
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1061 context
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1062 ;; A symbol, the current tag.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1063 tok
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1064 ;; Region (begin and end buffer positions) of the printed
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1065 ;; representation for the current tag.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1066 b e
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1067 ;; A list of buffer positions where "@@" can be found within the
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1068 ;; printed representation region. For each location, we push two
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1069 ;; elements onto the list, 1+ and 2+ the location, respectively,
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1070 ;; with the 2+ appearing at the head. In this way, the expression
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1071 ;; `(,e ,@@-holes ,b)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1072 ;; describes regions that can be concatenated (in reverse order)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1073 ;; to "de-@@-format" the printed representation as the first step
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1074 ;; to translating it into some value. See internal func `gather'.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1075 @-holes)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1076 (flet ((sw () (skip-chars-forward " \t\n")) ; i.e., `[:space:]'
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1077 (at (tag) (save-excursion (eq tag (read buffer))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1078 (to-eol () (buffer-substring-no-properties
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1079 (point) (progn (forward-line 1)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1080 (1- (point)))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1081 (to-semi () (setq b (point)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1082 e (progn (search-forward ";")
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1083 (1- (point)))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1084 (to-one@ () (setq @-holes nil
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1085 b (progn (search-forward "@") (point))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1086 e (progn (while (and (search-forward "@")
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1087 (= ?@ (char-after))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1088 (progn
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1089 (push (point) @-holes)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1090 (forward-char 1)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1091 (push (point) @-holes))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1092 (1- (point)))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1093 (tok+val (set-b+e name &optional proc)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1094 (unless (eq name (setq tok (read buffer)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1095 (error "Missing `%s' while parsing %s" name context))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1096 (sw)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1097 (funcall set-b+e)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1098 (cons tok (if proc
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1099 (funcall proc)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1100 (buffer-substring-no-properties b e))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1101 (k-semi (name &optional proc) (tok+val 'to-semi name proc))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1102 (gather () (let ((pairs `(,e ,@@-holes ,b))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1103 acc)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1104 (while pairs
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1105 (push (buffer-substring-no-properties
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1106 (cadr pairs) (car pairs))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1107 acc)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1108 (setq pairs (cddr pairs)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1109 (apply 'concat acc)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1110 (k-one@ (name &optional later) (tok+val 'to-one@ name
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1111 (if later
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1112 (lambda () t)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1113 'gather))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1114 (save-excursion
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1115 (goto-char (point-min))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1116 ;; headers
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1117 (setq context 'headers)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1118 (flet ((hpush (name &optional proc)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1119 (push (k-semi name proc) headers)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1120 (hpush 'head)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1121 (when (at 'branch)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1122 (hpush 'branch))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1123 (hpush 'access)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1124 (hpush 'symbols
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1125 (lambda ()
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1126 (mapcar (lambda (together)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1127 (let ((two (split-string together ":")))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1128 (setcar two (intern (car two)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1129 (setcdr two (cadr two))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1130 two))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1131 (split-string
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1132 (buffer-substring-no-properties b e)))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1133 (hpush 'locks))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1134 (push `(strict . ,(when (at 'strict)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1135 (search-forward ";")
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1136 t))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1137 headers)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1138 (when (at 'comment)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1139 (push (k-one@ 'comment) headers)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1140 (search-forward ";"))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1141 (when (at 'expand)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1142 (push (k-one@ 'expand) headers)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1143 (search-forward ";"))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1144 (setq headers (nreverse headers))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1145 ;; rev headers
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1146 (sw) (setq context 'rev-headers)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1147 (while (looking-at "[0-9]")
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1148 (push `(,(to-eol)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1149 ,(k-semi 'date
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1150 (lambda ()
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1151 (let ((ls (mapcar 'string-to-number
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1152 (split-string
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1153 (buffer-substring-no-properties
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1154 b e)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1155 "\\."))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1156 ;; Hack the year -- verified to be the
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1157 ;; same algorithm used in RCS 5.7.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1158 (when (< (car ls) 100)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1159 (setcar ls (+ 1900 (car ls))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1160 (apply 'encode-time (nreverse ls)))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1161 ,@(mapcar 'k-semi '(author state))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1162 ,(k-semi 'branches
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1163 (lambda ()
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1164 (split-string
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1165 (buffer-substring-no-properties b e))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1166 ,(k-semi 'next))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1167 revs)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1168 (sw))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1169 (setq revs (nreverse revs))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1170 ;; desc
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1171 (sw) (setq context 'desc
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1172 desc (k-one@ 'desc))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1173 ;; rev bodies
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1174 (let (acc
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1175 ;; Element of `revs' that initially holds only header info.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1176 ;; "Pairwise combination" occurs when we add body info.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1177 rev
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1178 ;; Components of the editing commands (aside from the actual
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1179 ;; text) that comprise the `text' printed representations
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1180 ;; (not including the "head" revision).
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1181 cmd start act
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1182 ;; Ascending (reversed) `@-holes' which the internal func
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1183 ;; `incg' pops to effect incremental gathering.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1184 asc
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1185 ;; Function to extract text (for the `a' command), either
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1186 ;; `incg' or `buffer-substring-no-properties'. (This is
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1187 ;; for speed; strictly speaking, it is sufficient to use
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1188 ;; only the former since it behaves identically to the
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1189 ;; latter in the absense of "@@".)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1190 sub)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1191 (flet ((incg (beg end) (let ((b beg) (e end) @-holes)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1192 (while (and asc (< (car asc) e))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1193 (push (pop asc) @-holes))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1194 ;; Self-deprecate when work is done.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1195 ;; Folding many dimensions into one.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1196 ;; Thanks B.Mandelbrot, for complex sum.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1197 ;; O beauteous math! --the Unvexed Bum
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1198 (unless asc
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1199 (setq sub 'buffer-substring-no-properties))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1200 (gather))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1201 (while (and (sw)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1202 (not (eobp))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1203 (setq context (to-eol)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1204 rev (or (assoc context revs)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1205 (error "Rev `%s' has body but no head"
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1206 context))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1207 (push (k-one@ 'log) (cdr rev))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1208 ;; For rev body `text' tags, delay translation slightly...
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1209 (push (k-one@ 'text t) (cdr rev))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1210 ;; ... until we decide which tag and value is appropriate to
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1211 ;; collect. For the "head" revision, compute the value of the
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1212 ;; `text' printed representation by simple `gather'. For all
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1213 ;; other revisions, replace the `text' tag+value with `:insn'
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1214 ;; plus value, always scanning in-place.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1215 (if (string= context (cdr (assq 'head headers)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1216 (setcdr (cadr rev) (gather))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1217 (if @-holes
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1218 (setq asc (nreverse @-holes)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1219 sub 'incg)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1220 (setq sub 'buffer-substring-no-properties))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1221 (goto-char b)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1222 (setq acc nil)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1223 (while (< (point) e)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1224 (forward-char 1)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1225 (setq cmd (char-before)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1226 start (read (current-buffer))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1227 act (read (current-buffer)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1228 (forward-char 1)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1229 (push (case cmd
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1230 (?d
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1231 ;; `d' means "delete lines".
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1232 ;; For Emacs spirit, we use `k' for "kill".
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1233 `(,start k ,act))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1234 (?a
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1235 ;; `a' means "append after this line" but
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1236 ;; internally we normalize it so that START
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1237 ;; specifies the actual line for insert, thus
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1238 ;; requiring less hair in the realization algs.
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1239 ;; For Emacs spirit, we use `i' for "insert".
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1240 `(,(1+ start) i
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1241 ,(funcall sub (point) (progn (forward-line act)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1242 (point)))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1243 (t (error "Bad command `%c' in `text' for rev `%s'"
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1244 cmd context)))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1245 acc))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1246 (goto-char (1+ e))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1247 (setcar (cdr rev) (cons :insn acc)))))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1248 ;; rv
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1249 `((headers ,desc ,@headers)
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1250 (revisions ,@revs)))))
dee7926ded40 (vc-rcs-parse): New function.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 56953
diff changeset
1251
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1252 (provide 'vc-rcs)
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1253
56953
2cc3f5b16438 Doc fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56318
diff changeset
1254 ;; arch-tag: 759b4916-5b0d-431d-b647-b185b8c652cf
31383
860d7ac182e3 (vc-rcs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1255 ;;; vc-rcs.el ends here