annotate lisp/packages/generic-sc.el @ 208:f427b8ec4379

Added tag r20-4b2 for changeset e45d5e7c476e
author cvs
date Mon, 13 Aug 2007 10:03:54 +0200
parents 43dd3413c7c7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1 ;;; generic-sc.el --- generic interface to source control systems
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3 ;; Copyright (C) 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5 ;; Author: devin@lucid.com
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
6 ;; Maintainer: Unmaintained
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
7 ;; Keywords: tools, unix
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
8
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
9 ;; This file is part of XEmacs.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
10
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
11 ;; XEmacs is free software; you can redistribute it and/or modify it
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
12 ;; under the terms of the GNU General Public License as published by
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
14 ;; any later version.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
15
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
16 ;; XEmacs is distributed in the hope that it will be useful, but
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
17 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
19 ;; General Public License for more details.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
20
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
22 ;; along with XEmacs; see the file COPYING. If not, write to the
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
24 ;; Boston, MA 02111-1307, USA.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
25
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
26 ;;; Synched up with: Not in FSF.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
27
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
28 ;;; Commentary:
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
29
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
30 ;; The generic interface provide a common set of functions that can be
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
31 ;; used to interface with a source control system like SCCS, RCS or
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
32 ;; CVS.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
33 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
34 ;; You chose which source control system to use by calling sc-mode
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
35 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
36 ;; The module is based on the sccs.el mode of Eric S. Raymond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
37 ;; (eric@snark.thyrsus.com) which was distantly derived from an rcs
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
38 ;; mode written by Ed Simpson ({decvax, seismo}!mcnc!duke!dukecdu!evs)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
39 ;; in years gone by and revised at MIT's Project Athena.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
40
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
41 ;;; Code:
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
42
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
43 ;; This can be customized by the user
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
44
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
45 (defgroup generic-sc nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
46 "Generic interface to source control systems"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
47 :prefix "sc-"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
48 :group 'tools)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
49
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
50
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
51 (defcustom sc-diff-command '("diff")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
52 "*The command/flags list to be used in constructing diff commands."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
53 :type '(repeat string)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
54 :group 'generic-sc)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
55
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
56 ;; Duplicated from pcl-cvs.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
57 (defvar cvs-program "cvs"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
58 "*The command name of the cvs program.")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
59
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
60 (defcustom sc-mode-expert ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
61 "*Treat user as expert; suppress yes-no prompts on some things."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
62 :type 'boolean
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
63 :group 'generic-sc)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
64
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
65 (defcustom sc-max-log-size 510
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
66 "*Maximum allowable size of a source control log message."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
67 :type 'integer
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
68 :group 'generic-sc)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
69
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
70 (defcustom sc-ccase-comment-on '(checkout checkout-dir checkin-dir rename
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
71 new-brtype new-branch checkin-merge
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
72 create-label label-sources)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
73 "*Operations on which comments would be appreciated.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
74 We check the values checkout, checkout-dir, checkin-dir,
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
75 rename, new-brtype, new-branch, create-label,
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
76 and label-sources as symbols."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
77 :type '(repeat symbol)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
78 :group 'generic-sc)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
79
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
80 (defvar sc-ccase-reserve nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
81 "Whether to reserve checkouts or not. By default, this is nil - don't.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
82 Other values are t - do, and anything else, eg. 'ask - ask.")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
83
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
84 ;; default keybindings
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
85 (defvar sc-prefix-map (lookup-key global-map "\C-xv"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
86 (if (not (keymapp sc-prefix-map))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
87 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
88 (setq sc-prefix-map (make-sparse-keymap))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
89 (define-key global-map "\C-xv" sc-prefix-map)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
90 (define-key sc-prefix-map "v" 'sc-next-operation)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
91 (define-key sc-prefix-map "=" 'sc-show-changes)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
92 (define-key sc-prefix-map "l" 'sc-show-history)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
93 (define-key sc-prefix-map "p" 'sc-visit-previous-revision)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
94 (define-key sc-prefix-map "u" 'sc-revert-file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
95 (define-key sc-prefix-map "d" 'sc-list-registered-files)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
96 (define-key sc-prefix-map "\C-d" 'sc-update-directory)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
97 (define-key sc-prefix-map "\C-r" 'sc-rename-file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
98 ))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
99
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
100
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
101 ;;; The user does not change these
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
102 (defvar sc-generic-name ""
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
103 "Name of the source control system used. Is displayed in the modeline.")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
104
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
105 (defvar sc-mode-line-string ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
106 "Revision number to show in the mode line")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
107
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
108 (defvar sc-generic-log-buf ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
109 "Buffer for entering log message")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
110
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
111 (defvar sc-log-entry-keymap ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
112 "Additional keybindings used when entering the log message")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
113
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
114 (defvar sc-can-hack-dir ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
115 "Does the SC system allow users to play directly with directories")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
116
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
117 (defvar sc-ccase-mfs-prefixes ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
118 "Prefixes known to the system to be MFS ... ignore all others")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
119
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
120 (defmacro sc-chmod (perms file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
121 (list 'call-process "chmod" nil nil nil perms file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
122
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
123 (defmacro error-occurred (&rest body)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
124 (list 'condition-case nil (cons 'progn (append body '(nil))) '(error t)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
125
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
126
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
127 ;;; User level functions
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
128 (defun sc-next-operation (verbose)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
129 "Do the next logical source-control operation on the file in the current buffer.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
130 The current subdirectory must be under source control.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
131 If the file is not already registered with the source control, this registers it
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
132 and checks it out.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
133 If the file is registered and not locked by anyone, this checks it out.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
134 If the file is registered and locked by the calling user, this pops up a
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
135 buffer for creation of a log message, then checks the file in.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
136 A read-only copy of the changed file is left in place afterwards.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
137 If the file is registered and locked by someone else, an error message is
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
138 returned indicating who has locked it."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
139 (interactive "P")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
140 (if (not buffer-file-name)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
141 (error "There is no file associated with buffer %s" (buffer-name)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
142 (let* (revision
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
143 (file buffer-file-name)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
144 (lock-info (sc-lock-info file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
145 (sc-generic-log-buf
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
146 (get-buffer-create (format "*%s-Log*" sc-generic-name))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
147 (if (eq lock-info 'na)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
148 (error "The file associated with buffer %s is not registered" (buffer-name)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
149
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
150 ;; if file is not registered register it and set lock-info to show it's not locked
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
151 (if (not lock-info)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
152 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
153 (sc-register-file verbose)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
154 (setq lock-info (list () ()))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
156 (cond ((not (car lock-info))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
157 ;; if there is no lock on the file, assert one and get it
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
158 (sc-check-out file t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
159 (revert-buffer nil t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
160 (sc-mode-line))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
161
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
162 ((and (not (equal sc-generic-name "CCase"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
163 (not (equal (car lock-info) (user-login-name))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
164 ;; file is locked by someone else
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
165 (error "Sorry, %s has that file locked." (car lock-info)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
166
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
167 (t
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
168 ;; OK, user owns the lock on the file
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
169 ;; if so, give user a chance to save before delta-ing.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
170 (if (and (buffer-modified-p)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
171 (or
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
172 sc-mode-expert
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
173 (y-or-n-p (format "%s has been modified. Write it out? "
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
174 (buffer-name)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
175 (save-buffer))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
176
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
177 (setq revision (car (cdr lock-info)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
178
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
179 ;; user may want to set nonstandard parameters
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
180 (if verbose
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
181 (if (or sc-mode-expert
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
182 (y-or-n-p
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
183 (format "revision: %s Change revision level? "
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
184 revision)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
185 (setq revision (read-string "New revision level: "))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
186
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
187 ;; OK, let's do the delta
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
188 (let ((buffer (sc-temp-buffer)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
189 (if (save-window-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
190 ;; this excursion returns t if the new version was saved OK
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
191 (pop-to-buffer buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
192 (erase-buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
193 (set-buffer-modified-p nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
194 (sc-log-entry-mode)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
195 (message
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
196 "Enter log message. Type C-c C-c when done, C-c ? for help.")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
197 (prog1
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
198 (and (not (error-occurred (recursive-edit)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
199 (not (error-occurred
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
200 (sc-check-in file revision
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
201 (buffer-string)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
202 (setq buffer-file-name nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
203 (bury-buffer buffer)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
204
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
205 ;; if the save went OK do some post-checking
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
206 (if (buffer-modified-p)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
207 (error
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
208 "Checked-in version of file does not match buffer!")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
209 (revert-buffer nil t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
210 (sc-mode-line)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
211 (run-hooks 'sc-check-in-ok))))))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
212
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
213 (defun sc-insert-last-log ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
214 "Insert the log message of the last check in at point."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
215 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
216 (insert-buffer sc-generic-log-buf))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
217
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
218 (defun sc-abort-check-in ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
219 "Abort a source control check-in command."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
220 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
221 (if (or sc-mode-expert (y-or-n-p "Really Abort Check-in? "))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
222 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
223 (delete-window)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
224 (abort-recursive-edit))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
225
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
226 (defun sc-log-exit ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
227 "Proceed with checkin with the contents of the current buffer as message."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
228 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
229 (if (< (buffer-size) sc-max-log-size)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
230 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
231 (copy-to-buffer sc-generic-log-buf (point-min) (point-max))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
232 (exit-recursive-edit)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
233 (delete-window))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
234 (goto-char sc-max-log-size)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
235 (error
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
236 "Log must be less than %d characters. Point is now at char %d."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
237 sc-max-log-size (point))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
238
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
239
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
240 ;;; Functions to look at the edit history
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
241 (defun sc-show-changes (arg)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
242 "Compare the version being edited with the last checked-in revision.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
243 With a prefix argument prompt for revision to compare with."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
244 (interactive "P")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
245 ;; check that the file is not modified
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
246 (if (and (buffer-modified-p)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
247 (or
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
248 sc-mode-expert
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
249 (y-or-n-p (format "%s has been modified. Write it out? "
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
250 (buffer-name)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
251 (save-buffer))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
252 (let* ((revision (and arg (read-string "Revision to compare against: ")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
253 (file buffer-file-name)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
254 (name (file-name-nondirectory file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
255 (old (sc-get-version-in-temp-file file revision))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
256 (buffer (sc-temp-buffer))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
257 status)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
258 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
259 (set-buffer buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
260 (erase-buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
261 (setq default-directory (file-name-directory file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
262 (setq status
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
263 (apply 'call-process (car sc-diff-command) () t ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
264 (append (cdr sc-diff-command) (list old) (list file)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
265 (if (not (or (eq 0 status) (eq 1 status))) ; see man diff.1
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
266 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
267 (display-buffer buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
268 (error "diff FAILED")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
269 (delete-file old)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
270 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
271 (set-buffer buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
272 (goto-char (point-min))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
273 (if (equal (point-min) (point-max))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
274 (insert
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
275 (format "No changes to %s since last update."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
276 (file-name-nondirectory file)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
277 (insert "==== Diffs for " file "\n")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
278 (insert "==== ")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
279 (mapcar '(lambda (i) (insert i " ")) sc-diff-command)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
280 (insert name "<" (or revision "current") ">" " " name "\n\n")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
281 (display-buffer buffer)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
282
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
283 (defun sc-show-revision-changes ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
284 "Prompt for a revision to diff against."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
285 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
286 (sc-show-changes 4))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
287
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
288 (defun sc-version-diff-file (file rel1 rel2)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
289 "For FILE, report diffs between two revisions REL1 and REL2 of it."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
290 (interactive "fFile: \nsOlder version: \nsNewer version: ")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
291 (if (string-equal rel1 "") (setq rel1 nil))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
292 (if (string-equal rel2 "") (setq rel2 nil))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
293 (let ((buffer (sc-temp-buffer)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
294 (set-buffer buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
295 (erase-buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
296 (let ((v1 (sc-get-version-in-temp-file file rel1))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
297 (v2 (if rel2 (sc-get-version-in-temp-file file rel2) file)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
298 (and v1
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
299 v2
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
300 (unwind-protect
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
301 (apply 'call-process (car sc-diff-command) nil t t
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
302 (append (cdr sc-diff-command) (list v1) (list v2)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
303 (condition-case () (delete-file v1) (error nil))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
304 (if rel2
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
305 (condition-case () (delete-file v2) (error nil)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
306 (set-buffer-modified-p nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
307 (goto-char (point-min))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
308 (if (equal (point-min) (point-max))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
309 (message
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
310 (format "No changes to %s between %s and %s." file rel1 rel2))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
311 (display-buffer buffer)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
312
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
313 (defun sc-show-history ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
314 "List the edit history of the current buffer."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
315 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
316 (let ((file buffer-file-name))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
317 (if (not file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
318 (error "There is no file associated with buffer %s" (buffer-name)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
319 (if (not (sc-lock-info file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
320 (error "The file is not registered in the source control system"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
321 (let ((buffer (sc-temp-buffer)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
322 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
323 (set-buffer buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
324 (erase-buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
325 (sc-history file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
326 (goto-char (point-min)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
327 (display-buffer buffer))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
328
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
329 (defun sc-visit-previous-revision (revision)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
330 "Show a previous revision of the current file"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
331 (interactive "sShow previous revision number: ")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
332 (let ((file buffer-file-name))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
333 (if (not file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
334 (error "There is no file associated with buffer %s" (buffer-name)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
335 (let ((other-file (sc-get-version-in-temp-file file revision))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
336 (buffer-name (concat (file-name-nondirectory file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
337 "<" sc-generic-name " " revision ">")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
338 (pop-to-buffer (get-buffer-create buffer-name))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
339 (erase-buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
340 (insert-file other-file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
341 ;; get the same major mode as the original file
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
342 (setq buffer-file-name file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
343 (normal-mode)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
344 (setq buffer-file-name ())
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
345 (set-buffer-modified-p ())
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
346 (toggle-read-only)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
347 (delete-file other-file))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
348
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
349 (defun sc-revert-file ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
350 "Revert the current buffer's file back to the last saved version."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
351 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
352 (let ((file buffer-file-name))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
353 (if (y-or-n-p (format "Revert file %s to last checked-in revision?" file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
354 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
355 (sc-revert file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
356 (revert-buffer nil t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
357 (sc-mode-line)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
358
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
359 ;; Functions to get directory level information
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
360
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
361 (defun sc-list-all-locked-files (arg)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
362 "List all files currently locked under the revision control system.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
363 With prefix arg list only the files locked by the user."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
364 (interactive "P")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
365 (let* ((locker (and arg (user-login-name)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
366 (buffer (sc-tree-walk 'sc-list-file-if-locked locker)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
367 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
368 (set-buffer buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
369 (goto-char (point-min))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
370 (if (= (point-min) (point-max))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
371 (insert "No files locked ")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
372 (insert "Files locked "))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
373 (if locker
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
374 (insert "by " locker " "))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
375 (insert "in " default-directory "\n\n"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
376 (display-buffer buffer)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
377
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
378 (defun sc-list-locked-files ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
379 "List all files currently locked by me"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
380 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
381 (sc-list-all-locked-files 4))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
382
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
383 (defun sc-list-registered-files ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
384 "List all files currently registered under the revision control system."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
385 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
386 (let ((buffer (sc-tree-walk 'sc-list-file)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
387 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
388 (set-buffer buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
389 (if (= (point-min) (point-max))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
390 (insert "No files registered in " sc-generic-name
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
391 " in " default-directory)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
392 (goto-char (point-min))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
393 (insert "Files registered in " sc-generic-name " in " default-directory
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
394 "\n\n")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
395 (display-buffer buffer)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
396
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
397 (defun sc-update-directory ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
398 "Updates the current directory by getting the latest copies of the files"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
399 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
400 (save-some-buffers)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
401 (let ((buffer (sc-tree-walk 'sc-update-file)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
402 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
403 (set-buffer buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
404 (goto-char (point-min))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
405 (if (= (point-min) (point-max))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
406 (insert "No files needed to be updated in " default-directory "\n\n")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
407 (insert "Files updated in " default-directory "\n\n")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
408 (display-buffer buffer)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
409
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
410 ;; Miscellaneous other entry points
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
411
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
412 (defun sc-register-file (verbose)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
413 "Register the file visited by the current buffer into source control.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
414 Prefix argument register it under an explicit revision number."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
415 (interactive "P")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
416 (let ((file buffer-file-name))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
417 (if (not file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
418 (error "There is no file associated with buffer %s" (buffer-name)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
419 (let ((lock-info (sc-lock-info file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
420 (revision ()))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
421 (if lock-info
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
422 (error "This file is already registered into %s" sc-generic-name))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
423 ;; propose to save the file if it's modified
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
424 (if (and (buffer-modified-p)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
425 (or
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
426 sc-mode-expert
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
427 (y-or-n-p (format "%s has been modified. Write it out? "
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
428 (buffer-name)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
429 (save-buffer))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
430 ;; get the revision number
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
431 (if verbose
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
432 (setq revision (read-string "Initial Revision Number: ")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
433 (sc-register file revision)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
434 (revert-buffer nil t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
435 (sc-mode-line))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
436
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
437 (defun sc-rename-file (old new)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
438 "Rename a file, taking its source control archive with it."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
439 (interactive "fOld name: \nFNew name: ")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
440 (let ((owner (sc-locking-user old)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
441 (if (and owner (not (string-equal owner (user-login-name))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
442 (error "Sorry, %s has that file checked out" owner)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
443 (if sc-can-hack-dir
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
444 (rename-file old new t))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
445 (sc-rename old new))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
446
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
447 (defun sc-rename-this-file (new)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
448 "Rename the file of the current buffer, taking its source control archive with it"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
449 (interactive "FNew name: ")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
450 (if (and (buffer-modified-p)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
451 (y-or-n-p (format "%s has been modified. Write it out? "
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
452 (buffer-name))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
453 (save-buffer))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
454 (sc-rename-file buffer-file-name new)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
455 (let ((old-buffer (current-buffer))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
456 (new-buffer (find-file-noselect new)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
457 (set-window-buffer (selected-window) new-buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
458 (pop-to-buffer (current-buffer))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
459 (bury-buffer old-buffer)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
460
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
461
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
462 ;;; Mode independent functions
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
463 ;;; All those sc-... functions FUNCALL the corresponding sc-generic-... function.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
464 ;;; The variables are set to functions that do the SCCS, RCS or CVS commands
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
465 ;;; depending on the mode chosen.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
466
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
467 (defvar sc-generic-lock-info ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
468 "Function to implement sc-lock-info")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
469
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
470 (defun sc-lock-info (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
471 "Return a list of the current locker and current locked revision for FILE.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
472 Returns NIL if FILE is not registered in the source control system.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
473 Return (NIL NIL) if FILE is registered but not locked.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
474 Return (locker revision) if file is locked."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
475 (funcall sc-generic-lock-info file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
476
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
477
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
478 (defvar sc-generic-register ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
479 "Function to implement sc-register")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
480
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
481 (defun sc-register (file revision)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
482 "Register FILE under source control with initial revision REVISION."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
483 (funcall sc-generic-register file revision))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
484
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
485
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
486 (defvar sc-generic-check-out ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
487 "Function to implement sc-check-out")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
488
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
489 (defun sc-check-out (file lockp)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
490 "Checks out the latest version of FILE.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
491 If LOCKP is not NIL, FILE is also locked."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
492 (funcall sc-generic-check-out file lockp))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
493
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
494
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
495 (defvar sc-generic-get-version ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
496 "Function to implement sc-get-version")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
497
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
498 (defun sc-get-version (file buffer revision)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
499 "Insert a previous revison of FILE in BUFFER.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
500 REVISION is the revision number requested."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
501 (funcall sc-generic-get-version file buffer revision))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
502
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
503
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
504 (defvar sc-generic-check-in ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
505 "Function to implement sc-check-in")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
506
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
507 (defun sc-check-in (file revision message)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
508 "Check in FILE with revision REVISION.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
509 MESSAGE is a string describing the changes."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
510 (funcall sc-generic-check-in file revision message))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
511
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
512
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
513 (defvar sc-generic-history ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
514 "Function to implement sc-history")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
515
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
516 (defun sc-history (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
517 "Insert the edit history of FILE in the current buffer."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
518 (funcall sc-generic-history file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
519
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
520
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
521 (defvar sc-generic-tree-list ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
522 "Function to implement sc-tree-list")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
523
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
524 (defun sc-tree-list ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
525 "List in the current buffer the files registered in the source control system"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
526 (funcall sc-generic-tree-list))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
527
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
528
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
529 (defvar sc-generic-new-revision-p ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
530 "Function to implement sc-new-revision-p")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
531
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
532 (defun sc-new-revision-p (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
533 "True if a new revision of FILE was checked in since we last got a copy of it"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
534 (funcall sc-generic-new-revision-p file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
535
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
536
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
537 (defvar sc-generic-revert ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
538 "Function to implement sc-revert")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
539
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
540 (defun sc-revert (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
541 "Cancel a check out of FILE and get back the latest checked in version"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
542 (funcall sc-generic-revert file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
543
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
544
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
545 (defvar sc-generic-rename ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
546 "Function to implement sc-rename")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
547
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
548 (defun sc-rename (old new)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
549 "Rename the source control archives for OLD to NEW"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
550 (funcall sc-generic-rename old new))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
551
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
552
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
553 (defvar sc-menu ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
554 "Menu to use")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
555
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
556
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
557 ;;; Utilities functions
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
558 (defun sc-do-command (buffer message command file sc-file &rest flags)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
559 "Execute a command, notifying the user and checking for errors."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
560 (setq file (expand-file-name file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
561 (message "Running %s on %s..." message file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
562 (let ((status
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
563 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
564 (set-buffer (get-buffer-create buffer))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
565 (erase-buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
566 (setq flags (append flags (and file (list sc-file))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
567 (setq flags (delq () flags))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
568 (let ((default-directory (file-name-directory (or file "./"))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
569 (eq (apply 'call-process command nil t nil flags) 0)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
570 (if status
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
571 (message "Running %s...OK" message)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
572 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
573 (set-buffer buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
574 (goto-char (point-min))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
575 (insert command)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
576 (mapcar '(lambda (i) (insert " " i)) flags)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
577 (insert "\n\n")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
578 (goto-char (point-min)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
579 (display-buffer buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
580 (error "Running %s...FAILED" message))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
581
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
582 (defun sc-enter-comment ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
583 "Enter a comment. Return it as a string."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
584 (let ((buffer (sc-temp-buffer)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
585 (setq sc-generic-log-buf
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
586 (get-buffer-create (format "*%s-Log*" sc-generic-name)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
587 (save-window-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
588 ;; this excursion returns t if the new version was saved OK
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
589 (pop-to-buffer buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
590 (erase-buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
591 (set-buffer-modified-p nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
592 (sc-log-entry-mode)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
593 (message
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
594 "Enter log message. Type C-c C-c when done, C-c ? for help.")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
595 (prog1
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
596 (and (not (error-occurred (recursive-edit)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
597 (let ((bs (buffer-string)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
598 (if (> (length bs) 0) bs)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
599 (setq buffer-file-name nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
600 (bury-buffer buffer)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
601
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
602 (defun sc-locking-user (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
603 "Return the login name of the locker of FILE. Return nil if FILE is not locked"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
604 (car (sc-lock-info file)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
605
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
606 (defun sc-locked-revision (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
607 "Return the revision number currently locked for FILE, nil if FILE is not locked."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
608 (car (cdr (sc-lock-info file))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
609
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
610 (defun sc-mode-line ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
611 "Set the mode line for the current buffer.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
612 FILE is the file being visited."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
613 (let* ((file buffer-file-name)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
614 (lock-info (sc-lock-info file)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
615 ;; ensure that the global mode string is not NIL
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
616 (or global-mode-string (setq global-mode-string '("")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
617 ;; ensure that our variable is in the global-mode-string
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
618 (or (memq 'sc-mode-line-string global-mode-string)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
619 (setq global-mode-string
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
620 (append global-mode-string '(sc-mode-line-string))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
621 (make-local-variable 'sc-mode-line-string)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
622 (setq sc-mode-line-string
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
623 (cond ((or
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
624 (eq lock-info 'na)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
625 (null lock-info)) ())
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
626 ((null (car lock-info))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
627 (format " <%s:>" sc-generic-name))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
628 ((equal (car lock-info) (user-login-name))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
629 (format " <%s: %s>" sc-generic-name (car (cdr lock-info))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
630 (t
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
631 (format " <%s: %s>" sc-generic-name (car lock-info)))))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
632
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
633 (defun sc-temp-buffer ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
634 "Return a temporary buffer to use for output"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
635 (get-buffer-create (format "*%s*" sc-generic-name)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
636
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
637 (defun sc-tree-walk (func &rest args)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
638 "Apply FUNC to the files registered in the source control system.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
639 FUNC is passed the file path and ARGS."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
640 (let* ((buffer-name (format "*%s directory*" sc-generic-name))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
641 (buffer (get-buffer-create buffer-name))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
642 (dir default-directory)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
643 files)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
644 ;; recreate the directory buffer in the right directory
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
645 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
646 (set-buffer buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
647 (erase-buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
648 (setq default-directory dir)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
649 ;; get a list of all the registered files
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
650 (sc-tree-list)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
651 ;; remove the "not found" messages
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
652 (goto-char (point-min))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
653 (while (search-forward "not found" () t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
654 (beginning-of-line 1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
655 (kill-line 1))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
656 ;; check if any file is listed
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
657 (if (= (point-min) (point-max))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
658 (error "No registered files under %s" default-directory))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
659 ;; build the list of files
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
660 (goto-char (point-min))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
661 (setq files ())
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
662 (while (not (eobp))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
663 (let ((file
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
664 (buffer-substring (point) (progn (end-of-line) (point)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
665 (setq files (cons file files)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
666 (forward-line 1))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
667 (setq files (nreverse files))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
668 ;; let the function output information in the buffer
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
669 (erase-buffer))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
670 (display-buffer buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
671 ;; apply the function
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
672 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
673 (set-buffer buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
674 (while files
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
675 (apply func (car files) args)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
676 (setq files (cdr files)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
677 buffer)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
678
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
679 (defun sc-get-version-in-temp-file (file revision)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
680 "For the given FILE, retrieve a copy of the version with given REVISION.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
681 The text is retrieved into a tempfile. Return the tempfile name."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
682 (let* ((oldversion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
683 (make-temp-name
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
684 (concat (or (ccase-protect-expanded-name revision) "current")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
685 "-"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
686 (file-name-nondirectory file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
687 "-")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
688 (vbuf (get-buffer-create oldversion)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
689 (sc-get-version file vbuf revision)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
690 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
691 (set-buffer vbuf)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
692 (write-region (point-min) (point-max) oldversion t 0))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
693 (kill-buffer vbuf)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
694 (sc-chmod "-w" oldversion)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
695 oldversion))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
696
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
697 ;; Functions used to get directory level information
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
698
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
699 (defun sc-insert-file-lock-info (file lock-info)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
700 (insert (car lock-info) ":" (car (cdr lock-info)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
701 (indent-to-column 16 1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
702 (insert (file-name-nondirectory file) "\n"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
703
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
704 (defun sc-list-file-if-locked (file &optional arg)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
705 "List all files underneath the current directory matching a prefix type."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
706 (let ((lock-info (sc-lock-info file)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
707 (if (and lock-info
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
708 (car lock-info)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
709 (or (null arg) (equal arg (car lock-info))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
710 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
711 (sc-insert-file-lock-info file lock-info)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
712 (sit-for 0)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
713
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
714 (defun sc-list-file (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
715 (let ((lock-info (sc-lock-info file)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
716 (cond ((eq lock-info 'na)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
717 (indent-to-column 16 1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
718 (insert (file-name-nondirectory file) "\n"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
719 ((car lock-info)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
720 (sc-insert-file-lock-info file lock-info))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
721 ((sc-new-revision-p file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
722 (insert "needs update")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
723 (indent-to-column 16 1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
724 (insert (file-name-nondirectory file) "\n"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
725 (t
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
726 (indent-to-column 16 1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
727 (insert (file-name-nondirectory file) "\n")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
728 (sit-for 0)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
729
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
730 ;;; Function to update one file from the archive
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
731 (defun sc-update-file (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
732 "get the latest version of the file if a new one was checked-in"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
733 (if (sc-new-revision-p file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
734 (let ((file-name (file-name-nondirectory file)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
735 ;; get the latest copy
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
736 (rename-file (sc-get-version-in-temp-file file nil) file t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
737 (let ((b (get-file-buffer file)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
738 (if b
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
739 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
740 (set-buffer b)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
741 (revert-buffer nil t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
742 (sc-mode-line))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
743 ;; show the file was updated
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
744 (insert "updated")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
745 (indent-to-column 16 1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
746 (insert file-name "\n")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
747 (sit-for 0))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
748
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
749 ;; Set up key bindings for use while editing log messages
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
750
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
751 (if sc-log-entry-keymap
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
752 nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
753 (setq sc-log-entry-keymap (make-sparse-keymap))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
754 (define-key sc-log-entry-keymap "\C-ci" 'sc-insert-last-log)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
755 (define-key sc-log-entry-keymap "\C-c\C-i" 'sc-insert-last-log)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
756 (define-key sc-log-entry-keymap "\C-ca" 'sc-abort-check-in)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
757 (define-key sc-log-entry-keymap "\C-c\C-a" 'sc-abort-check-in)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
758 (define-key sc-log-entry-keymap "\C-c\C-c" 'sc-log-exit)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
759 (define-key sc-log-entry-keymap "\C-x\C-s" 'sc-log-exit))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
760
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
761 (defvar sc-mode-hook nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
762 "*Function or functions to run on entry to sc-mode.")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
763
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
764 (defvar sc-mode ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
765 "The currently active source control mode. Use M-x sc-mode to set it")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
766
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
767 ;;;###autoload
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
768 (defun sc-mode (system)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
769 "Toggle sc-mode.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
770 SYSTEM can be sccs, rcs or cvs.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
771 Cvs requires the pcl-cvs package.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
772
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
773 The following commands are available
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
774 \\[sc-next-operation] perform next logical source control operation on current file
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
775 \\[sc-show-changes] compare the version being edited with an older one
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
776 \\[sc-version-diff-file] compare two older versions of a file
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
777 \\[sc-show-history] display change history of current file
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
778 \\[sc-visit-previous-revision] display an older revision of current file
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
779 \\[sc-revert-file] revert buffer to last checked-in version
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
780 \\[sc-list-all-locked-files] show all files locked in current directory
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
781 \\[sc-list-locked-files] show all files locked by you in current directory
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
782 \\[sc-list-registered-files] show all files under source control in current directory
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
783 \\[sc-update-directory] get fresh copies of files checked-in by others in current directory
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
784 \\[sc-rename-file] rename the current file and its source control file
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
785
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
786
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
787 While you are entering a change log message for a check in, sc-log-entry-mode
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
788 will be in effect.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
789
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
790 Global user options:
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
791 sc-diff-command A list consisting of the command and flags
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
792 to be used for generating context diffs.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
793 sc-mode-expert suppresses some conformation prompts,
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
794 notably for delta aborts and file saves.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
795 sc-max-log-size specifies the maximum allowable size
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
796 of a log message plus one.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
797
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
798
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
799 When using SCCS you have additional commands and options
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
800
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
801 \\[sccs-insert-headers] insert source control headers in current file
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
802
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
803 When you generate headers into a buffer using \\[sccs-insert-headers],
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
804 the value of sc-insert-headers-hook is called before insertion. If the
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
805 file is recognized a C or Lisp source, sc-insert-c-header-hook or
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
806 sc-insert-lisp-header-hook is called after insertion respectively.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
807
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
808 sccs-headers-wanted which %-keywords to insert when adding
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
809 headers with C-c h
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
810 sccs-insert-static if non-nil, keywords inserted in C files
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
811 get stuffed in a static string area so that
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
812 what(1) can see them in the compiled object code.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
813
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
814 When using CVS you have additional commands
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
815
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
816 \\[sc-cvs-update-directory] update the current directory using pcl-cvs
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
817 \\[sc-cvs-file-status] show the CVS status of current file
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
818 "
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
819 (interactive
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
820 (if sc-mode
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
821 '(())
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
822 (list
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
823 (intern
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
824 (read-string "Turn on source control mode on for: " "SCCS")))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
825 (cond ((eq system ())
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
826 (remove-hook 'find-file-hooks 'sc-mode-line)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
827 (delete-menu-item (list sc-generic-name))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
828 (remove-hook 'activate-menubar-hook 'sc-sensitize-menu)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
829 (setq sc-mode ()))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
830 (sc-mode
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
831 (sc-mode ())
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
832 (sc-mode system))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
833 (t
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
834 (setq system (intern (upcase (symbol-name system))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
835 (let ((f (intern (format "sc-set-%s-mode" system))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
836 (if (not (fboundp f))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
837 (error
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
838 "No source control interface for \"%s\". \
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
839 Please use SCCS, RCS, CVS, or Atria."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
840 system)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
841 (funcall f)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
842 (add-hook 'find-file-hooks 'sc-mode-line)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
843 (add-submenu '() (cons sc-generic-name sc-menu))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
844 (add-hook 'activate-menubar-hook 'sc-sensitize-menu)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
845 (run-hooks 'sc-mode-hook)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
846 (setq sc-mode system))))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
847
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
848 (defun sc-log-entry-mode ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
849 "Major mode for editing log message.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
850
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
851 These bindings are available when entering the log message
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
852 \\[sc-log-exit] proceed with check in, ending log message entry
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
853 \\[sc-insert-last-log] insert log message from last check-in
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
854 \\[sc-abort-check-in] abort this check-in
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
855
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
856 Entry to the change-log submode calls the value of text-mode-hook, then
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
857 the value sc-log-entry-mode-hook.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
858 "
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
859 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
860 (set-syntax-table text-mode-syntax-table)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
861 (use-local-map sc-log-entry-keymap)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
862 (setq local-abbrev-table text-mode-abbrev-table)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
863 (setq major-mode 'sc-log-entry-mode)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
864 (setq mode-name "Source Control Change Log Entry")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
865 (run-hooks 'text-mode-hook 'sc-log-entry-mode-hook))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
866
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
867
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
868
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
869 ;;; SCCS specific part
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
870
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
871 ;; Find a reasonable default for the SCCS bin directory
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
872 (defvar sccs-bin-directory
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
873 (cond ((file-executable-p "/usr/sccs/unget") "/usr/sccs")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
874 ((file-executable-p "/usr/bin/unget") "/usr/bin")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
875 ((file-directory-p "/usr/sccs") "/usr/sccs")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
876 ((file-directory-p "/usr/bin/sccs") "/usr/bin/sccs")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
877 (t "/usr/bin"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
878 "*Directory where to find the sccs executables")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
879
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
880 (defvar sccs-headers-wanted '("\%\W\%")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
881 "*SCCS header keywords to be inserted when sccs-insert-header is executed.")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
882
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
883 (defvar sccs-insert-static t
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
884 "*Insert a static character string when inserting source control headers in C mode.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
885 Only relevant for the SCCS mode.")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
886
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
887 ;; Vars the user doesn't need to know about.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
888
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
889 (defvar sccs-log-entry-mode nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
890 (defvar sccs-current-major-version nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
891
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
892 ;; Some helper functions
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
893
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
894 (defun sccs-name (file &optional letter)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
895 "Return the sccs-file name corresponding to a given file."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
896 (if (null file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
897 ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
898 (let ((expanded-file (expand-file-name file)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
899 (format "%sSCCS/%s.%s"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
900 (concat (file-name-directory expanded-file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
901 (or letter "s")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
902 (concat (file-name-nondirectory expanded-file))))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
903
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
904 (defun sccs-lock-info (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
905 "Lock-info method for SCCS. See sc-generic-lock-info"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
906 (let ((sccs-file (sccs-name file "s"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
907 (lock-file (sccs-name file "p")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
908 (cond ((or (null file) (not (file-exists-p sccs-file)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
909 ())
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
910 ((not (file-exists-p lock-file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
911 (list () ()))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
912 (t
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
913 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
914 (set-buffer (get-buffer-create "*SCCS tmp*"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
915 (insert-file lock-file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
916 (while (search-forward " " () t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
917 (replace-match "\n" () t))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
918 (goto-char (point-min))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
919 (forward-line 1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
920 (let ((revision
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
921 (buffer-substring (point) (progn (end-of-line) (point))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
922 (name
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
923 (progn (forward-line 1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
924 (buffer-substring (point)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
925 (progn (end-of-line) (point))))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
926 (kill-buffer (current-buffer))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
927 (list name revision)))))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
928
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
929
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
930 (defun sccs-do-command (buffer command file &rest flags)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
931 "Execute an SCCS command, notifying the user and checking for errors."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
932 (let ((exec-path (cons sccs-bin-directory exec-path)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
933 (apply 'sc-do-command buffer command command file (sccs-name file) flags)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
934
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
935 (defun sccs-admin (file sid)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
936 "Checks a file into sccs.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
937 FILE is the unmodified name of the file. SID should be the base-level sid to
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
938 check it in under."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
939 ;; give a change to save the file if it's modified
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
940 (if (and (buffer-modified-p)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
941 (y-or-n-p (format "%s has been modified. Write it out? "
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
942 (buffer-name))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
943 (save-buffer))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
944 (sccs-do-command "*SCCS*" "admin" file
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
945 (concat "-i" file) (concat "-r" sid))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
946 (sc-chmod "-w" file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
947 ;; expand SCCS headers
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
948 (sccs-check-out file nil))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
949
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
950 (defun sccs-register (file revision)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
951 (sccs-load-vars)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
952 (if (and (not (file-exists-p "SCCS"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
953 (y-or-n-p "Directory SCCS does not exist, create it?"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
954 (make-directory "SCCS"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
955 (sccs-admin file
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
956 (cond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
957 (revision revision)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
958 ((error-occurred (load-file "SCCS/emacs-vars.el")) "1")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
959 (t sccs-current-major-version))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
960
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
961 (defun sccs-check-out (file lockp)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
962 "Retrieve a copy of the latest version of the given file."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
963 (sccs-do-command "*SCCS*" "get" file (if lockp "-e")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
964
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
965 (defun sccs-get-version (file buffer revision)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
966 (sccs-do-command buffer "get" file
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
967 (and revision (concat "-r" revision))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
968 "-p" "-s"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
969
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
970 (defun sccs-check-in (file revision comment)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
971 "Check-in a given version of the given file with the given comment."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
972 (sccs-do-command "*SCCS*" "delta" file "-n"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
973 (format "-r%s" revision)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
974 (format "-y%s" comment))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
975 (sc-chmod "-w" file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
976 ;; sccs-delta already turned off write-privileges on the
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
977 ;; file, let's not re-fetch it unless there's something
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
978 ;; in it that get would expand
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
979 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
980 (let ((buffer (get-file-buffer file)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
981 (if buffer
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
982 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
983 (set-buffer buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
984 (sccs-check-out file nil))))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
985
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
986 (defun sccs-history (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
987 (sccs-do-command (current-buffer) "prs" file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
988
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
989 ;; There has *got* to be a better way to do this...
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
990
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
991 (defun sccs-save-vars (sid)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
992 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
993 (find-file "SCCS/emacs-vars.el")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
994 (erase-buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
995 (insert "(setq sccs-current-major-version \"" sid "\")")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
996 (basic-save-buffer)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
997
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
998 (defun sccs-load-vars ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
999 (if (error-occurred (load-file "SCCS/emacs-vars.el"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1000 (setq sccs-current-major-version "1")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1001
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1002 ;; SCCS header insertion code
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1003
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1004 (defun sccs-insert-headers ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1005 "*Insert headers for use with the Source Code Control System.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1006 Headers desired are inserted at the start of the buffer, and are pulled from
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1007 the variable sccs-headers-wanted"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1008 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1009 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1010 (save-restriction
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1011 (widen)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1012 (if (or (not (sccs-check-headers))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1013 (y-or-n-p "SCCS headers already exist. Insert another set?"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1014 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1015 (goto-char (point-min))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1016 (run-hooks 'sccs-insert-headers-hook)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1017 (cond ((eq major-mode 'c-mode) (sccs-insert-c-header))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1018 ((eq major-mode 'lisp-mode) (sccs-insert-lisp-header))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1019 ((eq major-mode 'emacs-lisp-mode) (sccs-insert-lisp-header))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1020 ((eq major-mode 'scheme-mode) (sccs-insert-lisp-header))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1021 ((eq major-mode 'nroff-mode) (sccs-insert-nroff-header))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1022 ((eq major-mode 'plain-tex-mode) (sccs-insert-tex-header))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1023 ((eq major-mode 'texinfo-mode) (sccs-insert-texinfo-header))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1024 (t (sccs-insert-generic-header))))))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1025
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1026
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1027
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1028 (defun sccs-insert-c-header ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1029 (insert "/*\n")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1030 (mapcar '(lambda (s)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1031 (insert " *\t" s "\n"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1032 sccs-headers-wanted)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1033 (insert " */\n\n")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1034 (if (and sccs-insert-static
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1035 (not (string-match "\\.h$" buffer-file-name)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1036 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1037 (insert "#ifndef lint\n"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1038 "static char *sccsid")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1039 ;; (setq st (point))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1040 ;; (insert (file-name-nondirectory buffer-file-name))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1041 ;; (setq en (point))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1042 ;; (subst-char-in-region st en ?. ?_)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1043 (insert " = \"\%\W\%\";\n"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1044 "#endif /* lint */\n\n")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1045 (run-hooks 'sccs-insert-c-header-hook))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1046
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1047 (defun sccs-insert-lisp-header ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1048 (mapcar '(lambda (s)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1049 (insert ";;;\t" s "\n"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1050 sccs-headers-wanted)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1051 (insert "\n")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1052 (run-hooks 'sccs-insert-lisp-header-hook))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1053
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1054 (defun sccs-insert-nroff-header ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1055 (mapcar '(lambda (s)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1056 (insert ".\\\"\t" s "\n"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1057 sccs-headers-wanted)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1058 (insert "\n")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1059 (run-hooks 'sccs-insert-nroff-header-hook))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1060
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1061 (defun sccs-insert-tex-header ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1062 (mapcar '(lambda (s)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1063 (insert "%%\t" s "\n"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1064 sccs-headers-wanted)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1065 (insert "\n")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1066 (run-hooks 'sccs-insert-tex-header-hook))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1067
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1068 (defun sccs-insert-texinfo-header ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1069 (mapcar '(lambda (s)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1070 (insert "@comment\t" s "\n"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1071 sccs-headers-wanted)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1072 (insert "\n")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1073 (run-hooks 'sccs-insert-texinfo-header-hook))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1074
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1075 (defun sccs-insert-generic-header ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1076 (let* ((comment-start-sccs (or comment-start "#"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1077 (comment-end-sccs (or comment-end ""))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1078 (dont-insert-nl-p (string-match "\n" comment-end-sccs)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1079 (mapcar '(lambda (s)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1080 (insert comment-start-sccs "\t" s ""
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1081 comment-end-sccs (if dont-insert-nl-p "" "\n")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1082 sccs-headers-wanted)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1083 (insert comment-start-sccs comment-end-sccs (if dont-insert-nl-p "" "\n"))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1084
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1085 (defun sccs-check-headers ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1086 "Check if the current file has any SCCS headers in it."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1087 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1088 (goto-char (point-min))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1089 (let ((case-fold-search ()))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1090 (re-search-forward "%[MIRLBSDHTEGUYFPQCZWA]%" (point-max) t))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1091
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1092 (defun sccs-tree-list ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1093 "List all the registered files in the current directory"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1094 (call-process "/bin/sh" () t () "-c"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1095 (concat "/bin/ls -1 " default-directory "SCCS/s.*"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1096 (goto-char (point-min))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1097 (while (search-forward "SCCS/s." () t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1098 (replace-match "" () t)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1099
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1100 (defun sccs-new-revision-p (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1101 "True if the SCCS archive is more recent than the file itself"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1102 (file-newer-than-file-p (sccs-name file) file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1103
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1104 (defun sccs-revert (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1105 "Cancel a check-out and get a fresh copy of the file"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1106 (delete-file (sccs-name file "p"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1107 (delete-file file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1108 (sccs-do-command "*SCCS*" "get" file "-s"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1109
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1110 (defun sccs-rename (old new)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1111 "Rename the SCCS archives for OLD to NEW"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1112 (if (file-exists-p (sccs-name old "p"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1113 (rename-file (sccs-name old "p") (sccs-name new "p") t))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1114 (if (file-exists-p (sccs-name old "s"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1115 (rename-file (sccs-name old "s") (sccs-name new "s") t)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1116
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1117
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1118 ;;; RCS specific part
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1119
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1120 ;; Some helper functions
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1121
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1122 (defun rcs-name (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1123 "Return the rcs-file corresponding to a given file."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1124 (if (null file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1125 ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1126 (let* ((name (expand-file-name file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1127 (rcs-file (concat name ",v")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1128 (if (and (not (file-exists-p rcs-file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1129 (file-exists-p (concat (file-name-directory name) "RCS")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1130 (setq rcs-file
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1131 (format "%sRCS/%s,v" (file-name-directory name)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1132 (file-name-nondirectory name))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1133 rcs-file)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1134
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1135 (defun rcs-lock-info (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1136 "Lock-info method for RCS. See sc-generic-lock-info"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1137 (let ((rcs-file (rcs-name file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1138 locks-regexp)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1139 (if (or (null rcs-file) (not (file-exists-p rcs-file)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1140 ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1141 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1142 (set-buffer (get-buffer-create "*RCS tmp*"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1143 (erase-buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1144 (call-process "rlog" () t () "-L" "-h" rcs-file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1145 (goto-char (point-min))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1146 (if (looking-at "\n.*Working file")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1147 ;; RCS 4.x
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1148 (setq locks-regexp "^locks:")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1149 ;; RCS 5.x
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1150 (setq locks-regexp "^locks:.*$\n"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1151 (if (not (re-search-forward locks-regexp () t))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1152 (list () ())
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1153 (if (not (looking-at (concat "[\t ]*\\([^:]*\\): \\([0-9\\.]*\\)")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1154 (list () ())
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1155 (list (buffer-substring (match-beginning 1) (match-end 1))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1156 (buffer-substring (match-beginning 2) (match-end 2)))))))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1157
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1158
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1159 (defun rcs-register (file revision)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1160 (if (and (not (file-exists-p "RCS"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1161 (y-or-n-p "Directory RCS does not exist, create it?"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1162 (make-directory "RCS"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1163 (sc-do-command "*RCS*" "ci" "ci" file (rcs-name file) "-u"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1164
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1165 (defun rcs-check-out (file lockp)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1166 (sc-do-command "*RCS*" "co" "co" file (rcs-name file) (if lockp "-l")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1167
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1168 (defun rcs-get-version (file buffer revision)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1169 (sc-do-command buffer "co" "co" file (rcs-name file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1170 (if revision (concat "-p" revision) "-p")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1171 "-q"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1172
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1173 (defun rcs-check-in (file revision comment)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1174 "Check-in a given version of the given file with the given comment."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1175 (sc-do-command "*RCS*" "ci" "ci" file (rcs-name file) "-f"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1176 (format "-m%s" comment)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1177 (if (equal revision (sc-locked-revision file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1178 "-u"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1179 (format "-u%s" revision))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1180
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1181 (defun rcs-history (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1182 (sc-do-command (current-buffer) "rlog" "rlog" file (rcs-name file)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1183
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1184 (defun rcs-tree-list ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1185 "List all the registered files in the current directory"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1186 (call-process "/bin/sh" () t () "-c"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1187 (concat "/bin/ls -1 " default-directory "RCS/*,v"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1188 (call-process "/bin/sh" () t () "-c"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1189 (concat "/bin/ls -1 " default-directory "*,v"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1190 (goto-char (point-min))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1191 (while (search-forward "RCS/" () t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1192 (replace-match "" () t))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1193 (goto-char (point-min))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1194 (while (search-forward ",v" () t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1195 (replace-match "" () t)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1196
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1197 (defun rcs-new-revision-p (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1198 "True if the archive is more recent than the file itself"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1199 (file-newer-than-file-p (rcs-name file) file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1200
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1201 (defun rcs-revert (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1202 "Cancel a check-out and get a fresh copy of the file"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1203 (sc-do-command "*RCS*" "rcs" "rcs" file (rcs-name file) "-u")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1204 (delete-file file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1205 (sc-do-command "*RCS*" "co" "co" file (rcs-name file)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1206
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1207 (defun rcs-rename (old new)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1208 "Rename the archives for OLD to NEW"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1209 (if (file-exists-p (rcs-name old))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1210 (rename-file (rcs-name old) (rcs-name new) t)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1211
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1212
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1213 ;;; CVS specific part
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1214
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1215 ;;; As we rely on pcl-cvs for the directory level functions the menu is
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1216 ;;; much shorter in CVS mode
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1217
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1218
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1219 (defun cvs-lock-info (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1220 "Lock-info method for CVS, different from RCS and SCCS modes.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1221 File are never locked in CVS."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1222 (list () ()))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1223
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1224 (defun cvs-register (file revision)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1225 (sc-do-command "*CVS*" "cvs add" cvs-program file
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1226 (file-name-nondirectory file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1227 "add" "-mInitial revision"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1228
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1229 (defun cvs-check-out (file lockp)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1230 )
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1231
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1232 (defun cvs-get-version (file buffer revision)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1233 (sc-do-command buffer "cvs update" cvs-program file file "update"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1234 (if revision (concat "-r" revision))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1235 "-p" "-q"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1236
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1237 (defun cvs-check-in (file revision comment)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1238 "Check-in a given version of the given file with the given comment."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1239 (sc-do-command "*CVS*" "cvs commit" cvs-program file file "commit"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1240 (and revision (format "-r%s" revision))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1241 (format "-m%s" comment)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1242
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1243 (defun cvs-history (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1244 (sc-do-command (current-buffer) "cvs log" cvs-program file file "log"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1245
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1246 (defun cvs-revert (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1247 "Cancel a check-out and get a fresh copy of the file"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1248 (delete-file file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1249 (sc-do-command "*CVS*" "cvs update" cvs-program file file "update"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1250
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1251 (defun sc-cvs-update-directory ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1252 "Update the current directory by calling cvs-update from pcl-cvs"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1253 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1254 (cvs-update default-directory))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1255
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1256 (defun sc-cvs-file-status ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1257 "Show the CVS status of the current file"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1258 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1259 (if (not buffer-file-name)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1260 (error "There is no file associated with buffer %s" (buffer-name)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1261 (let ((file buffer-file-name))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1262 (sc-do-command "*CVS*" "cvs status" cvs-program file file "status" "-v"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1263 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1264 (set-buffer "*CVS*")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1265 (goto-char (point-min)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1266 (display-buffer "*CVS*"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1267
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1268
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1269 ;;; ClearCase specific part
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1270
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1271 (defun ccase-is-registered-3 (fod)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1272 (if (or (not fod)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1273 (not (file-readable-p fod)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1274 'na
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1275 (let ((dirs sc-ccase-mfs-prefixes)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1276 (f nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1277 (file (expand-file-name fod)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1278 (while (and (null f) dirs)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1279 (if (string-match (car dirs) file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1280 (setq f t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1281 (setq dirs (cdr dirs))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1282 (if (null f)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1283 'na
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1284 (sc-do-command "*CCase*" "describe" "cleartool" fod fod "describe")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1285 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1286 (set-buffer "*CCase*")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1287 (let ((s (buffer-string)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1288 (cond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1289 ((string-match "@@" s) t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1290 ((string-match "^Unix" s) 'na)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1291 (t nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1292 )))))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1293
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1294 (defun ccase-is-registered (fod)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1295 (eq (ccase-is-registered-3 fod) t))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1296
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1297 (defun ccase-lock-info (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1298 (let ((cc (ccase-is-registered-3 file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1299 s)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1300 (if (eq cc 't)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1301 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1302 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1303 (set-buffer "*CCase*")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1304 (setq s (buffer-string)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1305 (if (string-match "@@[^\n]*CHECKEDOUT\" from \\([^ ]*\\)[^\n]*\n[^\n]* by \\([^(\n]*\\) (" s)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1306 (list
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1307 (substring s (match-beginning 1) (match-end 1))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1308 (substring s (match-beginning 2) (match-end 2)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1309 (list nil nil)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1310 cc)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1311
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1312 (defun ccase-maybe-comment (tag)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1313 (if (memq tag sc-ccase-comment-on)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1314 (sc-enter-comment)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1315
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1316 (defun ccase-register (file revision)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1317 "Registers the file. We don't support the revision argument.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1318 Also, we have to checkout the directory first."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1319 ;; probably need proper error handling to catch the
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1320 ;; cases where we co the directory, but don't get to
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1321 ;; ci it back (want to uco in this case)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1322 (let ((dpath (file-name-directory file)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1323 (if (not (ccase-is-registered dpath))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1324 (error "Cannot register file outside of VOB")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1325 (sc-do-command "*CCase*" "co - dir" "cleartool" dpath dpath "co")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1326 (sc-do-command "*CCase*" "register" "cleartool" file file "mkelem")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1327 (sc-do-command "*CCase*" "ci - dir" "cleartool" dpath dpath "ci"))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1328
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1329 (defun ccase-check-out (file lockp)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1330 "Checks out the latest version of FILE.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1331 If LOCKP is not NIL, FILE is also locked."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1332 (let ((comment (ccase-maybe-comment 'checkout)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1333 (sc-do-command "*CCase*" "co" "cleartool" file file "co"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1334 (if comment "-c" "-nc")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1335 (if comment comment)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1336 ;; this locking does not correspond to what we actually want. It's a
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1337 ;; hack from the days when this was SCCS-only
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1338 (if (ccase-reserve-p) "-res" "-unr"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1339 ))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1340
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1341 (defun ccase-reserve-p ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1342 "Determine whether the user wants a reserved or unreserved checkout"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1343 (cond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1344 ((eq sc-ccase-reserve t) t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1345 ((eq sc-ccase-reserve nil) nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1346 (t (y-or-n-p "Reserve Checkout? "))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1347
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1348 (defun ccase-get-version (file buffer revision)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1349 "Insert a previous revison of FILE in BUFFER.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1350 REVISION is the revision number requested."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1351 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1352 (set-buffer buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1353 (delete-region (point-min) (point-max))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1354 (insert-file-contents (concat file "@@/" revision)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1355 )
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1356
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1357 (defun ccase-check-in (file revision message)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1358 "Check in FILE with revision REVISION.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1359 MESSAGE is a string describing the changes."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1360 ;; we ignore revision since we can't use it
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1361 (sc-do-command "*CCase*" "ci" "cleartool" file file "ci" "-c" message (if sc-mode-expert "-ide"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1362 )
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1363
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1364 (defun ccase-history (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1365 "Insert the edit history of FILE in the current buffer."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1366 (sc-do-command (buffer-name) "history" "cleartool" file file "lsh")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1367 )
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1368
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1369 (defun ccase-tree-list ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1370 "List in the current buffer the files registered in the source control system"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1371 ;;; This isn't going to fly as a practicality. We abstract everything out.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1372 ;; (sc-do-command (buffer-name) "listing" "cleartool" (default-directory) (default-directory) "ls" "-r" "-short" "-vis" "-nxname")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1373 )
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1374
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1375 (defun ccase-new-revision-p (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1376 "True if a new revision of FILE was checked in since we last got a copy of it"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1377 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1378 (let (newfile res br1 br2)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1379 (sc-do-command "*CCase*" "Describe" "cleartool" file file "des")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1380 (set-buffer "*CCase*")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1381 (goto-char (point-min))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1382 (if (setq pos (search-forward-regexp "@@\\([^ \"]*\\)CHECKEDOUT\" from \\([^ ]*\\) (\\([a-z]*\\))" nil t))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1383 ;; (if (setq pos (search-forward-regexp "@@\\([^ \"]*\\)CHECKEDOUT\"" nil t))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1384 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1385 (setq res (buffer-substring (match-beginning 3) (match-end 3)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1386 (if (equal res "unreserved")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1387 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1388 (setq newfile (concat file "@@"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1389 (buffer-substring (match-beginning 1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1390 (match-end 1))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1391 "LATEST"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1392 (setq br1 (buffer-substring (match-beginning 2) (match-end 2)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1393 (sc-do-command "*CCase*" "Describe" "cleartool" file newfile
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1394 "des")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1395 (search-forward-regexp "@@\\([^ \"]*\\)" nil t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1396 (setq br2 (buffer-substring (match-beginning 1) (match-end 1)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1397 (not (equal br1 br2)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1398 nil))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1399 (error "%s not currently checked out" file)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1400
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1401 (defun ccase-revert (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1402 "Cancel a check out of FILE and get back the latest checked in version"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1403 (sc-do-command "*CCase*" "uco" "cleartool" file file "unco")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1404 )
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1405
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1406 (defun ccase-rename (old new)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1407 "Rename the source control archives for OLD to NEW"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1408 (let ((dpath (file-name-directory old))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1409 (comment (ccase-maybe-comment 'rename)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1410 (if (not (ccase-is-registered dpath))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1411 (error "Cannot rename file outside of VOB")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1412 (sc-do-command "*CCase*" "co - dir" "cleartool" dpath dpath "co"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1413 (if comment "-c" "-nc")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1414 (if comment comment))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1415 (sc-do-command "*CCase*" "mv" "cleartool" new new "mv"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1416 (if comment "-c" "-nc")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1417 (if comment comment)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1418 old)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1419 (sc-do-command "*CCase*" "ci - dir" "cleartool" dpath dpath "ci"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1420 (if comment "-c" "-nc")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1421 (if comment comment)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1422
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1423 (defun sc-ccase-checkout-dir ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1424 "Checkout the directory this file is in"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1425 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1426 (let ((dpath default-directory)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1427 (comment (ccase-maybe-comment 'checkout-dir)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1428 (if (not (ccase-is-registered dpath))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1429 (error "Cannot checkout directory outside of VOB")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1430 (sc-do-command "*CCase*" "co - dir" "cleartool" dpath dpath "co"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1431 (if comment "-c" "-nc")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1432 (if comment comment)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1433
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1434 (defun sc-ccase-checkin-dir ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1435 "Checkin the directory this file is in"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1436 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1437 (let ((dpath default-directory)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1438 (comment (ccase-maybe-comment 'checkin-dir)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1439 (if (not (ccase-is-registered dpath))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1440 (error "Cannot checkout directory outside of VOB")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1441 (sc-do-command "*CCase*" "ci - dir" "cleartool" dpath dpath "ci"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1442 (if comment "-c" "-nc")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1443 (if comment comment)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1444
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1445 (defun sc-ccase-editcs ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1446 "Edit Config Spec for this view"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1447 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1448 (sc-do-command "*CCase-cs*" "catcs" "cleartool" "" nil "catcs")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1449 (switch-to-buffer-other-window "*CCase-cs*")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1450 (local-set-key "\C-c\C-c" 'exit-recursive-edit)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1451 (recursive-edit)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1452 (set-buffer "*CCase-cs*")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1453 (let ((name (make-temp-name "/tmp/configspec")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1454 (write-region (point-min) (point-max) name)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1455 (kill-buffer "*CCase-cs*")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1456 (sc-do-command "*CCase*" "setcs" "cleartool" name name "setcs"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1457 )
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1458
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1459 (defun sc-ccase-new-brtype (brt)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1460 "Create a new branch type"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1461 (interactive "sBranch Name: ")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1462 (let ((comment (ccase-maybe-comment 'new-brtype)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1463 (sc-do-command "*CCase*" "mkbrt" "cleartool" brt brt "mkbrtype"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1464 (if comment "-c" "-nc")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1465 (if comment comment))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1466
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1467 (defun sc-ccase-new-branch (brch)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1468 "Create a new branch for element"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1469 (interactive "sBranch: ")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1470 (let ((file (buffer-file-name))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1471 (comment (ccase-maybe-comment 'new-branch)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1472 (sc-do-command "*CCase*" "mkbrch" "cleartool" file file "mkbranch"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1473 (if comment "-c" "-nc")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1474 (if comment comment)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1475 brch)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1476
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1477 (defun sc-ccase-checkin-merge ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1478 "Merge in changes to enable checkin"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1479 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1480 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1481 (let ((file (buffer-file-name))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1482 (buf (current-buffer))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1483 (comment (ccase-maybe-comment 'checkin-merge)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1484 (sc-do-command "*CCase*" "Describe" "cleartool" file file "des")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1485 (set-buffer "*CCase*")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1486 (goto-char (point-min))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1487 (if (search-forward-regexp "@@\\([^ \"]*\\)CHECKEDOUT\" from \\([^ ]*\\) (\\([a-z]*\\))" nil t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1488 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1489 (sc-do-command "*CCase*" "Merging" "cleartool" file
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1490 (concat (buffer-substring (match-beginning 1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1491 (match-end 1)) "LATEST")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1492 "merge"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1493 (if comment "-c" "-nc")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1494 (if comment comment)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1495 "-abort" "-to" file "-ver")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1496 (set-buffer buf)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1497 (revert-buffer t t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1498 (display-buffer "*CCase*"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1499 (error "File %s not checked out" file)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1500
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1501 (defun sc-ccase-version-tree ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1502 "List version tree for file"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1503 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1504 (let ((p (buffer-file-name)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1505 (sc-do-command "*CCase*" "lsvtree" "cleartool" p p "lsvtree")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1506 (display-buffer "*CCase*")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1507
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1508 (defun ccase-protect-expanded-name (revision)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1509 "Protect ccase extended names from being used as temp names. Munge /s into :s"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1510 (if (equal sc-generic-name "CCase")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1511 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1512 (if (string-match "/" revision)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1513 (let ((str (substring revision 0)) ;; copy string
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1514 i)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1515 (while (setq i (string-match "/" str))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1516 (aset str i 58)) ; 58 is for :
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1517 str)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1518
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1519 (defun sc-ccase-list-locked-files ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1520 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1521 (sc-do-command "*CCase directory*" "listing" "cleartool" (default-directory) nil "lsco" "-cview"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1522
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1523 (defun sc-ccase-list-all-locked-files ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1524 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1525 (sc-do-command "*CCase directory*" "listing" "cleartool" (default-directory) nil "lsco"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1526
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1527 (defun sc-ccase-list-registered-files ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1528 "List files registered in clearcase"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1529 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1530 (sc-do-command "*CCase directory*" "listing" "cleartool" (default-directory) nil "ls" "-r" "-vis" "-nxname"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1531
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1532 ;;; Instantiation and installation of the menus
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1533
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1534 ;;; Set the menubar for Lucid Emacs
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1535 (defvar sc-default-menu
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1536 '(["NEXT-OPERATION" sc-next-operation t nil]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1537 ["Update Current Directory" sc-update-directory t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1538 "----"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1539 ["Revert File" sc-revert-file t nil]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1540 ["Rename File" sc-rename-this-file t nil]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1541 "----"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1542 ["Show Changes" sc-show-changes t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1543 ["Show Changes Since Revision..." sc-show-revision-changes t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1544 ["Visit Previous Revision..." sc-visit-previous-revision t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1545 ["Show Edit History" sc-show-history t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1546 "----"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1547 ["List Locked Files" sc-list-locked-files t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1548 ["List Locked Files Any User" sc-list-all-locked-files t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1549 ["List Registered Files" sc-list-registered-files t])
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1550 "Menubar entry for using the revision control system.")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1551
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1552 (defvar sc-cvs-menu
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1553 '(["Update Current Directory" sc-cvs-update-directory t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1554 ["Revert File" sc-revert-file t nil]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1555 "----"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1556 ["Show Changes" sc-show-changes t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1557 ["Show Changes Since Revision..." sc-show-revision-changes t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1558 ["Visit Previous Revision..." sc-visit-previous-revision t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1559 ["Show File Status" sc-cvs-file-status t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1560 ["Show Edit History" sc-show-history t])
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1561 "Menubar entry for using the revision control system with CVS.")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1562
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1563 (defvar sc-ccase-menu
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1564 '(["NEXT-OPERATION" sc-next-operation t nil]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1565 ["Revert File" sc-revert-file t nil]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1566 ["Checkin Merge" sc-ccase-checkin-merge t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1567 "----"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1568 ["Show Changes" sc-show-changes t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1569 ["Show Changes Since Revision..." sc-show-revision-changes t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1570 ["Visit Previous Revision..." sc-visit-previous-revision t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1571 ["Show Edit History" sc-show-history t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1572 "----"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1573 ("Directories"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1574 ["Checkout Directory" sc-ccase-checkout-dir t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1575 ["Checkin Directory" sc-ccase-checkin-dir t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1576 ["Rename File..." sc-rename-this-file t nil])
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1577 ("Configs"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1578 ["Edit Config Spec..." sc-ccase-editcs t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1579 ["Create New Branch..." sc-ccase-new-brtype t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1580 ["Make New Branch..." sc-ccase-new-branch t])
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1581 ("Listings"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1582 ["List Version Tree" sc-ccase-version-tree t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1583 ["List Locked Files" sc-ccase-list-locked-files t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1584 ["List Locked Files Any User" sc-ccase-list-all-locked-files t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1585 ["List Registered Files" sc-ccase-list-registered-files t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1586 ))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1587 "Menubar entry for using the revision control system.")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1588
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1589 (defun sc-sensitize-menu ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1590 (let* ((rest (cdr (car
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1591 (find-menu-item current-menubar (list sc-generic-name)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1592 (case-fold-search t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1593 (file (if buffer-file-name
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1594 (file-name-nondirectory buffer-file-name)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1595 (buffer-name)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1596 (lock-info (sc-lock-info buffer-file-name))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1597 command
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1598 nested-rest
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1599 item)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1600 (while rest
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1601 (setq item (car rest))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1602 (if (listp item)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1603 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1604 (setq nested-rest (cons (cdr rest) nested-rest))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1605 (setq rest (cdr item)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1606 (if (vectorp item)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1607 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1608 (setq command (aref item 1))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1609 (cond ((eq 'sc-next-operation command)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1610 (aset item 0
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1611 (cond ((eq lock-info 'na) "Not Available")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1612 ((not lock-info) "Register File")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1613 ((not (car lock-info)) "Check out File")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1614 (t "Check in File")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1615 ;; if locked by somebody else disable the next-operation
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1616 (if (or (not buffer-file-name)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1617 (eq lock-info 'na)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1618 (and (car lock-info)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1619 (not (equal sc-generic-name "CCase"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1620 (not (equal (car lock-info) (user-login-name)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1621 (aset item 2 ())
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1622 (aset item 2 t)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1623 ((eq lock-info 'na) (aset item 2 ()))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1624 ((> (length item) 3)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1625 (aset item 3 file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1626 (t nil))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1627 (if (not (eq lock-info 'na))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1628 (let ((enable-file-items
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1629 (if (member sc-generic-name '("CVS" "CCase"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1630 buffer-file-name
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1631 (if lock-info t ()))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1632 (if (memq command
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1633 '(sc-force-check-in-file
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1634 sc-register-file
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1635 sc-revert-file
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1636 sc-rename-this-file
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1637 sc-show-history
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1638 sc-show-changes
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1639 sc-show-revision-changes
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1640 sc-visit-previous-revision
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1641 sc-cvs-file-status
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1642 sc-ccase-checkout-dir
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1643 sc-ccase-checkin-dir
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1644 sc-ccase-editcs
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1645 sc-ccase-new-brtype
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1646 sc-ccase-new-branch
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1647 sc-ccase-checkin-merge
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1648 sc-ccase-needs-merge
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1649 sc-ccase-merge-changes
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1650 sc-ccase-create-label
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1651 sc-ccase-label-sources
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1652 sc-ccase-version-tree
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1653 sc-list-locked-files
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1654 sc-list-all-locked-files
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1655 sc-ccase-list-registered-files
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1656 ))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1657 (aset item 2 enable-file-items))))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1658 (if (not (setq rest (cdr rest)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1659 (if nested-rest
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1660 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1661 (setq rest (car nested-rest))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1662 (setq nested-rest (cdr nested-rest)))))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1663 nil))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1664
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1665
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1666 ;;; Function to decide which Source control to use
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1667 (defun sc-set-SCCS-mode ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1668 (setq sc-generic-name "SCCS")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1669 (setq sc-can-hack-dir t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1670 (setq sc-generic-lock-info 'sccs-lock-info)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1671 (setq sc-generic-register 'sccs-register)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1672 (setq sc-generic-check-out 'sccs-check-out)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1673 (setq sc-generic-get-version 'sccs-get-version)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1674 (setq sc-generic-check-in 'sccs-check-in)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1675 (setq sc-generic-history 'sccs-history)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1676 (setq sc-generic-tree-list 'sccs-tree-list)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1677 (setq sc-generic-new-revision-p 'sccs-new-revision-p)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1678 (setq sc-generic-revert 'sccs-revert)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1679 (setq sc-generic-rename 'sccs-rename)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1680 (setq sc-menu
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1681 (cons (car sc-default-menu)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1682 (cons ["Insert Headers" sccs-insert-headers t]
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1683 (cdr sc-default-menu))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1684 (define-key sc-prefix-map "h" 'sccs-insert-headers)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1685 (define-key sc-prefix-map "\C-d" 'sc-update-directory))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1686
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1687 (defun sc-set-RCS-mode ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1688 (setq sc-generic-name "RCS")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1689 (setq sc-can-hack-dir t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1690 (setq sc-generic-lock-info 'rcs-lock-info)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1691 (setq sc-generic-register 'rcs-register)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1692 (setq sc-generic-check-out 'rcs-check-out)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1693 (setq sc-generic-get-version 'rcs-get-version)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1694 (setq sc-generic-check-in 'rcs-check-in)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1695 (setq sc-generic-history 'rcs-history)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1696 (setq sc-generic-tree-list 'rcs-tree-list)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1697 (setq sc-generic-new-revision-p 'rcs-new-revision-p)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1698 (setq sc-generic-revert 'rcs-revert)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1699 (setq sc-generic-rename 'rcs-rename)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1700 (setq sc-menu sc-default-menu)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1701 (define-key sc-prefix-map "\C-d" 'sc-update-directory))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1702
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1703 (defun sc-set-CVS-mode ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1704 (require 'pcl-cvs)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1705 (setq sc-generic-name "CVS")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1706 (setq sc-can-hack-dir t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1707 (setq sc-generic-lock-info 'cvs-lock-info)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1708 (setq sc-generic-register 'cvs-register)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1709 (setq sc-generic-check-out 'cvs-check-out)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1710 (setq sc-generic-get-version 'cvs-get-version)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1711 (setq sc-generic-check-in 'cvs-check-in)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1712 (setq sc-generic-history 'cvs-history)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1713 (setq sc-generic-tree-list 'cvs-tree-list)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1714 (setq sc-generic-new-revision-p 'cvs-new-revision-p)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1715 (setq sc-generic-revert 'cvs-revert)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1716 (setq sc-generic-rename 'cvs-rename)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1717 (setq sc-menu sc-cvs-menu)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1718 (define-key sc-prefix-map "\C-d" 'sc-cvs-update-directory)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1719 (define-key sc-prefix-map "s" 'sc-cvs-file-status))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1720
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1721 (defun sc-set-CLEARCASE-mode ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1722 (setq sc-generic-name "CCase")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1723 (setq sc-can-hack-dir nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1724 (setq sc-generic-lock-info 'ccase-lock-info)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1725 (setq sc-generic-register 'ccase-register)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1726 (setq sc-generic-check-out 'ccase-check-out)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1727 (setq sc-generic-get-version 'ccase-get-version)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1728 (setq sc-generic-check-in 'ccase-check-in)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1729 (setq sc-generic-history 'ccase-history)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1730 (setq sc-generic-tree-list 'ccase-tree-list)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1731 (setq sc-generic-new-revision-p 'ccase-new-revision-p)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1732 (setq sc-generic-revert 'ccase-revert)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1733 (setq sc-generic-rename 'ccase-rename)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1734 (setq sc-menu sc-ccase-menu)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1735
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1736 ;; caching for file directory types
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1737 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1738 (set-buffer (get-buffer-create "*CCase*"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1739 (shell-command-on-region (point-min) (point-max) "df -t mfs | sed -n 's%.*[ ]\\(/[^ ]*\\)$%\\1%p'" t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1740 (goto-char (point-min))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1741 (let (x l)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1742 (while (condition-case nil (setq x (read (current-buffer)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1743 (error nil))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1744 (setq l (cons (prin1-to-string x) l)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1745 (setq sc-ccase-mfs-prefixes (nreverse l))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1746 )
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1747
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1748 (defun sc-set-ATRIA-mode ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1749 (sc-set-CLEARCASE-mode))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1750
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1751 (defun sc-set-CCASE-mode ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1752 (sc-set-CLEARCASE-mode))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1753
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1754
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1755 ;; the module is sucessfully loaded!
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1756 (provide 'generic-sc)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1757
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1758 ;;; generic-sc.el ends here