Mercurial > emacs
annotate lisp/vc-mcvs.el @ 87432:315124ffb889
* (vc.el, vc-sccs.el, vc-rcs.el, vc-cs.el, vc-mcvs.el): Put
machinery in place to support editing of change comments
with 'e' in a log-view buffer. Not documented yet as this
only works for SCCS, RCS, and maybe CVS if you have admin
privileges. When we have backend support for Subversion and
more modern systems it will ve time to write this up.
author | Eric S. Raymond <esr@snark.thyrsus.com> |
---|---|
date | Thu, 27 Dec 2007 11:26:27 +0000 |
parents | c0ee02a9ac55 |
children | c5df210848ca |
rev | line source |
---|---|
50646 | 1 ;;; vc-mcvs.el --- VC backend for the Meta-CVS version-control system |
2 | |
75347 | 3 ;; Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. |
50646 | 4 |
5 ;; Author: FSF (see vc.el for full credits) | |
6 ;; Maintainer: Stefan Monnier <monnier@gnu.org> | |
7 | |
8 ;; This file is part of GNU Emacs. | |
9 | |
10 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
11 ;; it under the terms of the GNU General Public License as published by | |
78236
9355f9b7bbff
Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents:
75347
diff
changeset
|
12 ;; the Free Software Foundation; either version 3, or (at your option) |
50646 | 13 ;; any later version. |
14 | |
15 ;; GNU Emacs is distributed in the hope that it will be useful, | |
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 ;; GNU General Public License for more details. | |
19 | |
20 ;; You should have received a copy of the GNU General Public License | |
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the | |
64091 | 22 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
23 ;; Boston, MA 02110-1301, USA. | |
50646 | 24 |
25 ;;; Commentary: | |
26 | |
50779
02455099d549
Add a link to Meta-CVS home page.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50667
diff
changeset
|
27 ;; The home page of the Meta-CVS version control system is at |
57914
4afd8cdfd00e
(vc-mcvs-annotate-command): Delete extraneous lines from beginning of buffer.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
57095
diff
changeset
|
28 ;; |
50779
02455099d549
Add a link to Meta-CVS home page.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50667
diff
changeset
|
29 ;; http://users.footprints.net/~kaz/mcvs.html |
57914
4afd8cdfd00e
(vc-mcvs-annotate-command): Delete extraneous lines from beginning of buffer.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
57095
diff
changeset
|
30 ;; |
50646 | 31 ;; This is derived from vc-cvs.el as follows: |
32 ;; - cp vc-cvs.el vc-mcvs.el | |
33 ;; - Replace CVS/ with MCVS/CVS/ | |
34 ;; - Replace 'CVS with 'MCVS | |
35 ;; - Replace -cvs- with -mcvs- | |
36 ;; - Replace most of the rest of CVS to Meta-CVS | |
37 ;; | |
38 ;; Then of course started the hacking. Only a small part of the code | |
39 ;; has been touched and not much more than that was tested, so if | |
40 ;; you bump into a bug, don't be surprised: just report it to me. | |
41 ;; | |
42 ;; What has been partly tested: | |
43 ;; - C-x v v to start editing a file that was checked out with CVSREAD on. | |
44 ;; - C-x v v to commit a file | |
45 ;; - C-x v = | |
46 ;; - C-x v l | |
47 ;; - C-x v i | |
48 ;; - C-x v g | |
50808
5a0d0a9219f3
(vc-mcvs-mode-line-string): Fix thinko.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50779
diff
changeset
|
49 ;; - M-x vc-rename-file RET |
50646 | 50 |
51 ;;; Bugs: | |
52 | |
50952
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
53 ;; - Retrieving snapshots doesn't filter `cvs update' output and thus |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
54 ;; parses bogus filenames. Don't know if it harms. |
50646 | 55 |
56 ;;; Code: | |
57 | |
58 (eval-when-compile (require 'vc)) | |
59 (require 'vc-cvs) | |
60 | |
61 ;;; | |
62 ;;; Customization options | |
63 ;;; | |
64 | |
65 (defcustom vc-mcvs-global-switches nil | |
66 "*Global switches to pass to any Meta-CVS command." | |
67 :type '(choice (const :tag "None" nil) | |
68 (string :tag "Argument String") | |
69 (repeat :tag "Argument List" | |
70 :value ("") | |
71 string)) | |
59996
aac0a33f5772
Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents:
59445
diff
changeset
|
72 :version "22.1" |
50646 | 73 :group 'vc) |
74 | |
75 (defcustom vc-mcvs-register-switches nil | |
76 "*Extra switches for registering a file into Meta-CVS. | |
77 A string or list of strings passed to the checkin program by | |
78 \\[vc-register]." | |
79 :type '(choice (const :tag "None" nil) | |
80 (string :tag "Argument String") | |
81 (repeat :tag "Argument List" | |
82 :value ("") | |
83 string)) | |
59996
aac0a33f5772
Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents:
59445
diff
changeset
|
84 :version "22.1" |
50646 | 85 :group 'vc) |
86 | |
87 (defcustom vc-mcvs-diff-switches nil | |
88 "*A string or list of strings specifying extra switches for cvs diff under VC." | |
89 :type '(choice (const :tag "None" nil) | |
90 (string :tag "Argument String") | |
91 (repeat :tag "Argument List" | |
92 :value ("") | |
93 string)) | |
59996
aac0a33f5772
Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents:
59445
diff
changeset
|
94 :version "22.1" |
50646 | 95 :group 'vc) |
96 | |
97 (defcustom vc-mcvs-header (or (cdr (assoc 'MCVS vc-header-alist)) | |
98 vc-cvs-header) | |
99 "*Header keywords to be inserted by `vc-insert-headers'." | |
59996
aac0a33f5772
Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents:
59445
diff
changeset
|
100 :version "22.1" |
50646 | 101 :type '(repeat string) |
102 :group 'vc) | |
103 | |
104 (defcustom vc-mcvs-use-edit vc-cvs-use-edit | |
105 "*Non-nil means to use `cvs edit' to \"check out\" a file. | |
106 This is only meaningful if you don't use the implicit checkout model | |
107 \(i.e. if you have $CVSREAD set)." | |
108 :type 'boolean | |
59996
aac0a33f5772
Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents:
59445
diff
changeset
|
109 :version "22.1" |
50646 | 110 :group 'vc) |
111 | |
81965
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
112 ;;; Properties of the backend |
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
113 |
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
114 (defun vc-mcvs-revision-granularity () |
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
115 'file) |
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
116 |
50646 | 117 ;;; |
118 ;;; State-querying functions | |
119 ;;; | |
120 | |
121 ;;;###autoload (defun vc-mcvs-registered (file) | |
57095
74d256616e05
(vc-mcvs-root, vc-mcvs-registered): Use vc-find-root.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55815
diff
changeset
|
122 ;;;###autoload (if (vc-find-root file "MCVS/CVS") |
74d256616e05
(vc-mcvs-root, vc-mcvs-registered): Use vc-find-root.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55815
diff
changeset
|
123 ;;;###autoload (progn |
74d256616e05
(vc-mcvs-root, vc-mcvs-registered): Use vc-find-root.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55815
diff
changeset
|
124 ;;;###autoload (load "vc-mcvs") |
74d256616e05
(vc-mcvs-root, vc-mcvs-registered): Use vc-find-root.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55815
diff
changeset
|
125 ;;;###autoload (vc-mcvs-registered file)))) |
50646 | 126 |
127 (defun vc-mcvs-root (file) | |
128 "Return the root directory of a Meta-CVS project, if any." | |
50667
c475369e6995
(vc-mcvs-root): Cache the result.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50646
diff
changeset
|
129 (or (vc-file-getprop file 'mcvs-root) |
57095
74d256616e05
(vc-mcvs-root, vc-mcvs-registered): Use vc-find-root.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55815
diff
changeset
|
130 (vc-file-setprop file 'mcvs-root (vc-find-root file "MCVS/CVS")))) |
50646 | 131 |
132 (defun vc-mcvs-read (file) | |
50899
6b9cefee3eee
(vc-mcvs-read): Don't require `file' to exist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50808
diff
changeset
|
133 (if (file-readable-p file) |
6b9cefee3eee
(vc-mcvs-read): Don't require `file' to exist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50808
diff
changeset
|
134 (with-temp-buffer |
6b9cefee3eee
(vc-mcvs-read): Don't require `file' to exist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50808
diff
changeset
|
135 (insert-file-contents file) |
6b9cefee3eee
(vc-mcvs-read): Don't require `file' to exist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50808
diff
changeset
|
136 (goto-char (point-min)) |
6b9cefee3eee
(vc-mcvs-read): Don't require `file' to exist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50808
diff
changeset
|
137 (read (current-buffer))))) |
50646 | 138 |
139 (defun vc-mcvs-map-file (dir file) | |
140 (let ((map (vc-mcvs-read (expand-file-name "MCVS/MAP" dir))) | |
141 inode) | |
142 (dolist (x map inode) | |
143 (if (equal (nth 2 x) file) (setq inode (nth 1 x)))))) | |
144 | |
145 (defun vc-mcvs-registered (file) | |
146 (let (root inode cvsfile) | |
147 (when (and (setq root (vc-mcvs-root file)) | |
148 (setq inode (vc-mcvs-map-file | |
50667
c475369e6995
(vc-mcvs-root): Cache the result.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50646
diff
changeset
|
149 root (file-relative-name file root)))) |
50646 | 150 (vc-file-setprop file 'mcvs-inode inode) |
151 ;; Avoid calling `mcvs diff' in vc-workfile-unchanged-p. | |
152 (vc-file-setprop file 'vc-checkout-time | |
153 (if (vc-cvs-registered | |
154 (setq cvsfile (expand-file-name inode root))) | |
155 (vc-file-getprop cvsfile 'vc-checkout-time) | |
156 ;; The file might not be registered yet because | |
157 ;; of lazy-adding. | |
158 0)) | |
159 t))) | |
160 | |
161 (defun vc-mcvs-state (file) | |
162 ;; This would assume the Meta-CVS sandbox is synchronized. | |
163 ;; (vc-mcvs-cvs state file)) | |
164 "Meta-CVS-specific version of `vc-state'." | |
50928
dc235df7e226
(vc-mcvs-stay-local): Remove unused var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50924
diff
changeset
|
165 (if (vc-stay-local-p file) |
50646 | 166 (let ((state (vc-file-getprop file 'vc-state))) |
167 ;; If we should stay local, use the heuristic but only if | |
168 ;; we don't have a more precise state already available. | |
169 (if (memq state '(up-to-date edited)) | |
170 (vc-mcvs-state-heuristic file) | |
171 state)) | |
172 (with-temp-buffer | |
50952
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
173 (setq default-directory (vc-mcvs-root file)) |
50646 | 174 (vc-mcvs-command t 0 file "status") |
175 (vc-cvs-parse-status t)))) | |
176 | |
177 | |
178 (defalias 'vc-mcvs-state-heuristic 'vc-cvs-state-heuristic) | |
179 | |
180 (defun vc-mcvs-dir-state (dir) | |
87424
c0ee02a9ac55
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
87139
diff
changeset
|
181 "Find the Meta-CVS state of all files in DIR and subdirectories." |
50646 | 182 ;; if DIR is not under Meta-CVS control, don't do anything. |
183 (when (file-readable-p (expand-file-name "MCVS/CVS/Entries" dir)) | |
50928
dc235df7e226
(vc-mcvs-stay-local): Remove unused var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50924
diff
changeset
|
184 (if (vc-stay-local-p dir) |
50646 | 185 (vc-mcvs-dir-state-heuristic dir) |
186 (let ((default-directory dir)) | |
187 ;; Don't specify DIR in this command, the default-directory is | |
188 ;; enough. Otherwise it might fail with remote repositories. | |
189 (with-temp-buffer | |
50952
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
190 (setq default-directory (vc-mcvs-root dir)) |
87424
c0ee02a9ac55
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
87139
diff
changeset
|
191 (vc-mcvs-command t 0 nil "status") |
50646 | 192 (goto-char (point-min)) |
193 (while (re-search-forward "^=+\n\\([^=\n].*\n\\|\n\\)+" nil t) | |
194 (narrow-to-region (match-beginning 0) (match-end 0)) | |
195 (vc-cvs-parse-status) | |
196 (goto-char (point-max)) | |
197 (widen))))))) | |
198 | |
85139
8ba0e30716a5
Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
82140
diff
changeset
|
199 (defun vc-mcvs-working-revision (file) |
8ba0e30716a5
Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
82140
diff
changeset
|
200 (vc-cvs-working-revision |
53639
ee35e8c06381
(vc-mcvs-mode-line-string): Remove. Does not work.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
201 (expand-file-name (vc-file-getprop file 'mcvs-inode) |
ee35e8c06381
(vc-mcvs-mode-line-string): Remove. Does not work.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
202 (vc-file-getprop file 'mcvs-root)))) |
50646 | 203 |
204 (defalias 'vc-mcvs-checkout-model 'vc-cvs-checkout-model) | |
205 | |
206 ;;; | |
207 ;;; State-changing functions | |
208 ;;; | |
209 | |
81965
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
210 (defun vc-mcvs-register (files &optional rev comment) |
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
211 "Register FILES into the Meta-CVS version-control system. |
50646 | 212 COMMENT can be used to provide an initial description of FILE. |
213 | |
214 `vc-register-switches' and `vc-mcvs-register-switches' are passed to | |
215 the Meta-CVS command (in that order)." | |
81965
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
216 ;; FIXME: multiple-file case should be made to work |
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
217 (if (> (length files) 1) (error "Registering filesets is not yet supported.")) |
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
218 (let* ((file (car files)) |
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
219 (filename (file-name-nondirectory file)) |
50646 | 220 (extpos (string-match "\\." filename)) |
221 (ext (if extpos (substring filename (1+ extpos)))) | |
222 (root (vc-mcvs-root file)) | |
223 (types-file (expand-file-name "MCVS/TYPES" root)) | |
224 (map-file (expand-file-name "MCVS/MAP" root)) | |
225 (types (vc-mcvs-read types-file))) | |
226 ;; Make sure meta files like MCVS/MAP are not read-only (happens with | |
227 ;; CVSREAD) since Meta-CVS doesn't pay attention to it at all and goes | |
228 ;; belly-up. | |
229 (unless (file-writable-p map-file) | |
230 (vc-checkout map-file t)) | |
50667
c475369e6995
(vc-mcvs-root): Cache the result.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50646
diff
changeset
|
231 (unless (or (file-writable-p types-file) (not (file-exists-p types-file))) |
50646 | 232 (vc-checkout types-file t)) |
233 ;; Make sure the `mcvs add' will not fire up the CVSEDITOR | |
234 ;; to add a rule for the given file's extension. | |
235 (when (and ext (not (assoc ext types))) | |
65680
ed770a0a7846
2005-09-24 Emilio C. Lopes <eclig@gmx.net>
Romain Francoise <romain@orebokech.com>
parents:
64762
diff
changeset
|
236 (let ((type (completing-read "Type to use (default): " |
50646 | 237 '("default" "name-only" "keep-old" |
238 "binary" "value-only") | |
239 nil t nil nil "default"))) | |
240 (push (list ext (make-symbol (upcase (concat ":" type)))) types) | |
241 (setq types (sort types (lambda (x y) (string< (car x) (car y))))) | |
242 (with-current-buffer (find-file-noselect types-file) | |
243 (erase-buffer) | |
244 (pp types (current-buffer)) | |
245 (save-buffer) | |
246 (unless (get-buffer-window (current-buffer) t) | |
247 (kill-buffer (current-buffer))))))) | |
248 ;; Now do the ADD. | |
50901
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
249 (prog1 (apply 'vc-mcvs-command nil 0 file |
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
250 "add" |
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
251 (and comment (string-match "[^\t\n ]" comment) |
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
252 (concat "-m" comment)) |
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
253 (vc-switches 'MCVS 'register)) |
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
254 ;; I'm not sure exactly why, but if we don't setup the inode and root |
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
255 ;; prop of the file, things break later on in vc-mode-line that |
85139
8ba0e30716a5
Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
82140
diff
changeset
|
256 ;; ends up calling vc-mcvs-working-revision. |
50901
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
257 ;; We also need to set vc-checkout-time so that vc-workfile-unchanged-p |
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
258 ;; doesn't try to call `mcvs diff' on the file. |
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
259 (vc-mcvs-registered file))) |
50646 | 260 |
261 (defalias 'vc-mcvs-responsible-p 'vc-mcvs-root | |
262 "Return non-nil if CVS thinks it is responsible for FILE.") | |
263 | |
264 (defalias 'vc-cvs-could-register 'vc-cvs-responsible-p | |
265 "Return non-nil if FILE could be registered in Meta-CVS. | |
266 This is only possible if Meta-CVS is responsible for FILE's directory.") | |
267 | |
81965
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
268 (defun vc-mcvs-checkin (files rev comment) |
50646 | 269 "Meta-CVS-specific version of `vc-backend-checkin'." |
85141
b16f7408cd3f
Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
85139
diff
changeset
|
270 (unless (or (not rev) (vc-mcvs-valid-revision-number-p rev)) |
50901
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
271 (if (not (vc-mcvs-valid-symbolic-tag-name-p rev)) |
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
272 (error "%s is not a valid symbolic tag name" rev) |
50928
dc235df7e226
(vc-mcvs-stay-local): Remove unused var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50924
diff
changeset
|
273 ;; If the input revision is a valid symbolic tag name, we create it |
50901
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
274 ;; as a branch, commit and switch to it. |
50952
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
275 ;; This file-specific form of branching is deprecated. |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
276 ;; We can't use `mcvs branch' and `mcvs switch' because they cannot |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
277 ;; be applied just to this one file. |
81965
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
278 (apply 'vc-mcvs-command nil 0 files "tag" "-b" (list rev)) |
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
279 (apply 'vc-mcvs-command nil 0 files "update" "-r" (list rev)) |
85184
025303f3b74d
(vc-mcvs-checkin): Use mapc rather than mapcar.
Glenn Morris <rgm@gnu.org>
parents:
85141
diff
changeset
|
280 (mapc (lambda (file) (vc-file-setprop file 'vc-mcvs-sticky-tag rev)) |
025303f3b74d
(vc-mcvs-checkin): Use mapc rather than mapcar.
Glenn Morris <rgm@gnu.org>
parents:
85141
diff
changeset
|
281 files) |
50901
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
282 (setq rev nil))) |
50928
dc235df7e226
(vc-mcvs-stay-local): Remove unused var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50924
diff
changeset
|
283 ;; This commit might cvs-commit several files (e.g. MAP and TYPES) |
dc235df7e226
(vc-mcvs-stay-local): Remove unused var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50924
diff
changeset
|
284 ;; so using numbered revs here is dangerous and somewhat meaningless. |
dc235df7e226
(vc-mcvs-stay-local): Remove unused var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50924
diff
changeset
|
285 (when rev (error "Cannot commit to a specific revision number")) |
81965
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
286 (let ((status (apply 'vc-mcvs-command nil 1 files |
50928
dc235df7e226
(vc-mcvs-stay-local): Remove unused var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50924
diff
changeset
|
287 "ci" "-m" comment |
50901
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
288 (vc-switches 'MCVS 'checkin)))) |
50646 | 289 (set-buffer "*vc*") |
290 (goto-char (point-min)) | |
291 (when (not (zerop status)) | |
292 ;; Check checkin problem. | |
293 (cond | |
294 ((re-search-forward "Up-to-date check failed" nil t) | |
85184
025303f3b74d
(vc-mcvs-checkin): Use mapc rather than mapcar.
Glenn Morris <rgm@gnu.org>
parents:
85141
diff
changeset
|
295 (mapc (lambda (file) (vc-file-setprop file 'vc-state 'needs-merge)) |
81965
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
296 files) |
87139
f358a2fd5895
Fix buggy calls to `error'.
Deepak Goel <deego@gnufans.org>
parents:
86002
diff
changeset
|
297 (error "%s" (substitute-command-keys |
50646 | 298 (concat "Up-to-date check failed: " |
299 "type \\[vc-next-action] to merge in changes")))) | |
300 (t | |
301 (pop-to-buffer (current-buffer)) | |
302 (goto-char (point-min)) | |
303 (shrink-window-if-larger-than-buffer) | |
304 (error "Check-in failed")))) | |
85141
b16f7408cd3f
Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
85139
diff
changeset
|
305 ;; Single-file commit? Then update the revision by parsing the buffer. |
81965
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
306 ;; Otherwise we can't necessarily tell what goes with what; clear |
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
307 ;; its properties so they have to be refetched. |
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
308 (if (= (length files) 1) |
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
309 (vc-file-setprop |
85139
8ba0e30716a5
Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
82140
diff
changeset
|
310 (car files) 'vc-working-revision |
81965
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
311 (vc-parse-buffer "^\\(new\\|initial\\) revision: \\([0-9.]+\\)" 2)) |
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
312 (mapc (lambda (file) (vc-file-clearprops file)) files)) |
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
313 ;; Anyway, forget the checkout model of the file, because we might have |
50646 | 314 ;; guessed wrong when we found the file. After commit, we can |
315 ;; tell it from the permissions of the file (see | |
316 ;; vc-mcvs-checkout-model). | |
81965
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
317 (mapc (lambda (file) (vc-file-setprop file 'vc-checkout-model nil)) |
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
318 files) |
50646 | 319 |
320 ;; if this was an explicit check-in (does not include creation of | |
321 ;; a branch), remove the sticky tag. | |
322 (if (and rev (not (vc-mcvs-valid-symbolic-tag-name-p rev))) | |
81965
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
323 (vc-mcvs-command nil 0 files "update" "-A")))) |
50646 | 324 |
85139
8ba0e30716a5
Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
82140
diff
changeset
|
325 (defun vc-mcvs-find-revision (file rev buffer) |
50646 | 326 (apply 'vc-mcvs-command |
327 buffer 0 file | |
328 "-Q" ; suppress diagnostic output | |
329 "update" | |
330 (and rev (not (string= rev "")) | |
331 (concat "-r" rev)) | |
332 "-p" | |
50901
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
333 (vc-switches 'MCVS 'checkout))) |
50646 | 334 |
335 (defun vc-mcvs-checkout (file &optional editable rev) | |
336 (message "Checking out %s..." file) | |
337 (with-current-buffer (or (get-file-buffer file) (current-buffer)) | |
50901
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
338 (vc-call update file editable rev (vc-switches 'MCVS 'checkout))) |
50646 | 339 (vc-mode-line file) |
340 (message "Checking out %s...done" file)) | |
341 | |
342 (defun vc-mcvs-update (file editable rev switches) | |
343 (if (and (file-exists-p file) (not rev)) | |
344 ;; If no revision was specified, just make the file writable | |
345 ;; if necessary (using `cvs-edit' if requested). | |
346 (and editable (not (eq (vc-mcvs-checkout-model file) 'implicit)) | |
347 (if vc-mcvs-use-edit | |
348 (vc-mcvs-command nil 0 file "edit") | |
349 (set-file-modes file (logior (file-modes file) 128)) | |
350 (if (equal file buffer-file-name) (toggle-read-only -1)))) | |
85141
b16f7408cd3f
Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
85139
diff
changeset
|
351 ;; Check out a particular revision (or recreate the file). |
85139
8ba0e30716a5
Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
82140
diff
changeset
|
352 (vc-file-setprop file 'vc-working-revision nil) |
50646 | 353 (apply 'vc-mcvs-command nil 0 file |
354 (if editable "-w") | |
355 "update" | |
356 ;; default for verbose checkout: clear the sticky tag so | |
357 ;; that the actual update will get the head of the trunk | |
358 (if (or (not rev) (string= rev "")) | |
359 "-A" | |
360 (concat "-r" rev)) | |
361 switches))) | |
362 | |
50808
5a0d0a9219f3
(vc-mcvs-mode-line-string): Fix thinko.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50779
diff
changeset
|
363 (defun vc-mcvs-rename-file (old new) |
5a0d0a9219f3
(vc-mcvs-mode-line-string): Fix thinko.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50779
diff
changeset
|
364 (vc-mcvs-command nil 0 new "move" (file-relative-name old))) |
5a0d0a9219f3
(vc-mcvs-mode-line-string): Fix thinko.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50779
diff
changeset
|
365 |
50646 | 366 (defun vc-mcvs-revert (file &optional contents-done) |
85141
b16f7408cd3f
Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
85139
diff
changeset
|
367 "Revert FILE to the working revision it was based on." |
67573
123d22825421
(vc-mcvs-revert): Fix call to vc-default-revert.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
65680
diff
changeset
|
368 (vc-default-revert 'MCVS file contents-done) |
50646 | 369 (unless (eq (vc-checkout-model file) 'implicit) |
370 (if vc-mcvs-use-edit | |
371 (vc-mcvs-command nil 0 file "unedit") | |
372 ;; Make the file read-only by switching off all w-bits | |
373 (set-file-modes file (logand (file-modes file) 3950))))) | |
374 | |
85141
b16f7408cd3f
Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
85139
diff
changeset
|
375 (defun vc-mcvs-merge (file first-revision &optional second-revision) |
50646 | 376 "Merge changes into current working copy of FILE. |
85141
b16f7408cd3f
Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
85139
diff
changeset
|
377 The changes are between FIRST-REVISION and SECOND-REVISION." |
50646 | 378 (vc-mcvs-command nil 0 file |
379 "update" "-kk" | |
85141
b16f7408cd3f
Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
85139
diff
changeset
|
380 (concat "-j" first-revision) |
b16f7408cd3f
Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
85139
diff
changeset
|
381 (concat "-j" second-revision)) |
50646 | 382 (vc-file-setprop file 'vc-state 'edited) |
383 (with-current-buffer (get-buffer "*vc*") | |
384 (goto-char (point-min)) | |
385 (if (re-search-forward "conflicts during merge" nil t) | |
386 1 ; signal error | |
387 0))) ; signal success | |
388 | |
389 (defun vc-mcvs-merge-news (file) | |
390 "Merge in any new changes made to FILE." | |
391 (message "Merging changes into %s..." file) | |
85139
8ba0e30716a5
Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
82140
diff
changeset
|
392 ;; (vc-file-setprop file 'vc-working-revision nil) |
50646 | 393 (vc-file-setprop file 'vc-checkout-time 0) |
394 (vc-mcvs-command nil 0 file "update") | |
395 ;; Analyze the merge result reported by Meta-CVS, and set | |
396 ;; file properties accordingly. | |
397 (with-current-buffer (get-buffer "*vc*") | |
398 (goto-char (point-min)) | |
85141
b16f7408cd3f
Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
85139
diff
changeset
|
399 ;; get new working revision |
50646 | 400 (if (re-search-forward |
401 "^Merging differences between [0-9.]* and \\([0-9.]*\\) into" nil t) | |
85139
8ba0e30716a5
Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
82140
diff
changeset
|
402 (vc-file-setprop file 'vc-working-revision (match-string 1)) |
8ba0e30716a5
Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
82140
diff
changeset
|
403 (vc-file-setprop file 'vc-working-revision nil)) |
50646 | 404 ;; get file status |
405 (prog1 | |
406 (if (eq (buffer-size) 0) | |
407 0 ;; there were no news; indicate success | |
408 (if (re-search-forward | |
409 (concat "^\\([CMUP] \\)?" | |
410 ".*" | |
411 "\\( already contains the differences between \\)?") | |
412 nil t) | |
413 (cond | |
414 ;; Merge successful, we are in sync with repository now | |
415 ((or (match-string 2) | |
416 (string= (match-string 1) "U ") | |
417 (string= (match-string 1) "P ")) | |
418 (vc-file-setprop file 'vc-state 'up-to-date) | |
419 (vc-file-setprop file 'vc-checkout-time | |
420 (nth 5 (file-attributes file))) | |
421 0);; indicate success to the caller | |
422 ;; Merge successful, but our own changes are still in the file | |
423 ((string= (match-string 1) "M ") | |
424 (vc-file-setprop file 'vc-state 'edited) | |
425 0);; indicate success to the caller | |
426 ;; Conflicts detected! | |
427 (t | |
428 (vc-file-setprop file 'vc-state 'edited) | |
429 1);; signal the error to the caller | |
430 ) | |
431 (pop-to-buffer "*vc*") | |
432 (error "Couldn't analyze mcvs update result"))) | |
433 (message "Merging changes into %s...done" file)))) | |
434 | |
87432
315124ffb889
* (vc.el, vc-sccs.el, vc-rcs.el, vc-cs.el, vc-mcvs.el): Put
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
87424
diff
changeset
|
435 (defun vc-mcvs-modify-change-comment (files rev comment) |
315124ffb889
* (vc.el, vc-sccs.el, vc-rcs.el, vc-cs.el, vc-mcvs.el): Put
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
87424
diff
changeset
|
436 "Modify the change comments for FILES on a specified REV. |
315124ffb889
* (vc.el, vc-sccs.el, vc-rcs.el, vc-cs.el, vc-mcvs.el): Put
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
87424
diff
changeset
|
437 Will fail unless you have administrative privileges on the repo." |
315124ffb889
* (vc.el, vc-sccs.el, vc-rcs.el, vc-cs.el, vc-mcvs.el): Put
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
87424
diff
changeset
|
438 (vc-mcvs-command nil 0 files "rcs" (concat "-m" comment ":" rev))) |
315124ffb889
* (vc.el, vc-sccs.el, vc-rcs.el, vc-cs.el, vc-mcvs.el): Put
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
87424
diff
changeset
|
439 |
315124ffb889
* (vc.el, vc-sccs.el, vc-rcs.el, vc-cs.el, vc-mcvs.el): Put
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
87424
diff
changeset
|
440 |
50646 | 441 ;;; |
442 ;;; History functions | |
443 ;;; | |
444 | |
81965
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
445 (defun vc-mcvs-print-log (files &optional buffer) |
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
446 "Get change log associated with FILES." |
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
447 (let ((default-directory (vc-mcvs-root (car files)))) |
50952
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
448 ;; Run the command from the root dir so that `mcvs filt' returns |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
449 ;; valid relative names. |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
450 (vc-mcvs-command |
55815
a6b86fce5676
(vc-mcvs-print-log, vc-mcvs-diff): Add optional `buffer' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53639
diff
changeset
|
451 buffer |
86002
613df1ba1584
* vc.el (vc-diff-internal): Make the *vc-diff* buffer read only.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85462
diff
changeset
|
452 (if (vc-stay-local-p files) 'async 0) |
81965
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
453 files "log"))) |
50646 | 454 |
81965
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
455 (defun vc-mcvs-diff (files &optional oldvers newvers buffer) |
85141
b16f7408cd3f
Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
85139
diff
changeset
|
456 "Get a difference report using Meta-CVS between two revisions of FILES." |
59445
73a45ff77795
(vc-mcvs-diff): Don't diff asynchronously if vc-disable-async-diff is
André Spiegel <spiegel@gnu.org>
parents:
57914
diff
changeset
|
457 (let* ((async (and (not vc-disable-async-diff) |
86002
613df1ba1584
* vc.el (vc-diff-internal): Make the *vc-diff* buffer read only.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85462
diff
changeset
|
458 (vc-stay-local-p files))) |
50952
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
459 ;; Run the command from the root dir so that `mcvs filt' returns |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
460 ;; valid relative names. |
81965
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
461 (default-directory (vc-mcvs-root (car files))) |
50901
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
462 (status |
55815
a6b86fce5676
(vc-mcvs-print-log, vc-mcvs-diff): Add optional `buffer' arg.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53639
diff
changeset
|
463 (apply 'vc-mcvs-command (or buffer "*vc-diff*") |
50901
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
464 (if async 'async 1) |
81965
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
465 files "diff" |
50901
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
466 (and oldvers (concat "-r" oldvers)) |
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
467 (and newvers (concat "-r" newvers)) |
d3bb1d77a4b1
(vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-find-version)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50899
diff
changeset
|
468 (vc-switches 'MCVS 'diff)))) |
81965
88498b7a5bb5
Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
75347
diff
changeset
|
469 (if async 1 status))) ; async diff, pessimistic assumption. |
50646 | 470 |
85141
b16f7408cd3f
Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
85139
diff
changeset
|
471 (defun vc-mcvs-annotate-command (file buffer &optional revision) |
50646 | 472 "Execute \"mcvs annotate\" on FILE, inserting the contents in BUFFER. |
85141
b16f7408cd3f
Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
85139
diff
changeset
|
473 Optional arg REVISION is a revision to annotate from." |
50646 | 474 (vc-mcvs-command |
475 buffer | |
86002
613df1ba1584
* vc.el (vc-diff-internal): Make the *vc-diff* buffer read only.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
85462
diff
changeset
|
476 (if (vc-stay-local-p file) 'async 0) |
85141
b16f7408cd3f
Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
85139
diff
changeset
|
477 file "annotate" (if revision (concat "-r" revision))) |
57914
4afd8cdfd00e
(vc-mcvs-annotate-command): Delete extraneous lines from beginning of buffer.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
57095
diff
changeset
|
478 (with-current-buffer buffer |
4afd8cdfd00e
(vc-mcvs-annotate-command): Delete extraneous lines from beginning of buffer.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
57095
diff
changeset
|
479 (goto-char (point-min)) |
4afd8cdfd00e
(vc-mcvs-annotate-command): Delete extraneous lines from beginning of buffer.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
57095
diff
changeset
|
480 (re-search-forward "^[0-9]") |
4afd8cdfd00e
(vc-mcvs-annotate-command): Delete extraneous lines from beginning of buffer.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
57095
diff
changeset
|
481 (delete-region (point-min) (1- (point))))) |
50646 | 482 |
483 (defalias 'vc-mcvs-annotate-current-time 'vc-cvs-annotate-current-time) | |
484 (defalias 'vc-mcvs-annotate-time 'vc-cvs-annotate-time) | |
485 | |
486 ;;; | |
487 ;;; Snapshot system | |
488 ;;; | |
489 | |
490 (defun vc-mcvs-create-snapshot (dir name branchp) | |
85141
b16f7408cd3f
Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
85139
diff
changeset
|
491 "Assign to DIR's current revision a given NAME. |
50646 | 492 If BRANCHP is non-nil, the name is created as a branch (and the current |
493 workspace is immediately moved to that new branch)." | |
50952
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
494 (if (not branchp) |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
495 (vc-mcvs-command nil 0 dir "tag" "-c" name) |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
496 (vc-mcvs-command nil 0 dir "branch" name) |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
497 (vc-mcvs-command nil 0 dir "switch" name))) |
50646 | 498 |
499 (defun vc-mcvs-retrieve-snapshot (dir name update) | |
500 "Retrieve a snapshot at and below DIR. | |
501 NAME is the name of the snapshot; if it is empty, do a `cvs update'. | |
502 If UPDATE is non-nil, then update (resynch) any affected buffers." | |
503 (with-current-buffer (get-buffer-create "*vc*") | |
504 (let ((default-directory dir) | |
505 (sticky-tag)) | |
506 (erase-buffer) | |
507 (if (or (not name) (string= name "")) | |
508 (vc-mcvs-command t 0 nil "update") | |
509 (vc-mcvs-command t 0 nil "update" "-r" name) | |
510 (setq sticky-tag name)) | |
511 (when update | |
512 (goto-char (point-min)) | |
513 (while (not (eobp)) | |
514 (if (looking-at "\\([CMUP]\\) \\(.*\\)") | |
515 (let* ((file (expand-file-name (match-string 2) dir)) | |
516 (state (match-string 1)) | |
517 (buffer (find-buffer-visiting file))) | |
518 (when buffer | |
519 (cond | |
520 ((or (string= state "U") | |
521 (string= state "P")) | |
522 (vc-file-setprop file 'vc-state 'up-to-date) | |
85139
8ba0e30716a5
Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
82140
diff
changeset
|
523 (vc-file-setprop file 'vc-working-revision nil) |
50646 | 524 (vc-file-setprop file 'vc-checkout-time |
525 (nth 5 (file-attributes file)))) | |
526 ((or (string= state "M") | |
527 (string= state "C")) | |
528 (vc-file-setprop file 'vc-state 'edited) | |
85139
8ba0e30716a5
Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
82140
diff
changeset
|
529 (vc-file-setprop file 'vc-working-revision nil) |
50646 | 530 (vc-file-setprop file 'vc-checkout-time 0))) |
531 (vc-file-setprop file 'vc-mcvs-sticky-tag sticky-tag) | |
532 (vc-resynch-buffer file t t)))) | |
533 (forward-line 1)))))) | |
534 | |
535 | |
536 ;;; | |
537 ;;; Miscellaneous | |
538 ;;; | |
539 | |
50928
dc235df7e226
(vc-mcvs-stay-local): Remove unused var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50924
diff
changeset
|
540 (defalias 'vc-mcvs-make-version-backups-p 'vc-stay-local-p |
50646 | 541 "Return non-nil if version backups should be made for FILE.") |
542 (defalias 'vc-mcvs-check-headers 'vc-cvs-check-headers) | |
543 | |
544 | |
545 ;;; | |
546 ;;; Internal functions | |
547 ;;; | |
548 | |
549 (defun vc-mcvs-command (buffer okstatus file &rest flags) | |
550 "A wrapper around `vc-do-command' for use in vc-mcvs.el. | |
551 The difference to vc-do-command is that this function always invokes `mcvs', | |
552 and that it passes `vc-mcvs-global-switches' to it before FLAGS." | |
50952
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
553 (let ((args (append '("--error-terminate") |
50667
c475369e6995
(vc-mcvs-root): Cache the result.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50646
diff
changeset
|
554 (if (stringp vc-mcvs-global-switches) |
c475369e6995
(vc-mcvs-root): Cache the result.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50646
diff
changeset
|
555 (cons vc-mcvs-global-switches flags) |
50952
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
556 (append vc-mcvs-global-switches flags))))) |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
557 (if (not (member (car flags) '("diff" "log" "status"))) |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
558 ;; No need to filter: do it the easy way. |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
559 (apply 'vc-do-command buffer okstatus "mcvs" file args) |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
560 ;; We need to filter the output. |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
561 ;; The output of the filter uses filenames relative to the root, |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
562 ;; so we need to change the default-directory. |
53639
ee35e8c06381
(vc-mcvs-mode-line-string): Remove. Does not work.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
563 ;; (assert (equal default-directory (vc-mcvs-root file))) |
50952
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
564 (vc-do-command |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
565 buffer okstatus "sh" nil "-c" |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
566 (concat "mcvs " |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
567 (mapconcat |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
568 'shell-quote-argument |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
569 (append (remq nil args) |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
570 (if file (list (file-relative-name file)))) |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
571 " ") |
1731748fbe8c
(vc-mcvs-command): Filter output of `status'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50928
diff
changeset
|
572 " | mcvs filt"))))) |
50646 | 573 |
50928
dc235df7e226
(vc-mcvs-stay-local): Remove unused var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50924
diff
changeset
|
574 (defun vc-mcvs-repository-hostname (dirname) |
dc235df7e226
(vc-mcvs-stay-local): Remove unused var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50924
diff
changeset
|
575 (vc-cvs-repository-hostname (vc-mcvs-root dirname))) |
50646 | 576 |
577 (defun vc-mcvs-dir-state-heuristic (dir) | |
578 "Find the Meta-CVS state of all files in DIR, using only local information." | |
579 (with-temp-buffer | |
580 (vc-cvs-get-entries dir) | |
581 (goto-char (point-min)) | |
582 (while (not (eobp)) | |
583 ;; Meta-MCVS-removed files are not taken under VC control. | |
584 (when (looking-at "/\\([^/]*\\)/[^/-]") | |
585 (let ((file (expand-file-name (match-string 1) dir))) | |
586 (unless (vc-file-getprop file 'vc-state) | |
587 (vc-cvs-parse-entry file t)))) | |
588 (forward-line 1)))) | |
589 | |
590 (defalias 'vc-mcvs-valid-symbolic-tag-name-p 'vc-cvs-valid-symbolic-tag-name-p) | |
85141
b16f7408cd3f
Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
85139
diff
changeset
|
591 (defalias 'vc-mcvs-valid-revision-number-p 'vc-cvs-valid-revision-number-p) |
50646 | 592 |
593 (provide 'vc-mcvs) | |
52401 | 594 |
57095
74d256616e05
(vc-mcvs-root, vc-mcvs-registered): Use vc-find-root.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55815
diff
changeset
|
595 ;; arch-tag: a39c7c1c-5247-429d-88df-dd7187d2e704 |
50646 | 596 ;;; vc-mcvs.el ends here |