annotate lisp/vc.el @ 38442:086300440396

(vc-do-command): Autoload.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Mon, 16 Jul 2001 14:19:17 +0000
parents ee328ec2505c
children 396f97177ef1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33564
d8c822512b62 (vc-version-diff): Bind inhibit-read-only when inserting text.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33562
diff changeset
1 ;;; vc.el --- drive a version-control system from within Emacs
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2
35830
037d66685778 Copyright up-date.
Dave Love <fx@gnu.org>
parents: 35820
diff changeset
3 ;; Copyright (C) 1992,93,94,95,96,97,98,2000,2001 Free Software Foundation, Inc.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
5 ;; Author: FSF (see below for full credits)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
6 ;; Maintainer: Andre Spiegel <spiegel@gnu.org>
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
7
38442
086300440396 (vc-do-command): Autoload.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38374
diff changeset
8 ;; $Id: vc.el,v 1.300 2001/07/11 22:55:05 monnier Exp $
32093
5c36fa51ee96 (vc-revert-file): New function.
André Spiegel <spiegel@gnu.org>
parents: 32069
diff changeset
9
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
11
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
15 ;; any later version.
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
16
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
20 ;; GNU General Public License for more details.
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
21
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14141
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14141
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14141
diff changeset
25 ;; Boston, MA 02111-1307, USA.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
26
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
27 ;;; Credits:
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
28
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
29 ;; VC was initially designed and implemented by Eric S. Raymond
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
30 ;; <esr@snark.thyrsus.com>. Over the years, many people have
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
31 ;; contributed substantial amounts of work to VC. These include:
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
32 ;; Per Cederqvist <ceder@lysator.liu.se>
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
33 ;; Paul Eggert <eggert@twinsun.com>
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
34 ;; Sebastian Kremer <sk@thp.uni-koeln.de>
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
35 ;; Martin Lorentzson <martinl@gnu.org>
32910
3a5e5c74d3bb fix my email
Dave Love <fx@gnu.org>
parents: 32888
diff changeset
36 ;; Dave Love <fx@gnu.org>
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
37 ;; Stefan Monnier <monnier@cs.yale.edu>
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
38 ;; Andre Spiegel <spiegel@gnu.org>
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
39 ;; Richard Stallman <rms@gnu.org>
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
40 ;; ttn@netcom.com
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
41
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
42 ;;; Commentary:
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
43
2402
61e1f8813d03 (vc-comment-to-changelog): A useful vc-checkin hook, added.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2226
diff changeset
44 ;; This mode is fully documented in the Emacs user's manual.
61e1f8813d03 (vc-comment-to-changelog): A useful vc-checkin hook, added.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2226
diff changeset
45 ;;
10537
380605821cc9 (vc-do-command): Arrange for the default-directory variable
Richard M. Stallman <rms@gnu.org>
parents: 10475
diff changeset
46 ;; Supported version-control systems presently include SCCS, RCS, and CVS.
12943
10d0f42db2da (vc-directory): Kill existing vc-dired buffers for this directory.
André Spiegel <spiegel@gnu.org>
parents: 12926
diff changeset
47 ;;
10d0f42db2da (vc-directory): Kill existing vc-dired buffers for this directory.
André Spiegel <spiegel@gnu.org>
parents: 12926
diff changeset
48 ;; Some features will not work with old RCS versions. Where
10d0f42db2da (vc-directory): Kill existing vc-dired buffers for this directory.
André Spiegel <spiegel@gnu.org>
parents: 12926
diff changeset
49 ;; appropriate, VC finds out which version you have, and allows or
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
50 ;; disallows those features (stealing locks, for example, works only
12943
10d0f42db2da (vc-directory): Kill existing vc-dired buffers for this directory.
André Spiegel <spiegel@gnu.org>
parents: 12926
diff changeset
51 ;; from 5.6.2 onwards).
10537
380605821cc9 (vc-do-command): Arrange for the default-directory variable
Richard M. Stallman <rms@gnu.org>
parents: 10475
diff changeset
52 ;; Even initial checkins will fail if your RCS version is so old that ci
380605821cc9 (vc-do-command): Arrange for the default-directory variable
Richard M. Stallman <rms@gnu.org>
parents: 10475
diff changeset
53 ;; doesn't understand -t-; this has been known to happen to people running
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
54 ;; NExTSTEP 3.0.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
55 ;;
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
56 ;; You can support the RCS -x option by customizing vc-rcs-master-templates.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
57 ;;
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
58 ;; Proper function of the SCCS diff commands requires the shellscript vcdiff
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
59 ;; to be installed somewhere on Emacs's path for executables.
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
60 ;;
2402
61e1f8813d03 (vc-comment-to-changelog): A useful vc-checkin hook, added.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2226
diff changeset
61 ;; If your site uses the ChangeLog convention supported by Emacs, the
2464
667050db93ca (vc-comment-to-change-log): Renamed from vc-comment-to-changelog.
Roland McGrath <roland@gnu.org>
parents: 2419
diff changeset
62 ;; function vc-comment-to-change-log should prove a useful checkin hook.
2402
61e1f8813d03 (vc-comment-to-changelog): A useful vc-checkin hook, added.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2226
diff changeset
63 ;;
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
64 ;; The vc code maintains some internal state in order to reduce expensive
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
65 ;; version-control operations to a minimum. Some names are only computed
2750
6f340eabf13f Improve doc strings and prompt strings.
Richard M. Stallman <rms@gnu.org>
parents: 2745
diff changeset
66 ;; once. If you perform version control operations with RCS/SCCS/CVS while
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
67 ;; vc's back is turned, or move/rename master files while vc is running,
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
68 ;; vc may get seriously confused. Don't do these things!
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
69 ;;
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
70 ;; Developer's notes on some concurrency issues are included at the end of
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
71 ;; the file.
35199
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
72 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
73 ;; ADDING SUPPORT FOR OTHER BACKENDS
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
74 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
75 ;; VC can use arbitrary version control systems as a backend. To add
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
76 ;; support for a new backend named SYS, write a library vc-sys.el that
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
77 ;; contains functions of the form `vc-sys-...' (note that SYS is in lower
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
78 ;; case for the function and library names). VC will use that library if
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
79 ;; you put the symbol SYS somewhere into the list of
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
80 ;; `vc-handled-backends'. Then, for example, if `vc-sys-registered'
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
81 ;; returns non-nil for a file, all SYS-specific versions of VC commands
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
82 ;; will be available for that file.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
83 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
84 ;; VC keeps some per-file information in the form of properties (see
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
85 ;; vc-file-set/getprop in vc-hooks.el). The backend-specific functions
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
86 ;; do not generally need to be aware of these properties. For example,
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
87 ;; `vc-sys-workfile-version' should compute the workfile version and
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
88 ;; return it; it should not look it up in the property, and it needn't
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
89 ;; store it there either. However, if a backend-specific function does
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
90 ;; store a value in a property, that value takes precedence over any
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
91 ;; value that the generic code might want to set (check for uses of
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
92 ;; the macro `with-vc-properties' in vc.el).
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
93 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
94 ;; In the list of functions below, each identifier needs to be prepended
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
95 ;; with `vc-sys-'. Some of the functions are mandatory (marked with a
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
96 ;; `*'), others are optional (`-').
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
97 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
98 ;; STATE-QUERYING FUNCTIONS
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
99 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
100 ;; * registered (file)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
101 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
102 ;; Return non-nil if FILE is registered in this backend.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
103 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
104 ;; * state (file)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
105 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
106 ;; Return the current version control state of FILE. For a list of
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
107 ;; possible values, see `vc-state'. This function should do a full and
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
108 ;; reliable state computation; it is usually called immediately after
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
109 ;; C-x v v. If you want to use a faster heuristic when visiting a
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
110 ;; file, put that into `state-heuristic' below.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
111 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
112 ;; - state-heuristic (file)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
113 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
114 ;; If provided, this function is used to estimate the version control
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
115 ;; state of FILE at visiting time. It should be considerably faster
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
116 ;; than the implementation of `state'. For a list of possible values,
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
117 ;; see the doc string of `vc-state'.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
118 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
119 ;; - dir-state (dir)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
120 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
121 ;; If provided, this function is used to find the version control state
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
122 ;; of all files in DIR in a fast way. The function should not return
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
123 ;; anything, but rather store the files' states into the corresponding
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
124 ;; `vc-state' properties.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
125 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
126 ;; * workfile-version (file)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
127 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
128 ;; Return the current workfile version of FILE.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
129 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
130 ;; - latest-on-branch-p (file)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
131 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
132 ;; Return non-nil if the current workfile version of FILE is the latest
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
133 ;; on its branch. The default implementation always returns t, which
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
134 ;; means that working with non-current versions is not supported by
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
135 ;; default.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
136 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
137 ;; * checkout-model (file)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
138 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
139 ;; Indicate whether FILE needs to be "checked out" before it can be
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
140 ;; edited. See `vc-checkout-model' for a list of possible values.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
141 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
142 ;; - workfile-unchanged-p (file)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
143 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
144 ;; Return non-nil if FILE is unchanged from its current workfile
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
145 ;; version. This function should do a brief comparison of FILE's
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
146 ;; contents with those of the master version. If the backend does not
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
147 ;; have such a brief-comparison feature, the default implementation of
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
148 ;; this function can be used, which delegates to a full
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
149 ;; vc-BACKEND-diff.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
150 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
151 ;; - mode-line-string (file)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
152 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
153 ;; If provided, this function should return the VC-specific mode line
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
154 ;; string for FILE. The default implementation deals well with all
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
155 ;; states that `vc-state' can return.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
156 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
157 ;; - dired-state-info (file)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
158 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
159 ;; Translate the `vc-state' property of FILE into a string that can be
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
160 ;; used in a vc-dired buffer. The default implementation deals well
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
161 ;; with all states that `vc-state' can return.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
162 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
163 ;; STATE-CHANGING FUNCTIONS
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
164 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
165 ;; * register (file &optional rev comment)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
166 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
167 ;; Register FILE in this backend. Optionally, an initial revision REV
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
168 ;; and an initial description of the file, COMMENT, may be specified.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
169 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
170 ;; - responsible-p (file)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
171 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
172 ;; Return non-nil if this backend considers itself "responsible" for
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
173 ;; FILE, which can also be a directory. This function is used to find
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
174 ;; out what backend to use for registration of new files and for things
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
175 ;; like change log generation. The default implementation always
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
176 ;; returns nil.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
177 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
178 ;; - could-register (file)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
179 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
180 ;; Return non-nil if FILE could be registered under this backend. The
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
181 ;; default implementation always returns t.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
182 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
183 ;; - receive-file (file rev)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
184 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
185 ;; Let this backend "receive" a file that is already registered under
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
186 ;; another backend. The default implementation simply calls `register'
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
187 ;; for FILE, but it can be overridden to do something more specific,
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
188 ;; e.g. keep revision numbers consistent or choose editing modes for
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
189 ;; FILE that resemble those of the other backend.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
190 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
191 ;; - unregister (file)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
192 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
193 ;; Unregister FILE from this backend. This is only needed if this
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
194 ;; backend may be used as a "more local" backend for temporary editing.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
195 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
196 ;; * checkin (file rev comment)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
197 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
198 ;; Commit changes in FILE to this backend. If REV is non-nil, that
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
199 ;; should become the new revision number. COMMENT is used as a
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
200 ;; check-in comment.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
201 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
202 ;; * checkout (file &optional editable rev destfile)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
203 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
204 ;; Check out revision REV of FILE into the working area. If EDITABLE
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
205 ;; is non-nil, FILE should be writable by the user and if locking is
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
206 ;; used for FILE, a lock should also be set. If REV is non-nil, that
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
207 ;; is the revision to check out (default is current workfile version);
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
208 ;; if REV is the empty string, that means to check out the head of the
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
209 ;; trunk. If optional arg DESTFILE is given, it is an alternate
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
210 ;; filename to write the contents to.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
211 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
212 ;; * revert (file)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
213 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
214 ;; Revert FILE back to the current workfile version.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
215 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
216 ;; - cancel-version (file editable)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
217 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
218 ;; Cancel the current workfile version of FILE, i.e. remove it from the
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
219 ;; master. EDITABLE non-nil means that FILE should be writable
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
220 ;; afterwards, and if locking is used for FILE, then a lock should also
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
221 ;; be set. If this function is not provided, trying to cancel a
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
222 ;; version is caught as an error.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
223 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
224 ;; - merge (file rev1 rev2)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
225 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
226 ;; Merge the changes between REV1 and REV2 into the current working file.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
227 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
228 ;; - merge-news (file)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
229 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
230 ;; Merge recent changes from the current branch into FILE.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
231 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
232 ;; - steal-lock (file &optional version)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
233 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
234 ;; Steal any lock on the current workfile version of FILE, or on
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
235 ;; VERSION if that is provided. This function is only needed if
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
236 ;; locking is used for files under this backend, and if files can
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
237 ;; indeed be locked by other users.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
238 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
239 ;; HISTORY FUNCTIONS
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
240 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
241 ;; * print-log (file)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
242 ;;
36710
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
243 ;; Insert the revision log of FILE into the *vc* buffer.
35199
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
244 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
245 ;; - show-log-entry (version)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
246 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
247 ;; If provided, search the log entry for VERSION in the current buffer,
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
248 ;; and make sure it is displayed in the buffer's window. The default
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
249 ;; implementation of this function works for RCS-style logs.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
250 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
251 ;; - wash-log (file)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
252 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
253 ;; Remove all non-comment information from the output of print-log. The
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
254 ;; default implementation of this function works for RCS-style logs.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
255 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
256 ;; - logentry-check ()
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
257 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
258 ;; If defined, this function is run to find out whether the user
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
259 ;; entered a valid log entry for check-in. The log entry is in the
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
260 ;; current buffer, and if it is not a valid one, the function should
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
261 ;; throw an error.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
262 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
263 ;; - comment-history (file)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
264 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
265 ;; Return a string containing all log entries that were made for FILE.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
266 ;; This is used for transferring a file from one backend to another,
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
267 ;; retaining comment information. The default implementation of this
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
268 ;; function does this by calling print-log and then wash-log, and
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
269 ;; returning the resulting buffer contents as a string.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
270 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
271 ;; - update-changelog (files)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
272 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
273 ;; Using recent log entries, create ChangeLog entries for FILES, or for
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
274 ;; all files at or below the default-directory if FILES is nil. The
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
275 ;; default implementation runs rcs2log, which handles RCS- and
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
276 ;; CVS-style logs.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
277 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
278 ;; * diff (file &optional rev1 rev2)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
279 ;;
36710
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
280 ;; Insert the diff for FILE into the *vc-diff* buffer. If REV1 and REV2
35199
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
281 ;; are non-nil, report differences from REV1 to REV2. If REV1 is nil,
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
282 ;; use the current workfile version (as found in the repository) as the
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
283 ;; older version; if REV2 is nil, use the current workfile contents as
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
284 ;; the newer version. This function should return a status of either 0
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
285 ;; (no differences found), or 1 (either non-empty diff or the diff is
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
286 ;; run asynchronously).
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
287 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
288 ;; - annotate-command (file buf rev)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
289 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
290 ;; If this function is provided, it should produce an annotated version
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
291 ;; of FILE in BUF, relative to version REV. This is currently only
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
292 ;; implemented for CVS, using the `cvs annotate' command.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
293 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
294 ;; - annotate-difference (point)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
295 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
296 ;; Only required if `annotate-command' is defined for the backend.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
297 ;; Return the difference between the age of the line at point and the
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
298 ;; current time. Return NIL if there is no more comparison to be made
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
299 ;; in the buffer. Return value as defined for `current-time'. You can
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
300 ;; safely assume that point is placed at the beginning of each line,
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
301 ;; starting at `point-min'. The buffer that point is placed in is the
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
302 ;; Annotate output, as defined by the relevant backend.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
303 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
304 ;; SNAPSHOT SYSTEM
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
305 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
306 ;; - create-snapshot (dir name branchp)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
307 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
308 ;; Take a snapshot of the current state of files under DIR and name it
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
309 ;; NAME. This should make sure that files are up-to-date before
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
310 ;; proceeding with the action. DIR can also be a file and if BRANCHP
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
311 ;; is specified, NAME should be created as a branch and DIR should be
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
312 ;; checked out under this new branch. The default implementation does
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
313 ;; not support branches but does a sanity check, a tree traversal and
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
314 ;; for each file calls `assign-name'.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
315 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
316 ;; - assign-name (file name)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
317 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
318 ;; Give name NAME to the current version of FILE, assuming it is
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
319 ;; up-to-date. Only used by the default version of `create-snapshot'.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
320 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
321 ;; - retrieve-snapshot (dir name update)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
322 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
323 ;; Retrieve a named snapshot of all registered files at or below DIR.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
324 ;; If UPDATE is non-nil, then update buffers of any files in the
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
325 ;; snapshot that are currently visited. The default implementation
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
326 ;; does a sanity check whether there aren't any uncommitted changes at
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
327 ;; or below DIR, and then performs a tree walk, using the `checkout'
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
328 ;; function to retrieve the corresponding versions.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
329 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
330 ;; MISCELLANEOUS
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
331 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
332 ;; - make-version-backups-p (file)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
333 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
334 ;; Return non-nil if unmodified repository versions of FILE should be
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
335 ;; backed up locally. If this is done, VC can perform `diff' and
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
336 ;; `revert' operations itself, without calling the backend system. The
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
337 ;; default implementation always returns nil.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
338 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
339 ;; - check-headers ()
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
340 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
341 ;; Return non-nil if the current buffer contains any version headers.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
342 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
343 ;; - clear-headers ()
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
344 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
345 ;; In the current buffer, reset all version headers to their unexpanded
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
346 ;; form. This function should be provided if the state-querying code
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
347 ;; for this backend uses the version headers to determine the state of
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
348 ;; a file. This function will then be called whenever VC changes the
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
349 ;; version control state in such a way that the headers would give
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
350 ;; wrong information.
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
351 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
352 ;; - rename-file (old new)
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
353 ;;
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
354 ;; Rename file OLD to NEW, both in the working area and in the
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
355 ;; repository. If this function is not provided, the command
aa38d1de35cb Added documentation for backend interface.
André Spiegel <spiegel@gnu.org>
parents: 35131
diff changeset
356 ;; `vc-rename-file' will signal an error.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
357
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
358 ;;; Code:
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
359
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
360 (require 'vc-hooks)
2580
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
361 (require 'ring)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
362 (eval-when-compile
32058
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
363 (require 'cl)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
364 (require 'compile)
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
365 (require 'dired) ; for dired-map-over-marks macro
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
366 (require 'dired-aux)) ; for dired-kill-{line,tree}
2580
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
367
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
368 (if (not (assoc 'vc-parent-buffer minor-mode-alist))
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
369 (setq minor-mode-alist
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
370 (cons '(vc-parent-buffer vc-parent-buffer-name)
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
371 minor-mode-alist)))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
372
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
373 ;; General customization
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
374
17672
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
375 (defgroup vc nil
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
376 "Version-control system in Emacs."
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
377 :group 'tools)
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
378
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
379 (defcustom vc-suppress-confirm nil
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
380 "*If non-nil, treat user as expert; suppress yes-no prompts on some things."
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
381 :type 'boolean
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
382 :group 'vc)
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
383
24477
b3b029a06e34 (vc-delete-logbuf-window): New var.
Karl Heuer <kwzh@gnu.org>
parents: 24139
diff changeset
384 (defcustom vc-delete-logbuf-window t
b3b029a06e34 (vc-delete-logbuf-window): New var.
Karl Heuer <kwzh@gnu.org>
parents: 24139
diff changeset
385 "*If non-nil, delete the *VC-log* buffer and window after each logical action.
b3b029a06e34 (vc-delete-logbuf-window): New var.
Karl Heuer <kwzh@gnu.org>
parents: 24139
diff changeset
386 If nil, bury that buffer instead.
b3b029a06e34 (vc-delete-logbuf-window): New var.
Karl Heuer <kwzh@gnu.org>
parents: 24139
diff changeset
387 This is most useful if you have multiple windows on a frame and would like to
b3b029a06e34 (vc-delete-logbuf-window): New var.
Karl Heuer <kwzh@gnu.org>
parents: 24139
diff changeset
388 preserve the setting."
b3b029a06e34 (vc-delete-logbuf-window): New var.
Karl Heuer <kwzh@gnu.org>
parents: 24139
diff changeset
389 :type 'boolean
b3b029a06e34 (vc-delete-logbuf-window): New var.
Karl Heuer <kwzh@gnu.org>
parents: 24139
diff changeset
390 :group 'vc)
b3b029a06e34 (vc-delete-logbuf-window): New var.
Karl Heuer <kwzh@gnu.org>
parents: 24139
diff changeset
391
17672
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
392 (defcustom vc-initial-comment nil
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
393 "*If non-nil, prompt for initial comment when a file is registered."
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
394 :type 'boolean
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
395 :group 'vc)
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
396
20988
9a6179e6eff6 (vc-default-init-version): New variable.
André Spiegel <spiegel@gnu.org>
parents: 20977
diff changeset
397 (defcustom vc-default-init-version "1.1"
9a6179e6eff6 (vc-default-init-version): New variable.
André Spiegel <spiegel@gnu.org>
parents: 20977
diff changeset
398 "*A string used as the default version number when a new file is registered.
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
399 This can be overridden by giving a prefix argument to \\[vc-register]."
20988
9a6179e6eff6 (vc-default-init-version): New variable.
André Spiegel <spiegel@gnu.org>
parents: 20977
diff changeset
400 :type 'string
21669
9861518505cb *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 21560
diff changeset
401 :group 'vc
9861518505cb *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 21560
diff changeset
402 :version "20.3")
20988
9a6179e6eff6 (vc-default-init-version): New variable.
André Spiegel <spiegel@gnu.org>
parents: 20977
diff changeset
403
17672
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
404 (defcustom vc-command-messages nil
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
405 "*If non-nil, display run messages from back-end commands."
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
406 :type 'boolean
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
407 :group 'vc)
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
408
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
409 (defcustom vc-checkin-switches nil
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
410 "*A string or list of strings specifying extra switches for checkin.
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
411 These are passed to the checkin program by \\[vc-checkin]."
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
412 :type '(choice (const :tag "None" nil)
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
413 (string :tag "Argument String")
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
414 (repeat :tag "Argument List"
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
415 :value ("")
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
416 string))
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
417 :group 'vc)
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
418
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
419 (defcustom vc-checkout-switches nil
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
420 "*A string or list of strings specifying extra switches for checkout.
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
421 These are passed to the checkout program by \\[vc-checkout]."
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
422 :type '(choice (const :tag "None" nil)
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
423 (string :tag "Argument String")
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
424 (repeat :tag "Argument List"
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
425 :value ("")
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
426 string))
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
427 :group 'vc)
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
428
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
429 (defcustom vc-register-switches nil
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
430 "*A string or list of strings; extra switches for registering a file.
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
431 These are passed to the checkin program by \\[vc-register]."
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
432 :type '(choice (const :tag "None" nil)
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
433 (string :tag "Argument String")
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
434 (repeat :tag "Argument List"
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
435 :value ("")
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
436 string))
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
437 :group 'vc)
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
438
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
439 (defcustom vc-dired-listing-switches "-al"
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
440 "*Switches passed to `ls' for vc-dired. MUST contain the `l' option."
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
441 :type 'string
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
442 :group 'vc
31565
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
443 :version "21.1")
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
444
22437
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
445 (defcustom vc-dired-recurse t
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
446 "*If non-nil, show directory trees recursively in VC Dired."
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
447 :type 'boolean
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
448 :group 'vc
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
449 :version "20.3")
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
450
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
451 (defcustom vc-dired-terse-display t
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
452 "*If non-nil, show only locked files in VC Dired."
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
453 :type 'boolean
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
454 :group 'vc
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
455 :version "20.3")
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
456
17672
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
457 (defcustom vc-directory-exclusion-list '("SCCS" "RCS" "CVS")
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
458 "*List of directory names to be ignored while recursively walking file trees."
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
459 :type '(repeat string)
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
460 :group 'vc)
1335
d649d430148d (vc-checkin-switches): New defvar.
Roland McGrath <roland@gnu.org>
parents: 1243
diff changeset
461
2580
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
462 (defconst vc-maximum-comment-ring-size 32
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
463 "Maximum number of saved comments in the comment ring.")
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
464
38374
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
465 ;; This is duplicated in diff.el.
2705
b4587e7ff4e5 (diff-switches): Define var here as well as in diff.el.
Richard M. Stallman <rms@gnu.org>
parents: 2692
diff changeset
466 (defvar diff-switches "-c"
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
467 "*A string or list of strings specifying switches to be passed to diff.")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
468
35820
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
469 (defcustom vc-diff-switches nil
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
470 "*A string or list of strings specifying switches for diff under VC.
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
471 There is also an option vc-BACKEND-diff-switches for each BACKEND that
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
472 VC can handle."
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
473 :type '(choice (const :tag "None" nil)
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
474 (string :tag "Argument String")
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
475 (repeat :tag "Argument List"
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
476 :value ("")
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
477 string))
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
478 :group 'vc
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
479 :version "21.1")
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
480
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
481 ;;;###autoload
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
482 (defcustom vc-checkin-hook nil
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
483 "*Normal hook (list of functions) run after a checkin is done.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
484 See `run-hooks'."
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
485 :type 'hook
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
486 :options '(vc-comment-to-change-log)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
487 :group 'vc)
2705
b4587e7ff4e5 (diff-switches): Define var here as well as in diff.el.
Richard M. Stallman <rms@gnu.org>
parents: 2692
diff changeset
488
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
489 ;;;###autoload
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
490 (defcustom vc-before-checkin-hook nil
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
491 "*Normal hook (list of functions) run before a file gets checked in.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
492 See `run-hooks'."
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
493 :type 'hook
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
494 :group 'vc)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
495
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
496 (defcustom vc-logentry-check-hook nil
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
497 "*Normal hook run by `vc-backend-logentry-check'.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
498 Use this to impose your own rules on the entry in addition to any the
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
499 version control backend imposes itself."
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
500 :type 'hook
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
501 :group 'vc)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
502
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
503 ;; Annotate customization
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
504 (defcustom vc-annotate-color-map
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
505 '(( 26.3672 . "#FF0000")
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
506 ( 52.7344 . "#FF3800")
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
507 ( 79.1016 . "#FF7000")
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
508 (105.4688 . "#FFA800")
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
509 (131.8359 . "#FFE000")
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
510 (158.2031 . "#E7FF00")
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
511 (184.5703 . "#AFFF00")
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
512 (210.9375 . "#77FF00")
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
513 (237.3047 . "#3FFF00")
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
514 (263.6719 . "#07FF00")
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
515 (290.0391 . "#00FF31")
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
516 (316.4063 . "#00FF69")
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
517 (342.7734 . "#00FFA1")
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
518 (369.1406 . "#00FFD9")
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
519 (395.5078 . "#00EEFF")
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
520 (421.8750 . "#00B6FF")
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
521 (448.2422 . "#007EFF"))
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
522 "*Association list of age versus color, for \\[vc-annotate].
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
523 Ages are given in units of 2**-16 seconds.
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
524 Default is eighteen steps using a twenty day increment."
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
525 :type 'alist
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
526 :group 'vc)
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
527
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
528 (defcustom vc-annotate-very-old-color "#0046FF"
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
529 "*Color for lines older than CAR of last cons in `vc-annotate-color-map'."
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
530 :type 'string
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
531 :group 'vc)
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
532
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
533 (defcustom vc-annotate-background "black"
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
534 "*Background color for \\[vc-annotate].
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
535 Default color is used if nil."
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
536 :type 'string
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
537 :group 'vc)
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
538
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
539 (defcustom vc-annotate-menu-elements '(2 0.5 0.1 0.01)
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
540 "*Menu elements for the mode-specific menu of VC-Annotate mode.
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
541 List of factors, used to expand/compress the time scale. See `vc-annotate'."
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
542 :type '(repeat number)
17672
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
543 :group 'vc)
1227
d07030650283 (vc-checkin-hook): New user hook variable.
Roland McGrath <roland@gnu.org>
parents: 1226
diff changeset
544
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
545 ;; vc-annotate functionality (CVS only).
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
546 (defvar vc-annotate-mode nil
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
547 "Variable indicating if VC-Annotate mode is active.")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
548
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
549 (defvar vc-annotate-mode-map
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
550 (let ((m (make-sparse-keymap)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
551 (define-key m [menu-bar] (make-sparse-keymap "VC-Annotate"))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
552 m)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
553 "Local keymap used for VC-Annotate mode.")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
554
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
555 (defvar vc-annotate-mode-menu nil
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
556 "Local keymap used for VC-Annotate mode's menu bar menu.")
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
557
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
558 ;; Header-insertion hair
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
559
17672
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
560 (defcustom vc-static-header-alist
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
561 '(("\\.c$" .
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
562 "\n#ifndef lint\nstatic char vcid[] = \"\%s\";\n#endif /* lint */\n"))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
563 "*Associate static header string templates with file types.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
564 A \%s in the template is replaced with the first string associated with
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
565 the file's version control type in `vc-header-alist'."
17672
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
566 :type '(repeat (cons :format "%v"
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
567 (regexp :tag "File Type")
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
568 (string :tag "Header String")))
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
569 :group 'vc)
2226
b2216b3b8f57 (vc-header-strings) Name changed to vc-header-alist, to match the
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2219
diff changeset
570
17672
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
571 (defcustom vc-comment-alist
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
572 '((nroff-mode ".\\\"" ""))
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
573 "*Special comment delimiters to be used in generating vc headers only.
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
574 Add an entry in this list if you need to override the normal `comment-start'
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
575 and `comment-end' variables. This will only be necessary if the mode language
17672
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
576 is sensitive to blank lines."
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
577 :type '(repeat (list :format "%v"
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
578 (symbol :tag "Mode")
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
579 (string :tag "Comment Start")
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
580 (string :tag "Comment End")))
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
581 :group 'vc)
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
582
5201
b27badfb4040 (vc-buffer-sync): Signal error if user says no.
Richard M. Stallman <rms@gnu.org>
parents: 5015
diff changeset
583 ;; Default is to be extra careful for super-user.
31565
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
584 ;; TODO: This variable is no longer used; the corresponding checks
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
585 ;; are always done now. If that turns out to be fast enough,
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
586 ;; the variable can be obsoleted.
17672
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
587 (defcustom vc-checkout-carefully (= (user-uid) 0)
5201
b27badfb4040 (vc-buffer-sync): Signal error if user says no.
Richard M. Stallman <rms@gnu.org>
parents: 5015
diff changeset
588 "*Non-nil means be extra-careful in checkout.
b27badfb4040 (vc-buffer-sync): Signal error if user says no.
Richard M. Stallman <rms@gnu.org>
parents: 5015
diff changeset
589 Verify that the file really is not locked
17672
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
590 and that its contents match what the master file says."
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
591 :type 'boolean
3e14521699ff Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17410
diff changeset
592 :group 'vc)
5201
b27badfb4040 (vc-buffer-sync): Signal error if user says no.
Richard M. Stallman <rms@gnu.org>
parents: 5015
diff changeset
593
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
594
38374
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
595 ;; The main keymap
12943
10d0f42db2da (vc-directory): Kill existing vc-dired buffers for this directory.
André Spiegel <spiegel@gnu.org>
parents: 12926
diff changeset
596
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
597 ;; Initialization code, to be done just once at load-time
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
598 (defvar vc-log-mode-map
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
599 (let ((map (make-sparse-keymap)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
600 (define-key map "\M-n" 'vc-next-comment)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
601 (define-key map "\M-p" 'vc-previous-comment)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
602 (define-key map "\M-r" 'vc-comment-search-reverse)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
603 (define-key map "\M-s" 'vc-comment-search-forward)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
604 (define-key map "\C-c\C-c" 'vc-finish-logentry)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
605 map))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
606 ;; Compatibility with old name. Should we bother ?
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
607 (defvar vc-log-entry-mode vc-log-mode-map)
12943
10d0f42db2da (vc-directory): Kill existing vc-dired buffers for this directory.
André Spiegel <spiegel@gnu.org>
parents: 12926
diff changeset
608
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
609
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
610 ;; Variables the user doesn't need to know about.
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
611 (defvar vc-log-operation nil)
1227
d07030650283 (vc-checkin-hook): New user hook variable.
Roland McGrath <roland@gnu.org>
parents: 1226
diff changeset
612 (defvar vc-log-after-operation-hook nil)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
613 (defvar vc-annotate-buffers nil
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
614 "Alist of current \"Annotate\" buffers and their corresponding backends.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
615 The keys are \(BUFFER . BACKEND\). See also `vc-annotate-get-backend'.")
8350
b3afbc67aa6b Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 8349
diff changeset
616 ;; In a log entry buffer, this is a local variable
b3afbc67aa6b Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 8349
diff changeset
617 ;; that points to the buffer for which it was made
b3afbc67aa6b Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 8349
diff changeset
618 ;; (either a file, or a VC dired buffer).
2402
61e1f8813d03 (vc-comment-to-changelog): A useful vc-checkin hook, added.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2226
diff changeset
619 (defvar vc-parent-buffer nil)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
620 (put 'vc-parent-buffer 'permanent-local t)
2580
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
621 (defvar vc-parent-buffer-name nil)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
622 (put 'vc-parent-buffer-name 'permanent-local t)
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
623
1494
64f5e84c822b (vc-admin): Pass t as noquery arg to vc-resynch-window.
Richard M. Stallman <rms@gnu.org>
parents: 1478
diff changeset
624 (defvar vc-log-file)
64f5e84c822b (vc-admin): Pass t as noquery arg to vc-resynch-window.
Richard M. Stallman <rms@gnu.org>
parents: 1478
diff changeset
625 (defvar vc-log-version)
64f5e84c822b (vc-admin): Pass t as noquery arg to vc-resynch-window.
Richard M. Stallman <rms@gnu.org>
parents: 1478
diff changeset
626
2580
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
627 (defvar vc-dired-mode nil)
2490
70d00ecacc0d (vc-directory. vc-start-entry, vc-next-action, vc-next-action-on-file):
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2464
diff changeset
628 (make-variable-buffer-local 'vc-dired-mode)
70d00ecacc0d (vc-directory. vc-start-entry, vc-next-action, vc-next-action-on-file):
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2464
diff changeset
629
15036
e782b987fbdb (vc-comment-ring): Initialise using make-ring.
Richard M. Stallman <rms@gnu.org>
parents: 14855
diff changeset
630 (defvar vc-comment-ring (make-ring vc-maximum-comment-ring-size))
2580
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
631 (defvar vc-comment-ring-index nil)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
632 (defvar vc-last-comment-match "")
12943
10d0f42db2da (vc-directory): Kill existing vc-dired buffers for this directory.
André Spiegel <spiegel@gnu.org>
parents: 12926
diff changeset
633
38374
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
634 ;; functions that operate on RCS revision numbers. This code should
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
635 ;; also be moved into the backends. It stays for now, however, since
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
636 ;; it is used in code below.
12872
857663042672 (vc-revert-buffer1): Split part of the function into vc-buffer-context
André Spiegel <spiegel@gnu.org>
parents: 12819
diff changeset
637 (defun vc-trunk-p (rev)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
638 "Return t if REV is a revision on the trunk."
12872
857663042672 (vc-revert-buffer1): Split part of the function into vc-buffer-context
André Spiegel <spiegel@gnu.org>
parents: 12819
diff changeset
639 (not (eq nil (string-match "\\`[0-9]+\\.[0-9]+\\'" rev))))
857663042672 (vc-revert-buffer1): Split part of the function into vc-buffer-context
André Spiegel <spiegel@gnu.org>
parents: 12819
diff changeset
640
21368
37b978fc46cb (vc-merge, vc-backend-merge): New functions.
André Spiegel <spiegel@gnu.org>
parents: 21366
diff changeset
641 (defun vc-branch-p (rev)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
642 "Return t if REV is a branch revision."
21368
37b978fc46cb (vc-merge, vc-backend-merge): New functions.
André Spiegel <spiegel@gnu.org>
parents: 21366
diff changeset
643 (not (eq nil (string-match "\\`[0-9]+\\(\\.[0-9]+\\.[0-9]+\\)*\\'" rev))))
37b978fc46cb (vc-merge, vc-backend-merge): New functions.
André Spiegel <spiegel@gnu.org>
parents: 21366
diff changeset
644
12872
857663042672 (vc-revert-buffer1): Split part of the function into vc-buffer-context
André Spiegel <spiegel@gnu.org>
parents: 12819
diff changeset
645 (defun vc-branch-part (rev)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
646 "Return the branch part of a revision number REV."
12872
857663042672 (vc-revert-buffer1): Split part of the function into vc-buffer-context
André Spiegel <spiegel@gnu.org>
parents: 12819
diff changeset
647 (substring rev 0 (string-match "\\.[0-9]+\\'" rev)))
857663042672 (vc-revert-buffer1): Split part of the function into vc-buffer-context
André Spiegel <spiegel@gnu.org>
parents: 12819
diff changeset
648
19055
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
649 (defun vc-minor-part (rev)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
650 "Return the minor version number of a revision number REV."
19055
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
651 (string-match "[0-9]+\\'" rev)
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
652 (substring rev (match-beginning 0) (match-end 0)))
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
653
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
654 (defun vc-previous-version (rev)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
655 "Guess the version number immediately preceding REV."
19055
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
656 (let ((branch (vc-branch-part rev))
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
657 (minor-num (string-to-number (vc-minor-part rev))))
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
658 (if (> minor-num 1)
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
659 ;; version does probably not start a branch or release
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
660 (concat branch "." (number-to-string (1- minor-num)))
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
661 (if (vc-trunk-p rev)
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
662 ;; we are at the beginning of the trunk --
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
663 ;; don't know anything to return here
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
664 ""
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
665 ;; we are at the beginning of a branch --
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
666 ;; return version of starting point
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
667 (vc-branch-part branch)))))
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
668
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
669 ;; File property caching
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
670
2580
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
671 (defun vc-clear-context ()
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
672 "Clear all cached file properties and the comment ring."
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
673 (interactive)
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
674 (fillarray vc-file-prop-obarray nil)
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
675 ;; Note: there is potential for minor lossage here if there is an open
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
676 ;; log buffer with a nonzero local value of vc-comment-ring-index.
15036
e782b987fbdb (vc-comment-ring): Initialise using make-ring.
Richard M. Stallman <rms@gnu.org>
parents: 14855
diff changeset
677 (setq vc-comment-ring (make-ring vc-maximum-comment-ring-size)))
2580
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
678
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
679 (defmacro with-vc-properties (file form settings)
32189
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
680 "Execute FORM, then set per-file properties for FILE,
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
681 but only those that have not been set during the execution of FORM.
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
682 SETTINGS is a list of two-element lists, each of which has the
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
683 form (PROPERTY . VALUE)."
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
684 `(let ((vc-touched-properties (list t))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
685 (filename ,file))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
686 ,form
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
687 (mapcar (lambda (setting)
32189
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
688 (let ((property (car setting)))
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
689 (unless (memq property vc-touched-properties)
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
690 (put (intern filename vc-file-prop-obarray)
32189
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
691 property (cdr setting)))))
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
692 ,settings)))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
693
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
694 ;; Random helper functions
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
695
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
696 (defsubst vc-editable-p (file)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
697 (or (eq (vc-checkout-model file) 'implicit)
32058
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
698 (memq (vc-state file) '(edited needs-merge))))
12872
857663042672 (vc-revert-buffer1): Split part of the function into vc-buffer-context
André Spiegel <spiegel@gnu.org>
parents: 12819
diff changeset
699
38374
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
700 ;; Two macros for elisp programming
23635
9717d57c40c1 (with-vc-file, edit-vc-file): New macros.
André Spiegel <spiegel@gnu.org>
parents: 23592
diff changeset
701 ;;;###autoload
9717d57c40c1 (with-vc-file, edit-vc-file): New macros.
André Spiegel <spiegel@gnu.org>
parents: 23592
diff changeset
702 (defmacro with-vc-file (file comment &rest body)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
703 "Check out a writable copy of FILE if necessary and execute the body.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
704 Check in FILE with COMMENT (a string) after BODY has been executed.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
705 FILE is passed through `expand-file-name'; BODY executed within
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
706 `save-excursion'. If FILE is not under version control, or locked by
23635
9717d57c40c1 (with-vc-file, edit-vc-file): New macros.
André Spiegel <spiegel@gnu.org>
parents: 23592
diff changeset
707 somebody else, signal error."
9717d57c40c1 (with-vc-file, edit-vc-file): New macros.
André Spiegel <spiegel@gnu.org>
parents: 23592
diff changeset
708 `(let ((file (expand-file-name ,file)))
32059
13e0fdf65e3c (with-vc-file, vc-next-action-on-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32058
diff changeset
709 (or (vc-backend file)
23635
9717d57c40c1 (with-vc-file, edit-vc-file): New macros.
André Spiegel <spiegel@gnu.org>
parents: 23592
diff changeset
710 (error (format "File not under version control: `%s'" file)))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
711 (unless (vc-editable-p file)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
712 (let ((state (vc-state file)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
713 (if (stringp state) (error (format "`%s' is locking `%s'" state file))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
714 (vc-checkout file t))))
23635
9717d57c40c1 (with-vc-file, edit-vc-file): New macros.
André Spiegel <spiegel@gnu.org>
parents: 23592
diff changeset
715 (save-excursion
9717d57c40c1 (with-vc-file, edit-vc-file): New macros.
André Spiegel <spiegel@gnu.org>
parents: 23592
diff changeset
716 ,@body)
9717d57c40c1 (with-vc-file, edit-vc-file): New macros.
André Spiegel <spiegel@gnu.org>
parents: 23592
diff changeset
717 (vc-checkin file nil ,comment)))
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
718 (put 'with-vc-file 'indent-function 1)
23635
9717d57c40c1 (with-vc-file, edit-vc-file): New macros.
André Spiegel <spiegel@gnu.org>
parents: 23592
diff changeset
719
9717d57c40c1 (with-vc-file, edit-vc-file): New macros.
André Spiegel <spiegel@gnu.org>
parents: 23592
diff changeset
720 ;;;###autoload
9717d57c40c1 (with-vc-file, edit-vc-file): New macros.
André Spiegel <spiegel@gnu.org>
parents: 23592
diff changeset
721 (defmacro edit-vc-file (file comment &rest body)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
722 "Edit FILE under version control, executing body.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
723 Checkin with COMMENT after executing BODY.
23635
9717d57c40c1 (with-vc-file, edit-vc-file): New macros.
André Spiegel <spiegel@gnu.org>
parents: 23592
diff changeset
724 This macro uses `with-vc-file', passing args to it.
9717d57c40c1 (with-vc-file, edit-vc-file): New macros.
André Spiegel <spiegel@gnu.org>
parents: 23592
diff changeset
725 However, before executing BODY, find FILE, and after BODY, save buffer."
9717d57c40c1 (with-vc-file, edit-vc-file): New macros.
André Spiegel <spiegel@gnu.org>
parents: 23592
diff changeset
726 `(with-vc-file
9717d57c40c1 (with-vc-file, edit-vc-file): New macros.
André Spiegel <spiegel@gnu.org>
parents: 23592
diff changeset
727 ,file ,comment
32058
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
728 (set-buffer (find-file-noselect ,file))
23635
9717d57c40c1 (with-vc-file, edit-vc-file): New macros.
André Spiegel <spiegel@gnu.org>
parents: 23592
diff changeset
729 ,@body
9717d57c40c1 (with-vc-file, edit-vc-file): New macros.
André Spiegel <spiegel@gnu.org>
parents: 23592
diff changeset
730 (save-buffer)))
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
731 (put 'edit-vc-file 'indent-function 1)
23635
9717d57c40c1 (with-vc-file, edit-vc-file): New macros.
André Spiegel <spiegel@gnu.org>
parents: 23592
diff changeset
732
21366
e7b64d0b3b3d (vc-ensure-vc-buffer): New function.
André Spiegel <spiegel@gnu.org>
parents: 21357
diff changeset
733 (defun vc-ensure-vc-buffer ()
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
734 "Make sure that the current buffer visits a version-controlled file."
21366
e7b64d0b3b3d (vc-ensure-vc-buffer): New function.
André Spiegel <spiegel@gnu.org>
parents: 21357
diff changeset
735 (if vc-dired-mode
e7b64d0b3b3d (vc-ensure-vc-buffer): New function.
André Spiegel <spiegel@gnu.org>
parents: 21357
diff changeset
736 (set-buffer (find-file-noselect (dired-get-filename)))
e7b64d0b3b3d (vc-ensure-vc-buffer): New function.
André Spiegel <spiegel@gnu.org>
parents: 21357
diff changeset
737 (while vc-parent-buffer
e7b64d0b3b3d (vc-ensure-vc-buffer): New function.
André Spiegel <spiegel@gnu.org>
parents: 21357
diff changeset
738 (pop-to-buffer vc-parent-buffer))
e7b64d0b3b3d (vc-ensure-vc-buffer): New function.
André Spiegel <spiegel@gnu.org>
parents: 21357
diff changeset
739 (if (not (buffer-file-name))
e7b64d0b3b3d (vc-ensure-vc-buffer): New function.
André Spiegel <spiegel@gnu.org>
parents: 21357
diff changeset
740 (error "Buffer %s is not associated with a file" (buffer-name))
e7b64d0b3b3d (vc-ensure-vc-buffer): New function.
André Spiegel <spiegel@gnu.org>
parents: 21357
diff changeset
741 (if (not (vc-backend (buffer-file-name)))
e7b64d0b3b3d (vc-ensure-vc-buffer): New function.
André Spiegel <spiegel@gnu.org>
parents: 21357
diff changeset
742 (error "File %s is not under version control" (buffer-file-name))))))
2745
adf91f018312 (vc-diff): Report an error if the buffer isn't registered.
Richard M. Stallman <rms@gnu.org>
parents: 2706
diff changeset
743
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
744 (defvar vc-binary-assoc nil)
22534
442d61eaab83 (vc-binary-suffixes): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 22504
diff changeset
745 (defvar vc-binary-suffixes
442d61eaab83 (vc-binary-suffixes): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 22504
diff changeset
746 (if (memq system-type '(ms-dos windows-nt))
442d61eaab83 (vc-binary-suffixes): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 22504
diff changeset
747 '(".exe" ".com" ".bat" ".cmd" ".btm" "")
442d61eaab83 (vc-binary-suffixes): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 22504
diff changeset
748 '("")))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
749
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
750 (defun vc-process-filter (p s)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
751 "An alternative output filter for async process P.
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
752 The only difference with the default filter is to insert S after markers."
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
753 (with-current-buffer (process-buffer p)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
754 (save-excursion
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
755 (let ((inhibit-read-only t))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
756 (goto-char (process-mark p))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
757 (insert s)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
758 (set-marker (process-mark p) (point))))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
759
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
760 (defun vc-setup-buffer (&optional buf)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
761 "Prepare BUF for executing a VC command and make it the current buffer.
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
762 BUF defaults to \"*vc*\", can be a string and will be created if necessary."
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
763 (unless buf (setq buf "*vc*"))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
764 (let ((camefrom (current-buffer))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
765 (olddir default-directory))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
766 (set-buffer (get-buffer-create buf))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
767 (kill-all-local-variables)
2580
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
768 (set (make-local-variable 'vc-parent-buffer) camefrom)
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
769 (set (make-local-variable 'vc-parent-buffer-name)
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
770 (concat " from " (buffer-name camefrom)))
10537
380605821cc9 (vc-do-command): Arrange for the default-directory variable
Richard M. Stallman <rms@gnu.org>
parents: 10475
diff changeset
771 (setq default-directory olddir)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
772 (let ((inhibit-read-only t))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
773 (erase-buffer))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
774
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
775 (defun vc-exec-after (code)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
776 "Eval CODE when the current buffer's process is done.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
777 If the current buffer has no process, just evaluate CODE.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
778 Else, add CODE to the process' sentinel."
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
779 (let ((proc (get-buffer-process (current-buffer))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
780 (cond
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
781 ;; If there's no background process, just execute the code.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
782 ((null proc) (eval code))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
783 ;; If the background process has exited, reap it and try again
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
784 ((eq (process-status proc) 'exit)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
785 (delete-process proc)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
786 (vc-exec-after code))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
787 ;; If a process is running, add CODE to the sentinel
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
788 ((eq (process-status proc) 'run)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
789 (let ((sentinel (process-sentinel proc)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
790 (set-process-sentinel proc
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
791 `(lambda (p s)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
792 (with-current-buffer ',(current-buffer)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
793 (goto-char (process-mark p))
31565
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
794 ,@(append (cdr (cdr (cdr ;strip off `with-current-buffer buf
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
795 ; (goto-char...)'
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
796 (car (cdr (cdr ;strip off `lambda (p s)'
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
797 sentinel))))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
798 (list `(vc-exec-after ',code))))))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
799 (t (error "Unexpected process state"))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
800 nil)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
801
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
802 (defvar vc-post-command-functions nil
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
803 "Hook run at the end of `vc-do-command'.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
804 Each function is called inside the buffer in which the command was run
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
805 and is passed 3 argument: the COMMAND, the FILE and the FLAGS.")
1674
75e8a7f920c7 * vc.el (vc-do-command): Set the default directory of the *vc*
Jim Blandy <jimb@redhat.com>
parents: 1636
diff changeset
806
38442
086300440396 (vc-do-command): Autoload.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38374
diff changeset
807 ;;;###autoload
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
808 (defun vc-do-command (buffer okstatus command file &rest flags)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
809 "Execute a version control command, notifying user and checking for errors.
36710
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
810 Output from COMMAND goes to BUFFER, or *vc* if BUFFER is nil or the
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
811 current buffer if BUFFER is t. If the destination buffer is not
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
812 already current, set it up properly and erase it. The command is
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
813 considered successful if its exit status does not exceed OKSTATUS (if
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
814 OKSTATUS is nil, that means to ignore errors, if it is 'async, that
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
815 means not to wait for termination of the subprocess). FILE is the
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
816 name of the working file (may also be nil, to execute commands that
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
817 don't expect a file name). If an optional list of FLAGS is present,
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
818 that is inserted into the command line before the filename."
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
819 (and file (setq file (expand-file-name file)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
820 (if vc-command-messages
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
821 (message "Running %s on %s..." command file))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
822 (save-current-buffer
36710
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
823 (unless (or (eq buffer t)
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
824 (and (stringp buffer)
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
825 (string= (buffer-name) buffer))
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
826 (eq buffer (current-buffer)))
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
827 (vc-setup-buffer buffer))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
828 (let ((squeezed nil)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
829 (inhibit-read-only t)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
830 (status 0))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
831 (setq squeezed (delq nil (copy-sequence flags)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
832 (when file
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
833 ;; FIXME: file-relative-name can return a bogus result because
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
834 ;; it doesn't look at the actual file-system to see if symlinks
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
835 ;; come into play.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
836 (setq squeezed (append squeezed (list (file-relative-name file)))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
837 (let ((exec-path (append vc-path exec-path))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
838 ;; Add vc-path to PATH for the execution of this command.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
839 (process-environment
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
840 (cons (concat "PATH=" (getenv "PATH")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
841 path-separator
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
842 (mapconcat 'identity vc-path path-separator))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
843 process-environment))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
844 (w32-quote-process-args t))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
845 (if (eq okstatus 'async)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
846 (let ((proc (apply 'start-process command (current-buffer) command
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
847 squeezed)))
33553
840460ecad6f (vc-do-command): In the asynchronous case, output messages only if the
André Spiegel <spiegel@gnu.org>
parents: 33548
diff changeset
848 (unless (active-minibuffer-window)
840460ecad6f (vc-do-command): In the asynchronous case, output messages only if the
André Spiegel <spiegel@gnu.org>
parents: 33548
diff changeset
849 (message "Running %s in the background..." command))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
850 ;;(set-process-sentinel proc (lambda (p msg) (delete-process p)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
851 (set-process-filter proc 'vc-process-filter)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
852 (vc-exec-after
33553
840460ecad6f (vc-do-command): In the asynchronous case, output messages only if the
André Spiegel <spiegel@gnu.org>
parents: 33548
diff changeset
853 `(unless (active-minibuffer-window)
840460ecad6f (vc-do-command): In the asynchronous case, output messages only if the
André Spiegel <spiegel@gnu.org>
parents: 33548
diff changeset
854 (message "Running %s in the background... done" ',command))))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
855 (setq status (apply 'call-process command nil t nil squeezed))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
856 (when (or (not (integerp status)) (and okstatus (< okstatus status)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
857 (pop-to-buffer (current-buffer))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
858 (goto-char (point-min))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
859 (shrink-window-if-larger-than-buffer)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
860 (error "Running %s...FAILED (%s)" command
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
861 (if (integerp status) (format "status %d" status) status))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
862 (if vc-command-messages
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
863 (message "Running %s...OK" command)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
864 (vc-exec-after
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
865 `(run-hook-with-args 'vc-post-command-functions ',command ',file ',flags))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
866 status)))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
867
1635
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
868 (defun vc-position-context (posn)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
869 "Save a bit of the text around POSN in the current buffer.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
870 Used to help us find the corresponding position again later
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
871 if markers are destroyed or corrupted."
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
872 ;; A lot of this was shamelessly lifted from Sebastian Kremer's
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
873 ;; rcs.el mode.
1635
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
874 (list posn
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
875 (buffer-size)
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
876 (buffer-substring posn
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
877 (min (point-max) (+ posn 100)))))
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
878
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
879 (defun vc-find-position-by-context (context)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
880 "Return the position of CONTEXT in the current buffer, or nil if not found."
1635
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
881 (let ((context-string (nth 2 context)))
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
882 (if (equal "" context-string)
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
883 (point-max)
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
884 (save-excursion
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
885 (let ((diff (- (nth 1 context) (buffer-size))))
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
886 (if (< diff 0) (setq diff (- diff)))
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
887 (goto-char (nth 0 context))
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
888 (if (or (search-forward context-string nil t)
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
889 ;; Can't use search-backward since the match may continue
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
890 ;; after point.
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
891 (progn (goto-char (- (point) diff (length context-string)))
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
892 ;; goto-char doesn't signal an error at
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
893 ;; beginning of buffer like backward-char would
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
894 (search-forward context-string nil t)))
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
895 ;; to beginning of OSTRING
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
896 (- (point) (length context-string))))))))
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
897
21113
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
898 (defun vc-context-matches-p (posn context)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
899 "Return t if POSN matches CONTEXT, nil otherwise."
21113
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
900 (let* ((context-string (nth 2 context))
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
901 (len (length context-string))
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
902 (end (+ posn len)))
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
903 (if (> end (1+ (buffer-size)))
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
904 nil
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
905 (string= context-string (buffer-substring posn end)))))
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
906
12872
857663042672 (vc-revert-buffer1): Split part of the function into vc-buffer-context
André Spiegel <spiegel@gnu.org>
parents: 12819
diff changeset
907 (defun vc-buffer-context ()
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
908 "Return a list (POINT-CONTEXT MARK-CONTEXT REPARSE).
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
909 Used by `vc-restore-buffer-context' to later restore the context."
1635
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
910 (let ((point-context (vc-position-context (point)))
2041
ccb75415543a (vc-revert-buffer1): Use mark-marker; don't alter mark-active.
Richard M. Stallman <rms@gnu.org>
parents: 1905
diff changeset
911 ;; Use mark-marker to avoid confusion in transient-mark-mode.
ccb75415543a (vc-revert-buffer1): Use mark-marker; don't alter mark-active.
Richard M. Stallman <rms@gnu.org>
parents: 1905
diff changeset
912 (mark-context (if (eq (marker-buffer (mark-marker)) (current-buffer))
ccb75415543a (vc-revert-buffer1): Use mark-marker; don't alter mark-active.
Richard M. Stallman <rms@gnu.org>
parents: 1905
diff changeset
913 (vc-position-context (mark-marker))))
2554
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
914 ;; Make the right thing happen in transient-mark-mode.
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
915 (mark-active nil)
2490
70d00ecacc0d (vc-directory. vc-start-entry, vc-next-action, vc-next-action-on-file):
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2464
diff changeset
916 ;; We may want to reparse the compilation buffer after revert
2554
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
917 (reparse (and (boundp 'compilation-error-list) ;compile loaded
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
918 (let ((curbuf (current-buffer)))
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
919 ;; Construct a list; each elt is nil or a buffer
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
920 ;; iff that buffer is a compilation output buffer
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
921 ;; that contains markers into the current buffer.
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
922 (save-excursion
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
923 (mapcar (lambda (buffer)
2554
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
924 (set-buffer buffer)
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
925 (let ((errors (or
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
926 compilation-old-error-list
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
927 compilation-error-list))
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
928 (buffer-error-marked-p nil))
2774
ea8a7ab72d14 (vc-revert-buffer1): Don't assume that compilation-error-list
Richard M. Stallman <rms@gnu.org>
parents: 2769
diff changeset
929 (while (and (consp errors)
2554
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
930 (not buffer-error-marked-p))
2617
e2e5dfa162b4 (vc-revert-buffer1): Fix format of compilation-error-list.
Richard M. Stallman <rms@gnu.org>
parents: 2612
diff changeset
931 (and (markerp (cdr (car errors)))
2604
3a56b8caf6c9 (vc-revert-buffer1): Ignore non-marker elts of compilation-error-list.
Roland McGrath <roland@gnu.org>
parents: 2580
diff changeset
932 (eq buffer
3a56b8caf6c9 (vc-revert-buffer1): Ignore non-marker elts of compilation-error-list.
Roland McGrath <roland@gnu.org>
parents: 2580
diff changeset
933 (marker-buffer
2617
e2e5dfa162b4 (vc-revert-buffer1): Fix format of compilation-error-list.
Richard M. Stallman <rms@gnu.org>
parents: 2612
diff changeset
934 (cdr (car errors))))
2604
3a56b8caf6c9 (vc-revert-buffer1): Ignore non-marker elts of compilation-error-list.
Roland McGrath <roland@gnu.org>
parents: 2580
diff changeset
935 (setq buffer-error-marked-p t))
2554
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
936 (setq errors (cdr errors)))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
937 (if buffer-error-marked-p buffer)))
2554
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
938 (buffer-list)))))))
12872
857663042672 (vc-revert-buffer1): Split part of the function into vc-buffer-context
André Spiegel <spiegel@gnu.org>
parents: 12819
diff changeset
939 (list point-context mark-context reparse)))
2226
b2216b3b8f57 (vc-header-strings) Name changed to vc-header-alist, to match the
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2219
diff changeset
940
12872
857663042672 (vc-revert-buffer1): Split part of the function into vc-buffer-context
André Spiegel <spiegel@gnu.org>
parents: 12819
diff changeset
941 (defun vc-restore-buffer-context (context)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
942 "Restore point/mark, and reparse any affected compilation buffers.
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
943 CONTEXT is that which `vc-buffer-context' returns."
12872
857663042672 (vc-revert-buffer1): Split part of the function into vc-buffer-context
André Spiegel <spiegel@gnu.org>
parents: 12819
diff changeset
944 (let ((point-context (nth 0 context))
857663042672 (vc-revert-buffer1): Split part of the function into vc-buffer-context
André Spiegel <spiegel@gnu.org>
parents: 12819
diff changeset
945 (mark-context (nth 1 context))
857663042672 (vc-revert-buffer1): Split part of the function into vc-buffer-context
André Spiegel <spiegel@gnu.org>
parents: 12819
diff changeset
946 (reparse (nth 2 context)))
2554
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
947 ;; Reparse affected compilation buffers.
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
948 (while reparse
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
949 (if (car reparse)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
950 (with-current-buffer (car reparse)
2554
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
951 (let ((compilation-last-buffer (current-buffer)) ;select buffer
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
952 ;; Record the position in the compilation buffer of
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
953 ;; the last error next-error went to.
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
954 (error-pos (marker-position
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
955 (car (car-safe compilation-error-list)))))
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
956 ;; Reparse the error messages as far as they were parsed before.
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
957 (compile-reinitialize-errors '(4) compilation-parsing-end)
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
958 ;; Move the pointer up to find the error we were at before
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
959 ;; reparsing. Now next-error should properly go to the next one.
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
960 (while (and compilation-error-list
2558
78a9cebdb22c (vc-revert-buffer1): Typo fix in last change.
Roland McGrath <roland@gnu.org>
parents: 2555
diff changeset
961 (/= error-pos (car (car compilation-error-list))))
2554
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
962 (setq compilation-error-list (cdr compilation-error-list))))))
5686672705bf (vc-revert-buffer1): Completely rewrote compilation reparsing code.
Roland McGrath <roland@gnu.org>
parents: 2493
diff changeset
963 (setq reparse (cdr reparse)))
2490
70d00ecacc0d (vc-directory. vc-start-entry, vc-next-action, vc-next-action-on-file):
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2464
diff changeset
964
21113
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
965 ;; if necessary, restore point and mark
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
966 (if (not (vc-context-matches-p (point) point-context))
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
967 (let ((new-point (vc-find-position-by-context point-context)))
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
968 (if new-point (goto-char new-point))))
21212
73a8874d25ce (vc-restore-buffer-context): Only try to restore mark if it is active.
André Spiegel <spiegel@gnu.org>
parents: 21113
diff changeset
969 (and mark-active
73a8874d25ce (vc-restore-buffer-context): Only try to restore mark if it is active.
André Spiegel <spiegel@gnu.org>
parents: 21113
diff changeset
970 mark-context
73a8874d25ce (vc-restore-buffer-context): Only try to restore mark if it is active.
André Spiegel <spiegel@gnu.org>
parents: 21113
diff changeset
971 (not (vc-context-matches-p (mark) mark-context))
73a8874d25ce (vc-restore-buffer-context): Only try to restore mark if it is active.
André Spiegel <spiegel@gnu.org>
parents: 21113
diff changeset
972 (let ((new-mark (vc-find-position-by-context mark-context)))
73a8874d25ce (vc-restore-buffer-context): Only try to restore mark if it is active.
André Spiegel <spiegel@gnu.org>
parents: 21113
diff changeset
973 (if new-mark (set-mark new-mark))))))
1635
e3c02a517030 Thu Nov 19 16:44:24 1992 Jim Blandy (jimb@totoro.cs.oberlin.edu)
Jim Blandy <jimb@redhat.com>
parents: 1575
diff changeset
974
12872
857663042672 (vc-revert-buffer1): Split part of the function into vc-buffer-context
André Spiegel <spiegel@gnu.org>
parents: 12819
diff changeset
975 (defun vc-revert-buffer1 (&optional arg no-confirm)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
976 "Revert buffer, trying to keep point and mark where user expects them.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
977 Tries to be clever in the face of changes due to expanded version control
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
978 key words. This is important for typeahead to work as expected.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
979 ARG and NO-CONFIRM are passed on to `revert-buffer'."
12872
857663042672 (vc-revert-buffer1): Split part of the function into vc-buffer-context
André Spiegel <spiegel@gnu.org>
parents: 12819
diff changeset
980 (interactive "P")
857663042672 (vc-revert-buffer1): Split part of the function into vc-buffer-context
André Spiegel <spiegel@gnu.org>
parents: 12819
diff changeset
981 (widen)
857663042672 (vc-revert-buffer1): Split part of the function into vc-buffer-context
André Spiegel <spiegel@gnu.org>
parents: 12819
diff changeset
982 (let ((context (vc-buffer-context)))
21113
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
983 ;; Use save-excursion here, because it may be able to restore point
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
984 ;; and mark properly even in cases where vc-restore-buffer-context
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
985 ;; would fail. However, save-excursion might also get it wrong --
21113
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
986 ;; in this case, vc-restore-buffer-context gives it a second try.
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
987 (save-excursion
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
988 ;; t means don't call normal-mode;
21113
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
989 ;; that's to preserve various minor modes.
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
990 (revert-buffer arg no-confirm t))
12872
857663042672 (vc-revert-buffer1): Split part of the function into vc-buffer-context
André Spiegel <spiegel@gnu.org>
parents: 12819
diff changeset
991 (vc-restore-buffer-context context)))
857663042672 (vc-revert-buffer1): Split part of the function into vc-buffer-context
André Spiegel <spiegel@gnu.org>
parents: 12819
diff changeset
992
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
993
5338
b3a78854c791 (vc-buffer-sync, vc-diff): New arg NOT-URGENT.
Richard M. Stallman <rms@gnu.org>
parents: 5263
diff changeset
994 (defun vc-buffer-sync (&optional not-urgent)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
995 "Make sure the current buffer and its working file are in sync.
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
996 NOT-URGENT means it is ok to continue if the user says not to save."
5201
b27badfb4040 (vc-buffer-sync): Signal error if user says no.
Richard M. Stallman <rms@gnu.org>
parents: 5015
diff changeset
997 (if (buffer-modified-p)
5338
b3a78854c791 (vc-buffer-sync, vc-diff): New arg NOT-URGENT.
Richard M. Stallman <rms@gnu.org>
parents: 5263
diff changeset
998 (if (or vc-suppress-confirm
b3a78854c791 (vc-buffer-sync, vc-diff): New arg NOT-URGENT.
Richard M. Stallman <rms@gnu.org>
parents: 5263
diff changeset
999 (y-or-n-p (format "Buffer %s modified; save it? " (buffer-name))))
b3a78854c791 (vc-buffer-sync, vc-diff): New arg NOT-URGENT.
Richard M. Stallman <rms@gnu.org>
parents: 5263
diff changeset
1000 (save-buffer)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1001 (unless not-urgent
5338
b3a78854c791 (vc-buffer-sync, vc-diff): New arg NOT-URGENT.
Richard M. Stallman <rms@gnu.org>
parents: 5263
diff changeset
1002 (error "Aborted")))))
b3a78854c791 (vc-buffer-sync, vc-diff): New arg NOT-URGENT.
Richard M. Stallman <rms@gnu.org>
parents: 5263
diff changeset
1003
33634
c97a649b1987 Undo prev change.
André Spiegel <spiegel@gnu.org>
parents: 33611
diff changeset
1004 (defun vc-workfile-unchanged-p (file)
c97a649b1987 Undo prev change.
André Spiegel <spiegel@gnu.org>
parents: 33611
diff changeset
1005 "Has FILE changed since last checkout?"
c97a649b1987 Undo prev change.
André Spiegel <spiegel@gnu.org>
parents: 33611
diff changeset
1006 (let ((checkout-time (vc-file-getprop file 'vc-checkout-time))
c97a649b1987 Undo prev change.
André Spiegel <spiegel@gnu.org>
parents: 33611
diff changeset
1007 (lastmod (nth 5 (file-attributes file))))
c97a649b1987 Undo prev change.
André Spiegel <spiegel@gnu.org>
parents: 33611
diff changeset
1008 (if checkout-time
c97a649b1987 Undo prev change.
André Spiegel <spiegel@gnu.org>
parents: 33611
diff changeset
1009 (equal checkout-time lastmod)
c97a649b1987 Undo prev change.
André Spiegel <spiegel@gnu.org>
parents: 33611
diff changeset
1010 (let ((unchanged (vc-call workfile-unchanged-p file)))
c97a649b1987 Undo prev change.
André Spiegel <spiegel@gnu.org>
parents: 33611
diff changeset
1011 (vc-file-setprop file 'vc-checkout-time (if unchanged lastmod 0))
c97a649b1987 Undo prev change.
André Spiegel <spiegel@gnu.org>
parents: 33611
diff changeset
1012 unchanged))))
c97a649b1987 Undo prev change.
André Spiegel <spiegel@gnu.org>
parents: 33611
diff changeset
1013
36395
20a768ca0cf8 (vc-default-workfile-unchanged-p, vc-default-latest-on-branch-p): Add
André Spiegel <spiegel@gnu.org>
parents: 35830
diff changeset
1014 (defun vc-default-workfile-unchanged-p (backend file)
33634
c97a649b1987 Undo prev change.
André Spiegel <spiegel@gnu.org>
parents: 33611
diff changeset
1015 "Default check whether FILE is unchanged: diff against master version."
c97a649b1987 Undo prev change.
André Spiegel <spiegel@gnu.org>
parents: 33611
diff changeset
1016 (zerop (vc-call diff file (vc-workfile-version file))))
c97a649b1987 Undo prev change.
André Spiegel <spiegel@gnu.org>
parents: 33611
diff changeset
1017
36395
20a768ca0cf8 (vc-default-workfile-unchanged-p, vc-default-latest-on-branch-p): Add
André Spiegel <spiegel@gnu.org>
parents: 35830
diff changeset
1018 (defun vc-default-latest-on-branch-p (backend file)
35131
9dcb897992b9 (vc-default-latest-on-branch-p): New function, replaces constant
André Spiegel <spiegel@gnu.org>
parents: 33634
diff changeset
1019 "Default check whether the current workfile version of FILE is the
9dcb897992b9 (vc-default-latest-on-branch-p): New function, replaces constant
André Spiegel <spiegel@gnu.org>
parents: 33634
diff changeset
1020 latest on its branch."
9dcb897992b9 (vc-default-latest-on-branch-p): New function, replaces constant
André Spiegel <spiegel@gnu.org>
parents: 33634
diff changeset
1021 t)
9dcb897992b9 (vc-default-latest-on-branch-p): New function, replaces constant
André Spiegel <spiegel@gnu.org>
parents: 33634
diff changeset
1022
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1023 (defun vc-recompute-state (file)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1024 "Force a recomputation of the version control state of FILE.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1025 The state is computed using the exact, and possibly expensive
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1026 function `vc-BACKEND-state', not the heuristic."
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1027 (vc-file-setprop file 'vc-state (vc-call state file)))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1028
2490
70d00ecacc0d (vc-directory. vc-start-entry, vc-next-action, vc-next-action-on-file):
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2464
diff changeset
1029 (defun vc-next-action-on-file (file verbose &optional comment)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1030 "Do The Right Thing for a given version-controlled FILE.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1031 If COMMENT is specified, it will be used as an admin or checkin comment.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1032 If VERBOSE is non-nil, query the user rather than using default parameters."
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1033 (let ((visited (get-file-buffer file))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1034 state version)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1035 (when visited
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1036 ;; Check relation of buffer and file, and make sure
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1037 ;; user knows what he's doing. First, finding the file
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1038 ;; will check whether the file on disk is newer.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1039 (if vc-dired-mode
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1040 (find-file-other-window file)
32058
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
1041 (set-buffer (find-file-noselect file)))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1042 (if (not (verify-visited-file-modtime (current-buffer)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1043 (if (yes-or-no-p "Replace file on disk with buffer contents? ")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1044 (write-file (buffer-file-name))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1045 (error "Aborted"))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1046 ;; Now, check if we have unsaved changes.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1047 (vc-buffer-sync t)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1048 (if (buffer-modified-p)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1049 (or (y-or-n-p "Operate on disk file, keeping modified buffer? ")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1050 (error "Aborted")))))
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
1051
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1052 ;; Do the right thing
32069
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1053 (if (not (vc-registered file))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1054 (vc-register verbose comment)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1055 (vc-recompute-state file)
32054
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1056 (if visited (vc-mode-line file))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1057 (setq state (vc-state file))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1058 (cond
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1059 ;; up-to-date
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1060 ((or (eq state 'up-to-date)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1061 (and verbose (eq state 'needs-patch)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1062 (cond
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1063 (verbose
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1064 ;; go to a different version
32059
13e0fdf65e3c (with-vc-file, vc-next-action-on-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32058
diff changeset
1065 (setq version
31810
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
1066 (read-string "Branch, version, or backend to move to: "))
32059
13e0fdf65e3c (with-vc-file, vc-next-action-on-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32058
diff changeset
1067 (let ((vsym (intern-soft (upcase version))))
31810
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
1068 (if (member vsym vc-handled-backends)
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
1069 (vc-transfer-file file vsym)
32059
13e0fdf65e3c (with-vc-file, vc-next-action-on-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32058
diff changeset
1070 (vc-checkout file (eq (vc-checkout-model file) 'implicit)
31810
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
1071 version))))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1072 ((not (eq (vc-checkout-model file) 'implicit))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1073 ;; check the file out
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1074 (vc-checkout file t))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1075 (t
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1076 ;; do nothing
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1077 (message "%s is up-to-date" file))))
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
1078
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1079 ;; Abnormal: edited but read-only
37544
94c0503d3f2d (vc-next-action-on-file): Only force buffer+file to writable
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36710
diff changeset
1080 ((and visited (eq state 'edited)
94c0503d3f2d (vc-next-action-on-file): Only force buffer+file to writable
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36710
diff changeset
1081 buffer-read-only (not (file-writable-p file)))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1082 ;; Make the file+buffer read-write. If the user really wanted to
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1083 ;; commit, he'll get a chance to do that next time around, anyway.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1084 (message "File is edited but read-only; making it writable")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1085 (set-file-modes buffer-file-name
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1086 (logior (file-modes buffer-file-name) 128))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1087 (toggle-read-only -1))
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
1088
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1089 ;; edited
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1090 ((eq state 'edited)
31565
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
1091 (cond
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1092 ;; For files with locking, if the file does not contain
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1093 ;; any changes, just let go of the lock, i.e. revert.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1094 ((and (not (eq (vc-checkout-model file) 'implicit))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1095 (vc-workfile-unchanged-p file)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1096 ;; If buffer is modified, that means the user just
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1097 ;; said no to saving it; in that case, don't revert,
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1098 ;; because the user might intend to save after
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1099 ;; finishing the log entry.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1100 (not (and visited (buffer-modified-p))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1101 ;; DO NOT revert the file without asking the user!
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1102 (if (not visited) (find-file-other-window file))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1103 (if (yes-or-no-p "Revert to master version? ")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1104 (vc-revert-buffer)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1105 (t ;; normal action
31810
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
1106 (if (not verbose)
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
1107 (vc-checkin file nil comment)
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
1108 (setq version (read-string "New version or backend: "))
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
1109 (let ((vsym (intern (upcase version))))
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
1110 (if (member vsym vc-handled-backends)
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
1111 (vc-transfer-file file vsym)
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
1112 (vc-checkin file version comment)))))))
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
1113
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1114 ;; locked by somebody else
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1115 ((stringp state)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1116 (if comment
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1117 (error "Sorry, you can't steal the lock on %s this way"
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1118 (file-name-nondirectory file)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1119 (vc-steal-lock file
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1120 (if verbose (read-string "Version to steal: ")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1121 (vc-workfile-version file))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1122 state))
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
1123
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1124 ;; needs-patch
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1125 ((eq state 'needs-patch)
31565
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
1126 (if (yes-or-no-p (format
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1127 "%s is not up-to-date. Get latest version? "
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1128 (file-name-nondirectory file)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1129 (vc-checkout file (eq (vc-checkout-model file) 'implicit) "")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1130 (if (and (not (eq (vc-checkout-model file) 'implicit))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1131 (yes-or-no-p "Lock this version? "))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1132 (vc-checkout file t)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1133 (error "Aborted"))))
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
1134
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1135 ;; needs-merge
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1136 ((eq state 'needs-merge)
31565
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
1137 (if (yes-or-no-p (format
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1138 "%s is not up-to-date. Merge in changes now? "
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1139 (file-name-nondirectory file)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1140 (vc-maybe-resolve-conflicts file (vc-call merge-news file))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1141 (error "Aborted")))
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
1142
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1143 ;; unlocked-changes
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1144 ((eq state 'unlocked-changes)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1145 (if (not visited) (find-file-other-window file))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1146 (if (save-window-excursion
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1147 (vc-version-diff file (vc-workfile-version file) nil)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1148 (goto-char (point-min))
32059
13e0fdf65e3c (with-vc-file, vc-next-action-on-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32058
diff changeset
1149 (let ((inhibit-read-only t))
13e0fdf65e3c (with-vc-file, vc-next-action-on-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32058
diff changeset
1150 (insert-string
13e0fdf65e3c (with-vc-file, vc-next-action-on-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32058
diff changeset
1151 (format "Changes to %s since last lock:\n\n" file)))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1152 (not (beep))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1153 (yes-or-no-p (concat "File has unlocked changes. "
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1154 "Claim lock retaining changes? ")))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1155 (progn (vc-call steal-lock file)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1156 ;; Must clear any headers here because they wouldn't
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1157 ;; show that the file is locked now.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1158 (vc-clear-headers file)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1159 (vc-mode-line file))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1160 (if (not (yes-or-no-p
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1161 "Revert to checked-in version, instead? "))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1162 (error "Checkout aborted")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1163 (vc-revert-buffer1 t t)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1164 (vc-checkout file t))))))))
2490
70d00ecacc0d (vc-directory. vc-start-entry, vc-next-action, vc-next-action-on-file):
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2464
diff changeset
1165
23792
ec06ad058029 (vc-dired-window-configuration, vc-ediff-windows,
André Spiegel <spiegel@gnu.org>
parents: 23635
diff changeset
1166 (defvar vc-dired-window-configuration)
ec06ad058029 (vc-dired-window-configuration, vc-ediff-windows,
André Spiegel <spiegel@gnu.org>
parents: 23635
diff changeset
1167
2490
70d00ecacc0d (vc-directory. vc-start-entry, vc-next-action, vc-next-action-on-file):
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2464
diff changeset
1168 (defun vc-next-action-dired (file rev comment)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1169 "Call `vc-next-action-on-file' on all the marked files.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1170 Ignores FILE and REV, but passes on COMMENT."
21357
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
1171 (let ((dired-buffer (current-buffer))
12968
a0d985336555 (vc-dired-update-line): Don't use dired-do-redisplay.
André Spiegel <spiegel@gnu.org>
parents: 12943
diff changeset
1172 (dired-dir default-directory))
10537
380605821cc9 (vc-do-command): Arrange for the default-directory variable
Richard M. Stallman <rms@gnu.org>
parents: 10475
diff changeset
1173 (dired-map-over-marks
22437
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
1174 (let ((file (dired-get-filename)))
12943
10d0f42db2da (vc-directory): Kill existing vc-dired buffers for this directory.
André Spiegel <spiegel@gnu.org>
parents: 12926
diff changeset
1175 (message "Processing %s..." file)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1176 (vc-next-action-on-file file nil comment)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1177 (set-buffer dired-buffer)
21357
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
1178 (set-window-configuration vc-dired-window-configuration)
12943
10d0f42db2da (vc-directory): Kill existing vc-dired buffers for this directory.
André Spiegel <spiegel@gnu.org>
parents: 12926
diff changeset
1179 (message "Processing %s...done" file))
21357
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
1180 nil t))
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
1181 (dired-move-to-filename))
2490
70d00ecacc0d (vc-directory. vc-start-entry, vc-next-action, vc-next-action-on-file):
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2464
diff changeset
1182
927
587a08c3a70b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 904
diff changeset
1183 ;; Here's the major entry point.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1184
927
587a08c3a70b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 904
diff changeset
1185 ;;;###autoload
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1186 (defun vc-next-action (verbose)
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1187 "Do the next logical checkin or checkout operation on the current file.
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1188
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1189 If you call this from within a VC dired buffer with no files marked,
11597
d6d53a54da18 (vc-backend-checkout): Pass vc-checkout-switches arg
Richard M. Stallman <rms@gnu.org>
parents: 11080
diff changeset
1190 it will operate on the file in the current line.
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1191
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1192 If you call this from within a VC dired buffer, and one or more
11597
d6d53a54da18 (vc-backend-checkout): Pass vc-checkout-switches arg
Richard M. Stallman <rms@gnu.org>
parents: 11080
diff changeset
1193 files are marked, it will accept a log message and then operate on
d6d53a54da18 (vc-backend-checkout): Pass vc-checkout-switches arg
Richard M. Stallman <rms@gnu.org>
parents: 11080
diff changeset
1194 each one. The log message will be used as a comment for any register
d6d53a54da18 (vc-backend-checkout): Pass vc-checkout-switches arg
Richard M. Stallman <rms@gnu.org>
parents: 11080
diff changeset
1195 or checkin operations, but ignored when doing checkouts. Attempted
d6d53a54da18 (vc-backend-checkout): Pass vc-checkout-switches arg
Richard M. Stallman <rms@gnu.org>
parents: 11080
diff changeset
1196 lock steals will raise an error.
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1197
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1198 A prefix argument lets you specify the version number to use.
9249
909ae53a446d (vc-backend-checkin): When CVS checks in a file, it is
Richard M. Stallman <rms@gnu.org>
parents: 9216
diff changeset
1199
909ae53a446d (vc-backend-checkin): When CVS checks in a file, it is
Richard M. Stallman <rms@gnu.org>
parents: 9216
diff changeset
1200 For RCS and SCCS files:
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1201 If the file is not already registered, this registers it for version
21517
4d5cd99a3d51 (vc-next-action-on-file): Don't check out after registering. This is
André Spiegel <spiegel@gnu.org>
parents: 21448
diff changeset
1202 control.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1203 If the file is registered and not locked by anyone, this checks out
2750
6f340eabf13f Improve doc strings and prompt strings.
Richard M. Stallman <rms@gnu.org>
parents: 2745
diff changeset
1204 a writable and locked file ready for editing.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1205 If the file is checked out and locked by the calling user, this
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1206 first checks to see if the file has changed since checkout. If not,
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1207 it performs a revert.
2490
70d00ecacc0d (vc-directory. vc-start-entry, vc-next-action, vc-next-action-on-file):
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2464
diff changeset
1208 If the file has been changed, this pops up a buffer for entry
70d00ecacc0d (vc-directory. vc-start-entry, vc-next-action, vc-next-action-on-file):
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2464
diff changeset
1209 of a log message; when the message has been entered, it checks in the
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1210 resulting changes along with the log message as change commentary. If
2750
6f340eabf13f Improve doc strings and prompt strings.
Richard M. Stallman <rms@gnu.org>
parents: 2745
diff changeset
1211 the variable `vc-keep-workfiles' is non-nil (which is its default), a
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1212 read-only copy of the changed file is left in place afterwards.
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1213 If the file is registered and locked by someone else, you are given
2490
70d00ecacc0d (vc-directory. vc-start-entry, vc-next-action, vc-next-action-on-file):
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2464
diff changeset
1214 the option to steal the lock.
9249
909ae53a446d (vc-backend-checkin): When CVS checks in a file, it is
Richard M. Stallman <rms@gnu.org>
parents: 9216
diff changeset
1215
909ae53a446d (vc-backend-checkin): When CVS checks in a file, it is
Richard M. Stallman <rms@gnu.org>
parents: 9216
diff changeset
1216 For CVS files:
909ae53a446d (vc-backend-checkin): When CVS checks in a file, it is
Richard M. Stallman <rms@gnu.org>
parents: 9216
diff changeset
1217 If the file is not already registered, this registers it for version
909ae53a446d (vc-backend-checkin): When CVS checks in a file, it is
Richard M. Stallman <rms@gnu.org>
parents: 9216
diff changeset
1218 control. This does a \"cvs add\", but no \"cvs commit\".
909ae53a446d (vc-backend-checkin): When CVS checks in a file, it is
Richard M. Stallman <rms@gnu.org>
parents: 9216
diff changeset
1219 If the file is added but not committed, it is committed.
909ae53a446d (vc-backend-checkin): When CVS checks in a file, it is
Richard M. Stallman <rms@gnu.org>
parents: 9216
diff changeset
1220 If your working file is changed, but the repository file is
909ae53a446d (vc-backend-checkin): When CVS checks in a file, it is
Richard M. Stallman <rms@gnu.org>
parents: 9216
diff changeset
1221 unchanged, this pops up a buffer for entry of a log message; when the
909ae53a446d (vc-backend-checkin): When CVS checks in a file, it is
Richard M. Stallman <rms@gnu.org>
parents: 9216
diff changeset
1222 message has been entered, it checks in the resulting changes along
909ae53a446d (vc-backend-checkin): When CVS checks in a file, it is
Richard M. Stallman <rms@gnu.org>
parents: 9216
diff changeset
1223 with the logmessage as change commentary. A writable file is retained.
909ae53a446d (vc-backend-checkin): When CVS checks in a file, it is
Richard M. Stallman <rms@gnu.org>
parents: 9216
diff changeset
1224 If the repository file is changed, you are asked if you want to
11597
d6d53a54da18 (vc-backend-checkout): Pass vc-checkout-switches arg
Richard M. Stallman <rms@gnu.org>
parents: 11080
diff changeset
1225 merge in the changes into your working copy."
9249
909ae53a446d (vc-backend-checkin): When CVS checks in a file, it is
Richard M. Stallman <rms@gnu.org>
parents: 9216
diff changeset
1226
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1227 (interactive "P")
2580
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
1228 (catch 'nogo
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
1229 (if vc-dired-mode
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
1230 (let ((files (dired-get-marked-files)))
21357
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
1231 (set (make-local-variable 'vc-dired-window-configuration)
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
1232 (current-window-configuration))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1233 (if (string= ""
12968
a0d985336555 (vc-dired-update-line): Don't use dired-do-redisplay.
André Spiegel <spiegel@gnu.org>
parents: 12943
diff changeset
1234 (mapconcat
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1235 (lambda (f)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1236 (if (not (vc-up-to-date-p f)) "@" ""))
12943
10d0f42db2da (vc-directory): Kill existing vc-dired buffers for this directory.
André Spiegel <spiegel@gnu.org>
parents: 12926
diff changeset
1237 files ""))
10d0f42db2da (vc-directory): Kill existing vc-dired buffers for this directory.
André Spiegel <spiegel@gnu.org>
parents: 12926
diff changeset
1238 (vc-next-action-dired nil nil "dummy")
32054
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1239 (vc-start-entry nil nil nil nil
12943
10d0f42db2da (vc-directory): Kill existing vc-dired buffers for this directory.
André Spiegel <spiegel@gnu.org>
parents: 12926
diff changeset
1240 "Enter a change comment for the marked files."
10d0f42db2da (vc-directory): Kill existing vc-dired buffers for this directory.
André Spiegel <spiegel@gnu.org>
parents: 12926
diff changeset
1241 'vc-next-action-dired))
12968
a0d985336555 (vc-dired-update-line): Don't use dired-do-redisplay.
André Spiegel <spiegel@gnu.org>
parents: 12943
diff changeset
1242 (throw 'nogo nil)))
21448
1b5746e92464 (vc-next-action): Fixed bug that prevented registering files using C-x v v.
André Spiegel <spiegel@gnu.org>
parents: 21370
diff changeset
1243 (while vc-parent-buffer
1b5746e92464 (vc-next-action): Fixed bug that prevented registering files using C-x v v.
André Spiegel <spiegel@gnu.org>
parents: 21370
diff changeset
1244 (pop-to-buffer vc-parent-buffer))
1b5746e92464 (vc-next-action): Fixed bug that prevented registering files using C-x v v.
André Spiegel <spiegel@gnu.org>
parents: 21370
diff changeset
1245 (if buffer-file-name
1b5746e92464 (vc-next-action): Fixed bug that prevented registering files using C-x v v.
André Spiegel <spiegel@gnu.org>
parents: 21370
diff changeset
1246 (vc-next-action-on-file buffer-file-name verbose)
1b5746e92464 (vc-next-action): Fixed bug that prevented registering files using C-x v v.
André Spiegel <spiegel@gnu.org>
parents: 21370
diff changeset
1247 (error "Buffer %s is not associated with a file" (buffer-name)))))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1248
38374
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
1249 ;; These functions help the vc-next-action entry point
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1250
927
587a08c3a70b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 904
diff changeset
1251 ;;;###autoload
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1252 (defun vc-register (&optional set-version comment)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1253 "Register the current file into a version control system.
31520
f9d2d484e1e2 * vc-sccs.el (vc-sccs-register):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31435
diff changeset
1254 With prefix argument SET-VERSION, allow user to specify initial version
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1255 level. If COMMENT is present, use that as an initial comment.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1256
31520
f9d2d484e1e2 * vc-sccs.el (vc-sccs-register):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31435
diff changeset
1257 The version control system to use is found by cycling through the list
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1258 `vc-handled-backends'. The first backend in that list which declares
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1259 itself responsible for the file (usually because other files in that
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1260 directory are already registered under that backend) will be used to
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1261 register the file. If no backend declares itself responsible, the
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1262 first backend that could register the file is used."
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1263 (interactive "P")
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1264 (unless buffer-file-name (error "No visited file"))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1265 (when (vc-backend buffer-file-name)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1266 (if (vc-registered buffer-file-name)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1267 (error "This file is already registered")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1268 (unless (y-or-n-p "Previous master file has vanished. Make a new one? ")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1269 (error "Aborted"))))
2054
341337259785 (vc-update-change-log): Check that ChangeLog is writable
Paul Eggert <eggert@twinsun.com>
parents: 2041
diff changeset
1270 ;; Watch out for new buffers of size 0: the corresponding file
341337259785 (vc-update-change-log): Check that ChangeLog is writable
Paul Eggert <eggert@twinsun.com>
parents: 2041
diff changeset
1271 ;; does not exist yet, even though buffer-modified-p is nil.
341337259785 (vc-update-change-log): Check that ChangeLog is writable
Paul Eggert <eggert@twinsun.com>
parents: 2041
diff changeset
1272 (if (and (not (buffer-modified-p))
341337259785 (vc-update-change-log): Check that ChangeLog is writable
Paul Eggert <eggert@twinsun.com>
parents: 2041
diff changeset
1273 (zerop (buffer-size))
341337259785 (vc-update-change-log): Check that ChangeLog is writable
Paul Eggert <eggert@twinsun.com>
parents: 2041
diff changeset
1274 (not (file-exists-p buffer-file-name)))
341337259785 (vc-update-change-log): Check that ChangeLog is writable
Paul Eggert <eggert@twinsun.com>
parents: 2041
diff changeset
1275 (set-buffer-modified-p t))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1276 (vc-buffer-sync)
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
1277
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1278 (vc-start-entry buffer-file-name
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1279 (if set-version
31810
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
1280 (read-string (format "Initial version level for %s: "
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
1281 (buffer-name)))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1282 ;; TODO: Use backend-specific init version.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1283 vc-default-init-version)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1284 (or comment (not vc-initial-comment))
32054
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1285 nil
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1286 "Enter initial comment."
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1287 (lambda (file rev comment)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1288 (message "Registering %s... " file)
32069
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1289 (let ((backend (vc-responsible-backend file t)))
31520
f9d2d484e1e2 * vc-sccs.el (vc-sccs-register):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31435
diff changeset
1290 (vc-file-clearprops file)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1291 (vc-call-backend backend 'register file rev comment)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1292 (vc-file-setprop file 'vc-backend backend)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1293 (unless vc-make-backup-files
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1294 (make-local-variable 'backup-inhibited)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1295 (setq backup-inhibited t)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1296 (message "Registering %s... done" file))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1297
32069
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1298
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1299 (defun vc-responsible-backend (file &optional register)
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1300 "Return the name of a backend system that is responsible for FILE.
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
1301 The optional argument REGISTER means that a backend suitable for
32069
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1302 registration should be found.
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1303
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1304 If REGISTER is nil, then if FILE is already registered, return the
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1305 backend of FILE. If FILE is not registered, or a directory, then the
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1306 first backend in `vc-handled-backends' that declares itself
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1307 responsible for FILE is returned. If no backend declares itself
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1308 responsible, return the first backend.
32058
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
1309
32069
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1310 If REGISTER is non-nil, return the first responsible backend under
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1311 which FILE is not yet registered. If there is no such backend, return
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1312 the first backend under which FILE is not yet registered, but could
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1313 be registered."
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1314 (if (not vc-handled-backends)
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1315 (error "No handled backends"))
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1316 (or (and (not (file-directory-p file)) (not register) (vc-backend file))
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1317 (catch 'found
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1318 ;; First try: find a responsible backend. If this is for registration,
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1319 ;; it must be a backend under which FILE is not yet registered.
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1320 (dolist (backend vc-handled-backends)
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1321 (and (or (not register)
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1322 (not (vc-call-backend backend 'registered file)))
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1323 (vc-call-backend backend 'responsible-p file)
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1324 (throw 'found backend)))
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1325 ;; no responsible backend
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1326 (if (not register)
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1327 ;; if this is not for registration, the first backend must do
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1328 (car vc-handled-backends)
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
1329 ;; for registration, we need to find a new backend that
32069
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1330 ;; could register FILE
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1331 (dolist (backend vc-handled-backends)
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1332 (and (not (vc-call-backend backend 'registered file))
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1333 (vc-call-backend backend 'could-register file)
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1334 (throw 'found backend)))
4b577e4fc758 (vc-responsible-backend): Undo the previous change in the argument
André Spiegel <spiegel@gnu.org>
parents: 32059
diff changeset
1335 (error "No backend that could register")))))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1336
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1337 (defun vc-default-responsible-p (backend file)
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
1338 "Indicate whether BACKEND is reponsible for FILE.
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1339 The default is to return nil always."
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1340 nil)
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1341
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1342 (defun vc-default-could-register (backend file)
31565
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
1343 "Return non-nil if BACKEND could be used to register FILE.
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1344 The default implementation returns t for all files."
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1345 t)
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1346
1478
429e23e87072 (vc-resynch-window): New arg NOQUERY. Pass it to vc-revert-buffer1.
Richard M. Stallman <rms@gnu.org>
parents: 1352
diff changeset
1347 (defun vc-resynch-window (file &optional keep noquery)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1348 "If FILE is in the current buffer, either revert or unvisit it.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1349 The choice between revert (to see expanded keywords) and unvisit depends on
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1350 `vc-keep-workfiles'. NOQUERY if non-nil inhibits confirmation for
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1351 reverting. NOQUERY should be t *only* if it is known the only
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1352 difference between the buffer and the file is due to version control
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1353 rather than user editing!"
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1354 (and (string= buffer-file-name file)
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1355 (if keep
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1356 (progn
1905
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1674
diff changeset
1357 (vc-revert-buffer1 t noquery)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1358 ;; TODO: Adjusting view mode might no longer be necessary
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1359 ;; after RMS change to files.el of 1999-08-08. Investigate
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1360 ;; this when we install the new VC.
20602
e8566ea47491 (vc-resynch-window): Behave properly when view-read-only is non-nil.
André Spiegel <spiegel@gnu.org>
parents: 19484
diff changeset
1361 (and view-read-only
e8566ea47491 (vc-resynch-window): Behave properly when view-read-only is non-nil.
André Spiegel <spiegel@gnu.org>
parents: 19484
diff changeset
1362 (if (file-writable-p file)
e8566ea47491 (vc-resynch-window): Behave properly when view-read-only is non-nil.
André Spiegel <spiegel@gnu.org>
parents: 19484
diff changeset
1363 (and view-mode
e8566ea47491 (vc-resynch-window): Behave properly when view-read-only is non-nil.
André Spiegel <spiegel@gnu.org>
parents: 19484
diff changeset
1364 (let ((view-old-buffer-read-only nil))
e8566ea47491 (vc-resynch-window): Behave properly when view-read-only is non-nil.
André Spiegel <spiegel@gnu.org>
parents: 19484
diff changeset
1365 (view-mode-exit)))
e8566ea47491 (vc-resynch-window): Behave properly when view-read-only is non-nil.
André Spiegel <spiegel@gnu.org>
parents: 19484
diff changeset
1366 (and (not view-mode)
e8566ea47491 (vc-resynch-window): Behave properly when view-read-only is non-nil.
André Spiegel <spiegel@gnu.org>
parents: 19484
diff changeset
1367 (not (eq (get major-mode 'mode-class) 'special))
e8566ea47491 (vc-resynch-window): Behave properly when view-read-only is non-nil.
André Spiegel <spiegel@gnu.org>
parents: 19484
diff changeset
1368 (view-mode-enter))))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1369 (vc-mode-line buffer-file-name))
12279
de2a82180af0 Adapt to the changes in vc-hooks.el, namely, the new
Richard M. Stallman <rms@gnu.org>
parents: 12210
diff changeset
1370 (kill-buffer (current-buffer)))))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1371
12714
192f537bca2a (vc-resynch-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12589
diff changeset
1372 (defun vc-resynch-buffer (file &optional keep noquery)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1373 "If FILE is currently visited, resynch its buffer."
21113
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
1374 (if (string= buffer-file-name file)
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
1375 (vc-resynch-window file keep noquery)
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
1376 (let ((buffer (get-file-buffer file)))
fcf0d1459d81 (vc-context-matches-p): New function.
André Spiegel <spiegel@gnu.org>
parents: 20988
diff changeset
1377 (if buffer
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1378 (with-current-buffer buffer
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1379 (vc-resynch-window file keep noquery)))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1380 (vc-dired-resynch-file file))
12714
192f537bca2a (vc-resynch-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12589
diff changeset
1381
32054
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1382 (defun vc-start-entry (file rev comment initial-contents msg action &optional after-hook)
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
1383 "Accept a comment for an operation on FILE revision REV.
31565
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
1384 If COMMENT is nil, pop up a VC-log buffer, emit MSG, and set the
32054
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1385 action on close to ACTION. If COMMENT is a string and
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1386 INITIAL-CONTENTS is non-nil, then COMMENT is used as the initial
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1387 contents of the log entry buffer. If COMMENT is a string and
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1388 INITIAL-CONTENTS is nil, do action immediately as if the user had
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1389 entered COMMENT. If COMMENT is t, also do action immediately with an
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
1390 empty comment. Remember the file's buffer in `vc-parent-buffer'
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
1391 \(current one if no file). AFTER-HOOK specifies the local value
32054
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1392 for vc-log-operation-hook."
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1393 (let ((parent (or (and file (get-file-buffer file)) (current-buffer))))
17274
c8228f461dda (vc-checkin-hook): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 17201
diff changeset
1394 (if vc-before-checkin-hook
c8228f461dda (vc-checkin-hook): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 17201
diff changeset
1395 (if file
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1396 (with-current-buffer parent
17274
c8228f461dda (vc-checkin-hook): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 17201
diff changeset
1397 (run-hooks 'vc-before-checkin-hook))
c8228f461dda (vc-checkin-hook): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 17201
diff changeset
1398 (run-hooks 'vc-before-checkin-hook)))
32054
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1399 (if (and comment (not initial-contents))
2490
70d00ecacc0d (vc-directory. vc-start-entry, vc-next-action, vc-next-action-on-file):
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2464
diff changeset
1400 (set-buffer (get-buffer-create "*VC-log*"))
70d00ecacc0d (vc-directory. vc-start-entry, vc-next-action, vc-next-action-on-file):
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2464
diff changeset
1401 (pop-to-buffer (get-buffer-create "*VC-log*")))
2580
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
1402 (set (make-local-variable 'vc-parent-buffer) parent)
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
1403 (set (make-local-variable 'vc-parent-buffer-name)
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
1404 (concat " from " (buffer-name vc-parent-buffer)))
12393
7d4615a12286 (vc-start-entry): Prevent lossage when doing a mass checkin from
Richard M. Stallman <rms@gnu.org>
parents: 12365
diff changeset
1405 (if file (vc-mode-line file))
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1406 (vc-log-edit file)
8159
513f25ffd93d (vc-start-entry): New arg after-hook.
Richard M. Stallman <rms@gnu.org>
parents: 8120
diff changeset
1407 (make-local-variable 'vc-log-after-operation-hook)
513f25ffd93d (vc-start-entry): New arg after-hook.
Richard M. Stallman <rms@gnu.org>
parents: 8120
diff changeset
1408 (if after-hook
513f25ffd93d (vc-start-entry): New arg after-hook.
Richard M. Stallman <rms@gnu.org>
parents: 8120
diff changeset
1409 (setq vc-log-after-operation-hook after-hook))
2490
70d00ecacc0d (vc-directory. vc-start-entry, vc-next-action, vc-next-action-on-file):
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2464
diff changeset
1410 (setq vc-log-operation action)
70d00ecacc0d (vc-directory. vc-start-entry, vc-next-action, vc-next-action-on-file):
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2464
diff changeset
1411 (setq vc-log-version rev)
32930
470147903e33 (vc-start-entry): Only erase the buffer if comment is set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32910
diff changeset
1412 (when comment
470147903e33 (vc-start-entry): Only erase the buffer if comment is set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32910
diff changeset
1413 (erase-buffer)
470147903e33 (vc-start-entry): Only erase the buffer if comment is set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32910
diff changeset
1414 (when (stringp comment) (insert comment)))
470147903e33 (vc-start-entry): Only erase the buffer if comment is set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32910
diff changeset
1415 (if (or (not comment) initial-contents)
470147903e33 (vc-start-entry): Only erase the buffer if comment is set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32910
diff changeset
1416 (message "%s Type C-c C-c when done" msg)
470147903e33 (vc-start-entry): Only erase the buffer if comment is set.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32910
diff changeset
1417 (vc-finish-logentry (eq comment t)))))
2490
70d00ecacc0d (vc-directory. vc-start-entry, vc-next-action, vc-next-action-on-file):
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2464
diff changeset
1418
11597
d6d53a54da18 (vc-backend-checkout): Pass vc-checkout-switches arg
Richard M. Stallman <rms@gnu.org>
parents: 11080
diff changeset
1419 (defun vc-checkout (file &optional writable rev)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1420 "Retrieve a copy of the revision REV of FILE.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1421 If WRITABLE is non-nil, make sure the retrieved file is writable.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1422 REV defaults to the latest revision."
32126
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
1423 (and writable
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
1424 (not rev)
32748
e2cb0aef151a (vc-checkout): Added `-p' suffix in call to vc-make-version-backups-p;
André Spiegel <spiegel@gnu.org>
parents: 32344
diff changeset
1425 (vc-call make-version-backups-p file)
32126
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
1426 (vc-up-to-date-p file)
32748
e2cb0aef151a (vc-checkout): Added `-p' suffix in call to vc-make-version-backups-p;
André Spiegel <spiegel@gnu.org>
parents: 32344
diff changeset
1427 (vc-make-version-backup file))
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1428 (with-vc-properties
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1429 file
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1430 (condition-case err
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1431 (vc-call checkout file writable rev)
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1432 (file-error
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1433 ;; Maybe the backend is not installed ;-(
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1434 (when writable
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1435 (let ((buf (get-file-buffer file)))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1436 (when buf (with-current-buffer buf (toggle-read-only -1)))))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1437 (signal (car err) (cdr err))))
32189
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
1438 `((vc-state . ,(if (or (eq (vc-checkout-model file) 'implicit)
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
1439 (not writable))
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
1440 (if (vc-call latest-on-branch-p file)
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
1441 'up-to-date
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
1442 'needs-patch)
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
1443 'edited))
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
1444 (vc-checkout-time . ,(nth 5 (file-attributes file)))))
12943
10d0f42db2da (vc-directory): Kill existing vc-dired buffers for this directory.
André Spiegel <spiegel@gnu.org>
parents: 12926
diff changeset
1445 (vc-resynch-buffer file t t))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1446
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1447 (defun vc-steal-lock (file rev owner)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1448 "Steal the lock on FILE."
9044
5ddb0e0adb08 (vc-backend-checkout): Add if-statements to the shell cmds
Richard M. Stallman <rms@gnu.org>
parents: 8726
diff changeset
1449 (let (file-description)
5ddb0e0adb08 (vc-backend-checkout): Add if-statements to the shell cmds
Richard M. Stallman <rms@gnu.org>
parents: 8726
diff changeset
1450 (if rev
5ddb0e0adb08 (vc-backend-checkout): Add if-statements to the shell cmds
Richard M. Stallman <rms@gnu.org>
parents: 8726
diff changeset
1451 (setq file-description (format "%s:%s" file rev))
5ddb0e0adb08 (vc-backend-checkout): Add if-statements to the shell cmds
Richard M. Stallman <rms@gnu.org>
parents: 8726
diff changeset
1452 (setq file-description file))
18265
ffe9754664a2 (vc-steal-lock): Use yes-or-no-p for confirmation.
Richard M. Stallman <rms@gnu.org>
parents: 18246
diff changeset
1453 (if (not (yes-or-no-p (format "Steal the lock on %s from %s? "
ffe9754664a2 (vc-steal-lock): Use yes-or-no-p for confirmation.
Richard M. Stallman <rms@gnu.org>
parents: 18246
diff changeset
1454 file-description owner)))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1455 (error "Steal canceled"))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1456 (compose-mail owner (format "Stolen lock on %s" file-description)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1457 nil nil nil nil
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1458 (list (list 'vc-finish-steal file rev)))
9044
5ddb0e0adb08 (vc-backend-checkout): Add if-statements to the shell cmds
Richard M. Stallman <rms@gnu.org>
parents: 8726
diff changeset
1459 (setq default-directory (expand-file-name "~/"))
5ddb0e0adb08 (vc-backend-checkout): Add if-statements to the shell cmds
Richard M. Stallman <rms@gnu.org>
parents: 8726
diff changeset
1460 (goto-char (point-max))
5ddb0e0adb08 (vc-backend-checkout): Add if-statements to the shell cmds
Richard M. Stallman <rms@gnu.org>
parents: 8726
diff changeset
1461 (insert
5ddb0e0adb08 (vc-backend-checkout): Add if-statements to the shell cmds
Richard M. Stallman <rms@gnu.org>
parents: 8726
diff changeset
1462 (format "I stole the lock on %s, " file-description)
5ddb0e0adb08 (vc-backend-checkout): Add if-statements to the shell cmds
Richard M. Stallman <rms@gnu.org>
parents: 8726
diff changeset
1463 (current-time-string)
5ddb0e0adb08 (vc-backend-checkout): Add if-statements to the shell cmds
Richard M. Stallman <rms@gnu.org>
parents: 8726
diff changeset
1464 ".\n")
5ddb0e0adb08 (vc-backend-checkout): Add if-statements to the shell cmds
Richard M. Stallman <rms@gnu.org>
parents: 8726
diff changeset
1465 (message "Please explain why you stole the lock. Type C-c C-c when done.")))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1466
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1467 (defun vc-finish-steal (file version)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1468 ;; This is called when the notification has been sent.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1469 (message "Stealing lock on %s..." file)
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
1470 (with-vc-properties
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1471 file
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1472 (vc-call steal-lock file version)
32189
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
1473 `((vc-state . edited)))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1474 (vc-resynch-buffer file t t)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1475 (message "Stealing lock on %s...done" file))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1476
32054
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1477 (defun vc-checkin (file &optional rev comment initial-contents)
31565
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
1478 "Check in FILE.
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1479 The optional argument REV may be a string specifying the new version
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1480 level (if nil increment the current level). COMMENT is a comment
32054
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1481 string; if omitted, a buffer is popped up to accept a comment. If
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1482 INITIAL-CONTENTS is non-nil, then COMMENT is used as the initial contents
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1483 of the log entry buffer.
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1484
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1485 If `vc-keep-workfiles' is nil, FILE is deleted afterwards, provided
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1486 that the version control system supports this mode of operation.
20967
e57454838582 (vc-checkin-hook): Add :options.
Dave Love <fx@gnu.org>
parents: 20752
diff changeset
1487
e57454838582 (vc-checkin-hook): Add :options.
Dave Love <fx@gnu.org>
parents: 20752
diff changeset
1488 Runs the normal hook `vc-checkin-hook'."
31565
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
1489 (vc-start-entry
32054
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1490 file rev comment initial-contents
31565
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
1491 "Enter a change comment."
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1492 (lambda (file rev comment)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1493 (message "Checking in %s..." file)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1494 ;; "This log message intentionally left almost blank".
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1495 ;; RCS 5.7 gripes about white-space-only comments too.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1496 (or (and comment (string-match "[^\t\n ]" comment))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1497 (setq comment "*** empty log message ***"))
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
1498 (with-vc-properties
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1499 file
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1500 ;; Change buffers to get local value of vc-checkin-switches.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1501 (with-current-buffer (or (get-file-buffer file) (current-buffer))
32126
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
1502 (let ((backup-file (vc-version-backup-file file)))
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
1503 (vc-call checkin file rev comment)
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
1504 (if backup-file (delete-file backup-file))))
32189
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
1505 `((vc-state . up-to-date)
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
1506 (vc-checkout-time . ,(nth 5 (file-attributes file)))
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
1507 (vc-workfile-version . nil)))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1508 (message "Checking in %s...done" file))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1509 'vc-checkin-hook))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1510
4155
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1511 (defun vc-comment-to-change-log (&optional whoami file-name)
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1512 "Enter last VC comment into change log file for current buffer's file.
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1513 Optional arg (interactive prefix) non-nil means prompt for user name and site.
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1514 Second arg is file name of change log. \
20967
e57454838582 (vc-checkin-hook): Add :options.
Dave Love <fx@gnu.org>
parents: 20752
diff changeset
1515 If nil, uses `change-log-default-name'.
e57454838582 (vc-checkin-hook): Add :options.
Dave Love <fx@gnu.org>
parents: 20752
diff changeset
1516
e57454838582 (vc-checkin-hook): Add :options.
Dave Love <fx@gnu.org>
parents: 20752
diff changeset
1517 May be useful as a `vc-checkin-hook' to update change logs automatically."
4158
469c093061bf (vc-comment-to-change-log): Copy interactive spec from
Roland McGrath <roland@gnu.org>
parents: 4156
diff changeset
1518 (interactive (if current-prefix-arg
469c093061bf (vc-comment-to-change-log): Copy interactive spec from
Roland McGrath <roland@gnu.org>
parents: 4156
diff changeset
1519 (list current-prefix-arg
469c093061bf (vc-comment-to-change-log): Copy interactive spec from
Roland McGrath <roland@gnu.org>
parents: 4156
diff changeset
1520 (prompt-for-change-log-name))))
5871
49029e28ed2c (vc-comment-to-change-log): Load add-log before binding
Karl Heuer <kwzh@gnu.org>
parents: 5732
diff changeset
1521 ;; Make sure the defvar for add-log-current-defun-function has been executed
49029e28ed2c (vc-comment-to-change-log): Load add-log before binding
Karl Heuer <kwzh@gnu.org>
parents: 5732
diff changeset
1522 ;; before binding it.
49029e28ed2c (vc-comment-to-change-log): Load add-log before binding
Karl Heuer <kwzh@gnu.org>
parents: 5732
diff changeset
1523 (require 'add-log)
4155
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1524 (let (;; Extract the comment first so we get any error before doing anything.
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1525 (comment (ring-ref vc-comment-ring 0))
4158
469c093061bf (vc-comment-to-change-log): Copy interactive spec from
Roland McGrath <roland@gnu.org>
parents: 4156
diff changeset
1526 ;; Don't let add-change-log-entry insert a defun name.
4155
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1527 (add-log-current-defun-function 'ignore)
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1528 end)
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1529 ;; Call add-log to do half the work.
4158
469c093061bf (vc-comment-to-change-log): Copy interactive spec from
Roland McGrath <roland@gnu.org>
parents: 4156
diff changeset
1530 (add-change-log-entry whoami file-name t t)
4155
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1531 ;; Insert the VC comment, leaving point before it.
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1532 (setq end (save-excursion (insert comment) (point-marker)))
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1533 (if (looking-at "\\s *\\s(")
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1534 ;; It starts with an open-paren, as in "(foo): Frobbed."
4158
469c093061bf (vc-comment-to-change-log): Copy interactive spec from
Roland McGrath <roland@gnu.org>
parents: 4156
diff changeset
1535 ;; So remove the ": " add-log inserted.
4155
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1536 (delete-char -2))
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1537 ;; Canonicalize the white space between the file name and comment.
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1538 (just-one-space)
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1539 ;; Indent rest of the text the same way add-log indented the first line.
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1540 (let ((indentation (current-indentation)))
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1541 (save-excursion
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1542 (while (< (point) end)
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1543 (forward-line 1)
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1544 (indent-to indentation))
4156
0000c3af1836 (vc-comment-to-change-log): Canonicalize following whitespace after
Roland McGrath <roland@gnu.org>
parents: 4155
diff changeset
1545 (setq end (point))))
4155
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1546 ;; Fill the inserted text, preserving open-parens at bol.
10900
5b375fee0e1f (vc-comment-to-change-log): Remove ^ from paragraph-start & paragraph-separate.
Boris Goldowsky <boris@gnu.org>
parents: 10862
diff changeset
1547 (let ((paragraph-separate (concat paragraph-separate "\\|\\s *\\s("))
5b375fee0e1f (vc-comment-to-change-log): Remove ^ from paragraph-start & paragraph-separate.
Boris Goldowsky <boris@gnu.org>
parents: 10862
diff changeset
1548 (paragraph-start (concat paragraph-start "\\|\\s *\\s(")))
4158
469c093061bf (vc-comment-to-change-log): Copy interactive spec from
Roland McGrath <roland@gnu.org>
parents: 4156
diff changeset
1549 (beginning-of-line)
4156
0000c3af1836 (vc-comment-to-change-log): Canonicalize following whitespace after
Roland McGrath <roland@gnu.org>
parents: 4155
diff changeset
1550 (fill-region (point) end))
0000c3af1836 (vc-comment-to-change-log): Canonicalize following whitespace after
Roland McGrath <roland@gnu.org>
parents: 4155
diff changeset
1551 ;; Canonicalize the white space at the end of the entry so it is
0000c3af1836 (vc-comment-to-change-log): Canonicalize following whitespace after
Roland McGrath <roland@gnu.org>
parents: 4155
diff changeset
1552 ;; separated from the next entry by a single blank line.
0000c3af1836 (vc-comment-to-change-log): Canonicalize following whitespace after
Roland McGrath <roland@gnu.org>
parents: 4155
diff changeset
1553 (skip-syntax-forward " " end)
0000c3af1836 (vc-comment-to-change-log): Canonicalize following whitespace after
Roland McGrath <roland@gnu.org>
parents: 4155
diff changeset
1554 (delete-char (- (skip-syntax-backward " ")))
0000c3af1836 (vc-comment-to-change-log): Canonicalize following whitespace after
Roland McGrath <roland@gnu.org>
parents: 4155
diff changeset
1555 (or (eobp) (looking-at "\n\n")
0000c3af1836 (vc-comment-to-change-log): Canonicalize following whitespace after
Roland McGrath <roland@gnu.org>
parents: 4155
diff changeset
1556 (insert "\n"))))
4155
9f0a271fa24f (vc-comment-to-change-log): Complete rewrite. Do not use
Roland McGrath <roland@gnu.org>
parents: 4000
diff changeset
1557
2580
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
1558 (defun vc-finish-logentry (&optional nocomment)
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1559 "Complete the operation implied by the current log entry."
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1560 (interactive)
2580
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
1561 ;; Check and record the comment, if any.
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1562 (unless nocomment
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1563 ;; Comment too long?
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1564 (vc-call-backend (or (and vc-log-file (vc-backend vc-log-file))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1565 (vc-responsible-backend default-directory))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1566 'logentry-check)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1567 (run-hooks 'vc-logentry-check-hook)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1568 ;; Record the comment in the comment ring
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1569 (let ((comment (buffer-string)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1570 (unless (and (ring-p vc-comment-ring)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1571 (not (ring-empty-p vc-comment-ring))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1572 (equal comment (ring-ref vc-comment-ring 0)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1573 (ring-insert vc-comment-ring comment))))
5428
e66b058ec9f6 (vc-finish-logentry): Sync the buffer in case the user modified it while
Paul Eggert <eggert@twinsun.com>
parents: 5338
diff changeset
1574 ;; Sync parent buffer in case the user modified it while editing the comment.
8349
a61f6295ee0e (vc-next-action): Even in 1-file case, get its name from FILES.
Richard M. Stallman <rms@gnu.org>
parents: 8290
diff changeset
1575 ;; But not if it is a vc-dired buffer.
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1576 (with-current-buffer vc-parent-buffer
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1577 (or vc-dired-mode (vc-buffer-sync)))
12885
5c1941d38daa (vc-next-action-on-file): Changed doc string, CVS case.
André Spiegel <spiegel@gnu.org>
parents: 12876
diff changeset
1578 (if (not vc-log-operation) (error "No log operation is pending"))
5c1941d38daa (vc-next-action-on-file): Changed doc string, CVS case.
André Spiegel <spiegel@gnu.org>
parents: 12876
diff changeset
1579 ;; save the parameters held in buffer-local variables
5c1941d38daa (vc-next-action-on-file): Changed doc string, CVS case.
André Spiegel <spiegel@gnu.org>
parents: 12876
diff changeset
1580 (let ((log-operation vc-log-operation)
5c1941d38daa (vc-next-action-on-file): Changed doc string, CVS case.
André Spiegel <spiegel@gnu.org>
parents: 12876
diff changeset
1581 (log-file vc-log-file)
5c1941d38daa (vc-next-action-on-file): Changed doc string, CVS case.
André Spiegel <spiegel@gnu.org>
parents: 12876
diff changeset
1582 (log-version vc-log-version)
5c1941d38daa (vc-next-action-on-file): Changed doc string, CVS case.
André Spiegel <spiegel@gnu.org>
parents: 12876
diff changeset
1583 (log-entry (buffer-string))
24477
b3b029a06e34 (vc-delete-logbuf-window): New var.
Karl Heuer <kwzh@gnu.org>
parents: 24139
diff changeset
1584 (after-hook vc-log-after-operation-hook)
b3b029a06e34 (vc-delete-logbuf-window): New var.
Karl Heuer <kwzh@gnu.org>
parents: 24139
diff changeset
1585 (tmp-vc-parent-buffer vc-parent-buffer))
8237
189d7c4eaf68 (vc-finish-logentry): Use the value of vc-log-after-operation-hook of
Richard M. Stallman <rms@gnu.org>
parents: 8159
diff changeset
1586 (pop-to-buffer vc-parent-buffer)
12885
5c1941d38daa (vc-next-action-on-file): Changed doc string, CVS case.
André Spiegel <spiegel@gnu.org>
parents: 12876
diff changeset
1587 ;; OK, do it to it
5c1941d38daa (vc-next-action-on-file): Changed doc string, CVS case.
André Spiegel <spiegel@gnu.org>
parents: 12876
diff changeset
1588 (save-excursion
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1589 (funcall log-operation
12885
5c1941d38daa (vc-next-action-on-file): Changed doc string, CVS case.
André Spiegel <spiegel@gnu.org>
parents: 12876
diff changeset
1590 log-file
5c1941d38daa (vc-next-action-on-file): Changed doc string, CVS case.
André Spiegel <spiegel@gnu.org>
parents: 12876
diff changeset
1591 log-version
5c1941d38daa (vc-next-action-on-file): Changed doc string, CVS case.
André Spiegel <spiegel@gnu.org>
parents: 12876
diff changeset
1592 log-entry))
20661
e3498221274f (vc-finish-logentry): Move killing the log buffer after
Karl Heuer <kwzh@gnu.org>
parents: 20602
diff changeset
1593 ;; Remove checkin window (after the checkin so that if that fails
e3498221274f (vc-finish-logentry): Move killing the log buffer after
Karl Heuer <kwzh@gnu.org>
parents: 20602
diff changeset
1594 ;; we don't zap the *VC-log* buffer and the typing therein).
e3498221274f (vc-finish-logentry): Move killing the log buffer after
Karl Heuer <kwzh@gnu.org>
parents: 20602
diff changeset
1595 (let ((logbuf (get-buffer "*VC-log*")))
24477
b3b029a06e34 (vc-delete-logbuf-window): New var.
Karl Heuer <kwzh@gnu.org>
parents: 24139
diff changeset
1596 (cond ((and logbuf vc-delete-logbuf-window)
b3b029a06e34 (vc-delete-logbuf-window): New var.
Karl Heuer <kwzh@gnu.org>
parents: 24139
diff changeset
1597 (delete-windows-on logbuf (selected-frame))
22721
d023df160219 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 22715
diff changeset
1598 ;; Kill buffer and delete any other dedicated windows/frames.
24477
b3b029a06e34 (vc-delete-logbuf-window): New var.
Karl Heuer <kwzh@gnu.org>
parents: 24139
diff changeset
1599 (kill-buffer logbuf))
32054
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1600 (logbuf (pop-to-buffer "*VC-log*")
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1601 (bury-buffer)
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1602 (pop-to-buffer tmp-vc-parent-buffer))))
8237
189d7c4eaf68 (vc-finish-logentry): Use the value of vc-log-after-operation-hook of
Richard M. Stallman <rms@gnu.org>
parents: 8159
diff changeset
1603 ;; Now make sure we see the expanded headers
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
1604 (if log-file
32054
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1605 (vc-resynch-buffer log-file vc-keep-workfiles t))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1606 (if vc-dired-mode
32054
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
1607 (dired-move-to-filename))
17101
436e2bd4efcc (vc-log-mode): New optional arg FILE. Set vc-log-file here.
Karl Heuer <kwzh@gnu.org>
parents: 16993
diff changeset
1608 (run-hooks after-hook 'vc-finish-logentry-hook)))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1609
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1610 ;; Code for access to the comment ring
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1611
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1612 (defun vc-new-comment-index (stride len)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1613 (mod (cond
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1614 (vc-comment-ring-index (+ vc-comment-ring-index stride))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1615 ;; Initialize the index on the first use of this command
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1616 ;; so that the first M-p gets index 0, and the first M-n gets
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1617 ;; index -1.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1618 ((> stride 0) (1- stride))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1619 (t stride))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1620 len))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1621
2580
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
1622 (defun vc-previous-comment (arg)
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
1623 "Cycle backwards through comment history."
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
1624 (interactive "*p")
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
1625 (let ((len (ring-length vc-comment-ring)))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1626 (if (<= len 0)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1627 (progn (message "Empty comment ring") (ding))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1628 (erase-buffer)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1629 (setq vc-comment-ring-index (vc-new-comment-index arg len))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1630 (message "Comment %d" (1+ vc-comment-ring-index))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1631 (insert (ring-ref vc-comment-ring vc-comment-ring-index)))))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1632
2580
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
1633 (defun vc-next-comment (arg)
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
1634 "Cycle forwards through comment history."
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
1635 (interactive "*p")
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
1636 (vc-previous-comment (- arg)))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1637
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1638 (defun vc-comment-search-reverse (str &optional stride)
32189
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
1639 "Search backwards through comment history for substring match."
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1640 ;; Why substring rather than regexp ? -sm
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1641 (interactive
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1642 (list (read-string "Comment substring: " nil nil vc-last-comment-match)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1643 (unless stride (setq stride 1))
2580
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
1644 (if (string= str "")
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
1645 (setq str vc-last-comment-match)
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
1646 (setq vc-last-comment-match str))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1647 (let* ((str (regexp-quote str))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1648 (len (ring-length vc-comment-ring))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1649 (n (vc-new-comment-index stride len)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1650 (while (progn (when (or (>= n len) (< n 0)) (error "Not found"))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1651 (not (string-match str (ring-ref vc-comment-ring n))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1652 (setq n (+ n stride)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1653 (setq vc-comment-ring-index n)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1654 (vc-previous-comment 0)))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1655
2580
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
1656 (defun vc-comment-search-forward (str)
32189
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
1657 "Search forwards through comment history for substring match."
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1658 (interactive
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1659 (list (read-string "Comment substring: " nil nil vc-last-comment-match)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1660 (vc-comment-search-reverse str -1))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1661
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1662 ;; Additional entry points for examining version histories
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1663
927
587a08c3a70b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 904
diff changeset
1664 ;;;###autoload
5338
b3a78854c791 (vc-buffer-sync, vc-diff): New arg NOT-URGENT.
Richard M. Stallman <rms@gnu.org>
parents: 5263
diff changeset
1665 (defun vc-diff (historic &optional not-urgent)
2667
62869d996485 (vc-backend-diff): Use diff-switches, not vc-diff-options.
Richard M. Stallman <rms@gnu.org>
parents: 2666
diff changeset
1666 "Display diffs between file versions.
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1667 Normally this compares the current file and buffer with the most recent
2667
62869d996485 (vc-backend-diff): Use diff-switches, not vc-diff-options.
Richard M. Stallman <rms@gnu.org>
parents: 2666
diff changeset
1668 checked in version of that file. This uses no arguments.
62869d996485 (vc-backend-diff): Use diff-switches, not vc-diff-options.
Richard M. Stallman <rms@gnu.org>
parents: 2666
diff changeset
1669 With a prefix argument, it reads the file name to use
62869d996485 (vc-backend-diff): Use diff-switches, not vc-diff-options.
Richard M. Stallman <rms@gnu.org>
parents: 2666
diff changeset
1670 and two version designators specifying which versions to compare."
14376
eb8910a353fc (vc-diff): Make NOT-URGENT default to t.
Richard M. Stallman <rms@gnu.org>
parents: 14297
diff changeset
1671 (interactive (list current-prefix-arg t))
21366
e7b64d0b3b3d (vc-ensure-vc-buffer): New function.
André Spiegel <spiegel@gnu.org>
parents: 21357
diff changeset
1672 (vc-ensure-vc-buffer)
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1673 (if historic
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1674 (call-interactively 'vc-version-diff)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1675 (let ((file buffer-file-name))
19055
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
1676 (vc-buffer-sync not-urgent)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1677 (if (vc-workfile-unchanged-p buffer-file-name)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1678 (message "No changes to %s since latest version" file)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1679 (vc-version-diff file nil nil)))))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1680
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1681 (defun vc-version-diff (file rel1 rel2)
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1682 "For FILE, report diffs between two stored versions REL1 and REL2 of it.
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1683 If FILE is a directory, generate diffs between versions for all registered
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1684 files in or below it."
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1685 (interactive
27436
564f85cd6921 (vc-version-diff): Make sure file name is expanded.
Gerd Moellmann <gerd@gnu.org>
parents: 26685
diff changeset
1686 (let ((file (expand-file-name
564f85cd6921 (vc-version-diff): Make sure file name is expanded.
Gerd Moellmann <gerd@gnu.org>
parents: 26685
diff changeset
1687 (read-file-name (if buffer-file-name
564f85cd6921 (vc-version-diff): Make sure file name is expanded.
Gerd Moellmann <gerd@gnu.org>
parents: 26685
diff changeset
1688 "File or dir to diff: (default visited file) "
564f85cd6921 (vc-version-diff): Make sure file name is expanded.
Gerd Moellmann <gerd@gnu.org>
parents: 26685
diff changeset
1689 "File or dir to diff: ")
564f85cd6921 (vc-version-diff): Make sure file name is expanded.
Gerd Moellmann <gerd@gnu.org>
parents: 26685
diff changeset
1690 default-directory buffer-file-name t)))
19055
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
1691 (rel1-default nil) (rel2-default nil))
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
1692 ;; compute default versions based on the file state
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
1693 (cond
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1694 ;; if it's a directory, don't supply any version default
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1695 ((file-directory-p file)
19055
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
1696 nil)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1697 ;; if the file is not up-to-date, use current version as older version
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1698 ((not (vc-up-to-date-p file))
19055
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
1699 (setq rel1-default (vc-workfile-version file)))
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
1700 ;; if the file is not locked, use last and previous version as default
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
1701 (t
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
1702 (setq rel1-default (vc-previous-version (vc-workfile-version file)))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1703 (if (string= rel1-default "") (setq rel1-default nil))
19055
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
1704 (setq rel2-default (vc-workfile-version file))))
5439070e5d46 (vc-backend-checkin): For CVS, forget the checkout model after commit.
Richard M. Stallman <rms@gnu.org>
parents: 18857
diff changeset
1705 ;; construct argument list
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1706 (list file
19126
c57d673ff676 (vc-version-diff): Use defaults, not initial input,
Richard M. Stallman <rms@gnu.org>
parents: 19055
diff changeset
1707 (read-string (if rel1-default
c57d673ff676 (vc-version-diff): Use defaults, not initial input,
Richard M. Stallman <rms@gnu.org>
parents: 19055
diff changeset
1708 (concat "Older version: (default "
c57d673ff676 (vc-version-diff): Use defaults, not initial input,
Richard M. Stallman <rms@gnu.org>
parents: 19055
diff changeset
1709 rel1-default ") ")
c57d673ff676 (vc-version-diff): Use defaults, not initial input,
Richard M. Stallman <rms@gnu.org>
parents: 19055
diff changeset
1710 "Older version: ")
c57d673ff676 (vc-version-diff): Use defaults, not initial input,
Richard M. Stallman <rms@gnu.org>
parents: 19055
diff changeset
1711 nil nil rel1-default)
c57d673ff676 (vc-version-diff): Use defaults, not initial input,
Richard M. Stallman <rms@gnu.org>
parents: 19055
diff changeset
1712 (read-string (if rel2-default
c57d673ff676 (vc-version-diff): Use defaults, not initial input,
Richard M. Stallman <rms@gnu.org>
parents: 19055
diff changeset
1713 (concat "Newer version: (default "
c57d673ff676 (vc-version-diff): Use defaults, not initial input,
Richard M. Stallman <rms@gnu.org>
parents: 19055
diff changeset
1714 rel2-default ") ")
19177
31175a4bf0a6 (vc-version-diff): Change the Newer version prompt.
Richard M. Stallman <rms@gnu.org>
parents: 19126
diff changeset
1715 "Newer version (default: current source): ")
19126
c57d673ff676 (vc-version-diff): Use defaults, not initial input,
Richard M. Stallman <rms@gnu.org>
parents: 19055
diff changeset
1716 nil nil rel2-default))))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1717 (if (file-directory-p file)
32126
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
1718 ;; recursive directory diff
36710
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
1719 (progn
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
1720 (vc-setup-buffer "*vc-diff*")
32126
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
1721 (if (string-equal rel1 "") (setq rel1 nil))
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
1722 (if (string-equal rel2 "") (setq rel2 nil))
36710
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
1723 (let ((inhibit-read-only t))
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
1724 (insert "Diffs between "
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
1725 (or rel1 "last version checked in")
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
1726 " and "
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
1727 (or rel2 "current workfile(s)")
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
1728 ":\n\n"))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1729 (setq default-directory (file-name-as-directory file))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1730 ;; FIXME: this should do a single exec in CVS.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1731 (vc-file-tree-walk
13012
ac84d1c8c770 (vc-dired-mode): Now a major mode derived from dired-mode.
André Spiegel <spiegel@gnu.org>
parents: 12968
diff changeset
1732 default-directory
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1733 (lambda (f)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1734 (vc-exec-after
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1735 `(progn
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1736 (message "Looking at %s" ',f)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1737 (vc-call-backend ',(vc-backend file) 'diff ',f ',rel1 ',rel2)))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1738 (vc-exec-after `(let ((inhibit-read-only t))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1739 (insert "\nEnd of diffs.\n"))))
32126
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
1740 ;; single file diff
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
1741 (if (or (not rel1) (string-equal rel1 ""))
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
1742 (setq rel1 (vc-workfile-version file)))
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
1743 (if (string-equal rel2 "")
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
1744 (setq rel2 nil))
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
1745 (let ((file-rel1 (vc-version-backup-file file rel1))
32310
bb71607dc3db (vc-version-diff): diff-switches can be a list.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32189
diff changeset
1746 (file-rel2 (if (not rel2)
bb71607dc3db (vc-version-diff): diff-switches can be a list.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32189
diff changeset
1747 file
32126
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
1748 (vc-version-backup-file file rel2))))
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
1749 (if (and file-rel1 file-rel2)
36710
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
1750 (apply 'vc-do-command "*vc-diff*" 1 "diff" nil
32310
bb71607dc3db (vc-version-diff): diff-switches can be a list.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32189
diff changeset
1751 (append (if (listp diff-switches)
bb71607dc3db (vc-version-diff): diff-switches can be a list.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32189
diff changeset
1752 diff-switches
bb71607dc3db (vc-version-diff): diff-switches can be a list.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32189
diff changeset
1753 (list diff-switches))
35820
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
1754 (if (listp vc-diff-switches)
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
1755 vc-diff-switches
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
1756 (list vc-diff-switches))
32310
bb71607dc3db (vc-version-diff): diff-switches can be a list.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32189
diff changeset
1757 (list (file-relative-name file-rel1)
bb71607dc3db (vc-version-diff): diff-switches can be a list.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32189
diff changeset
1758 (file-relative-name file-rel2))))
32126
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
1759 (vc-call diff file rel1 rel2))))
36710
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
1760 (set-buffer "*vc-diff*")
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1761 (if (and (zerop (buffer-size))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1762 (not (get-buffer-process (current-buffer))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1763 (progn
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1764 (if rel1
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1765 (if rel2
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1766 (message "No changes to %s between %s and %s" file rel1 rel2)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1767 (message "No changes to %s since %s" file rel1))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1768 (message "No changes to %s since latest version" file))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1769 nil)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1770 (pop-to-buffer (current-buffer))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1771 ;; Gnus-5.8.5 sets up an autoload for diff-mode, even if it's
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1772 ;; not available. Work around that.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1773 (if (require 'diff-mode nil t) (diff-mode))
33564
d8c822512b62 (vc-version-diff): Bind inhibit-read-only when inserting text.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33562
diff changeset
1774 (vc-exec-after '(let ((inhibit-read-only t))
d8c822512b62 (vc-version-diff): Bind inhibit-read-only when inserting text.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33562
diff changeset
1775 (if (eq (buffer-size) 0)
d8c822512b62 (vc-version-diff): Bind inhibit-read-only when inserting text.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33562
diff changeset
1776 (insert "No differences found.\n"))
d8c822512b62 (vc-version-diff): Bind inhibit-read-only when inserting text.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33562
diff changeset
1777 (goto-char (point-min))
d8c822512b62 (vc-version-diff): Bind inhibit-read-only when inserting text.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33562
diff changeset
1778 (shrink-window-if-larger-than-buffer)))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1779 t))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1780
35820
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
1781 (defmacro vc-diff-switches-list (backend)
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
1782 "Make a list of `diff-switches', `vc-diff-switches',
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
1783 and `vc-BACKEND-diff-switches'."
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
1784 `(append
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
1785 (if (listp diff-switches) diff-switches (list diff-switches))
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
1786 (if (listp vc-diff-switches) vc-diff-switches (list vc-diff-switches))
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
1787 (let ((backend-switches
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
1788 (eval (intern (concat "vc-" (symbol-name ',backend)
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
1789 "-diff-switches")))))
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
1790 (if (listp backend-switches) backend-switches (list backend-switches)))))
3cfa6e077b83 (vc-diff-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 35199
diff changeset
1791
4725
126cf4bdfd35 (vc-version-other-window): New function.
Paul Eggert <eggert@twinsun.com>
parents: 4684
diff changeset
1792 ;;;###autoload
126cf4bdfd35 (vc-version-other-window): New function.
Paul Eggert <eggert@twinsun.com>
parents: 4684
diff changeset
1793 (defun vc-version-other-window (rev)
126cf4bdfd35 (vc-version-other-window): New function.
Paul Eggert <eggert@twinsun.com>
parents: 4684
diff changeset
1794 "Visit version REV of the current buffer in another window.
126cf4bdfd35 (vc-version-other-window): New function.
Paul Eggert <eggert@twinsun.com>
parents: 4684
diff changeset
1795 If the current buffer is named `F', the version is named `F.~REV~'.
126cf4bdfd35 (vc-version-other-window): New function.
Paul Eggert <eggert@twinsun.com>
parents: 4684
diff changeset
1796 If `F.~REV~' already exists, it is used instead of being re-created."
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1797 (interactive "sVersion to visit (default is workfile version): ")
21366
e7b64d0b3b3d (vc-ensure-vc-buffer): New function.
André Spiegel <spiegel@gnu.org>
parents: 21357
diff changeset
1798 (vc-ensure-vc-buffer)
32888
78063b725d3f (vc-version-other-window): Bind `file'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32748
diff changeset
1799 (let* ((file buffer-file-name)
78063b725d3f (vc-version-other-window): Bind `file'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32748
diff changeset
1800 (version (if (string-equal rev "")
78063b725d3f (vc-version-other-window): Bind `file'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32748
diff changeset
1801 (vc-workfile-version file)
21366
e7b64d0b3b3d (vc-ensure-vc-buffer): New function.
André Spiegel <spiegel@gnu.org>
parents: 21357
diff changeset
1802 rev))
32748
e2cb0aef151a (vc-checkout): Added `-p' suffix in call to vc-make-version-backups-p;
André Spiegel <spiegel@gnu.org>
parents: 32344
diff changeset
1803 (automatic-backup (vc-version-backup-file-name file version))
e2cb0aef151a (vc-checkout): Added `-p' suffix in call to vc-make-version-backups-p;
André Spiegel <spiegel@gnu.org>
parents: 32344
diff changeset
1804 (manual-backup (vc-version-backup-file-name file version 'manual)))
e2cb0aef151a (vc-checkout): Added `-p' suffix in call to vc-make-version-backups-p;
André Spiegel <spiegel@gnu.org>
parents: 32344
diff changeset
1805 (unless (file-exists-p manual-backup)
e2cb0aef151a (vc-checkout): Added `-p' suffix in call to vc-make-version-backups-p;
André Spiegel <spiegel@gnu.org>
parents: 32344
diff changeset
1806 (if (file-exists-p automatic-backup)
32950
c558cd950ace (vc-version-other-window): If an automatic backup of the desired
André Spiegel <spiegel@gnu.org>
parents: 32930
diff changeset
1807 (rename-file automatic-backup manual-backup nil)
32888
78063b725d3f (vc-version-other-window): Bind `file'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32748
diff changeset
1808 (vc-call checkout file nil version manual-backup)))
32748
e2cb0aef151a (vc-checkout): Added `-p' suffix in call to vc-make-version-backups-p;
André Spiegel <spiegel@gnu.org>
parents: 32344
diff changeset
1809 (find-file-other-window manual-backup)))
4725
126cf4bdfd35 (vc-version-other-window): New function.
Paul Eggert <eggert@twinsun.com>
parents: 4684
diff changeset
1810
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1811 ;; Header-insertion code
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1812
927
587a08c3a70b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 904
diff changeset
1813 ;;;###autoload
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1814 (defun vc-insert-headers ()
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1815 "Insert headers in a file for use with your version control system.
23235
7f3fdbb83988 (vc-insert-headers): Doc fix.
Dave Love <fx@gnu.org>
parents: 22905
diff changeset
1816 Headers desired are inserted at point, and are pulled from
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1817 the variable `vc-BACKEND-header'."
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1818 (interactive)
21366
e7b64d0b3b3d (vc-ensure-vc-buffer): New function.
André Spiegel <spiegel@gnu.org>
parents: 21357
diff changeset
1819 (vc-ensure-vc-buffer)
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1820 (save-excursion
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1821 (save-restriction
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1822 (widen)
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1823 (if (or (not (vc-check-headers))
3227
b2e2fcc4fb24 (vc-steal-lock, vc-insert-headers): Fix question whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 2968
diff changeset
1824 (y-or-n-p "Version headers already exist. Insert another set? "))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1825 (progn
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1826 (let* ((delims (cdr (assq major-mode vc-comment-alist)))
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1827 (comment-start-vc (or (car delims) comment-start "#"))
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1828 (comment-end-vc (or (car (cdr delims)) comment-end ""))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1829 (hdsym (vc-make-backend-sym (vc-backend (buffer-file-name))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1830 'header))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1831 (hdstrings (and (boundp hdsym) (symbol-value hdsym))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1832 (mapcar (lambda (s)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1833 (insert comment-start-vc "\t" s "\t"
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1834 comment-end-vc "\n"))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1835 hdstrings)
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1836 (if vc-static-header-alist
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1837 (mapcar (lambda (f)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1838 (if (string-match (car f) buffer-file-name)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1839 (insert (format (cdr f) (car hdstrings)))))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1840 vc-static-header-alist))
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1841 )
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1842 )))))
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
1843
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1844 (defun vc-clear-headers (&optional file)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1845 "Clear all version headers in the current buffer (or FILE).
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1846 I.e. reset them to the non-expanded form."
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1847 (let* ((filename (or file buffer-file-name))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1848 (visited (find-buffer-visiting filename))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1849 (backend (vc-backend filename)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1850 (when (vc-find-backend-function backend 'clear-headers)
31565
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
1851 (if visited
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1852 (let ((context (vc-buffer-context)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1853 ;; save-excursion may be able to relocate point and mark
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1854 ;; properly. If it fails, vc-restore-buffer-context
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1855 ;; will give it a second try.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1856 (save-excursion
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1857 (vc-call-backend backend 'clear-headers))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1858 (vc-restore-buffer-context context))
32058
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
1859 (set-buffer (find-file-noselect filename))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1860 (vc-call-backend backend 'clear-headers)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1861 (kill-buffer filename)))))
12872
857663042672 (vc-revert-buffer1): Split part of the function into vc-buffer-context
André Spiegel <spiegel@gnu.org>
parents: 12819
diff changeset
1862
21366
e7b64d0b3b3d (vc-ensure-vc-buffer): New function.
André Spiegel <spiegel@gnu.org>
parents: 21357
diff changeset
1863 ;;;###autoload
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1864 (defun vc-merge ()
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1865 "Merge changes between two versions into the current buffer's file.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1866 This asks for two versions to merge from in the minibuffer. If the
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1867 first version is a branch number, then merge all changes from that
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1868 branch. If the first version is empty, merge news, i.e. recent changes
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1869 from the current branch.
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1870
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1871 See Info node `Merging'."
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1872 (interactive)
21368
37b978fc46cb (vc-merge, vc-backend-merge): New functions.
André Spiegel <spiegel@gnu.org>
parents: 21366
diff changeset
1873 (vc-ensure-vc-buffer)
37b978fc46cb (vc-merge, vc-backend-merge): New functions.
André Spiegel <spiegel@gnu.org>
parents: 21366
diff changeset
1874 (vc-buffer-sync)
37b978fc46cb (vc-merge, vc-backend-merge): New functions.
André Spiegel <spiegel@gnu.org>
parents: 21366
diff changeset
1875 (let* ((file buffer-file-name)
37b978fc46cb (vc-merge, vc-backend-merge): New functions.
André Spiegel <spiegel@gnu.org>
parents: 21366
diff changeset
1876 (backend (vc-backend file))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1877 (state (vc-state file))
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1878 first-version second-version status)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1879 (cond
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1880 ((stringp state)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1881 (error "File is locked by %s" state))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1882 ((not (vc-editable-p file))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1883 (if (y-or-n-p
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1884 "File must be checked out for merging. Check out now? ")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1885 (vc-checkout file t)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1886 (error "Merge aborted"))))
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
1887 (setq first-version
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1888 (read-string (concat "Branch or version to merge from "
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1889 "(default: news on current branch): ")))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1890 (if (string= first-version "")
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1891 (if (not (vc-find-backend-function backend 'merge-news))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1892 (error "Sorry, merging news is not implemented for %s" backend)
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1893 (setq status (vc-call merge-news file)))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1894 (if (not (vc-find-backend-function backend 'merge))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1895 (error "Sorry, merging is not implemented for %s" backend)
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1896 (if (not (vc-branch-p first-version))
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
1897 (setq second-version
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
1898 (read-string "Second version: "
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1899 (concat (vc-branch-part first-version) ".")))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1900 ;; We want to merge an entire branch. Set versions
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1901 ;; accordingly, so that vc-BACKEND-merge understands us.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1902 (setq second-version first-version)
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1903 ;; first-version must be the starting point of the branch
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1904 (setq first-version (vc-branch-part first-version)))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1905 (setq status (vc-call merge file first-version second-version))))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
1906 (vc-maybe-resolve-conflicts file status "WORKFILE" "MERGE SOURCE")))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1907
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1908 (defun vc-maybe-resolve-conflicts (file status &optional name-A name-B)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1909 (vc-resynch-buffer file t (not (buffer-modified-p)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1910 (if (zerop status) (message "Merge successful")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1911 (if (fboundp 'smerge-mode) (smerge-mode 1))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1912 (if (y-or-n-p "Conflicts detected. Resolve them now? ")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1913 (if (fboundp 'smerge-ediff)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1914 (smerge-ediff)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1915 (vc-resolve-conflicts name-A name-B))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1916 (message "File contains conflict markers"))))
21368
37b978fc46cb (vc-merge, vc-backend-merge): New functions.
André Spiegel <spiegel@gnu.org>
parents: 21366
diff changeset
1917
23792
ec06ad058029 (vc-dired-window-configuration, vc-ediff-windows,
André Spiegel <spiegel@gnu.org>
parents: 23635
diff changeset
1918 (defvar vc-ediff-windows)
ec06ad058029 (vc-dired-window-configuration, vc-ediff-windows,
André Spiegel <spiegel@gnu.org>
parents: 23635
diff changeset
1919 (defvar vc-ediff-result)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1920 (eval-when-compile
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1921 (defvar ediff-buffer-A)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1922 (defvar ediff-buffer-B)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1923 (defvar ediff-buffer-C)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1924 (require 'ediff-util))
21368
37b978fc46cb (vc-merge, vc-backend-merge): New functions.
André Spiegel <spiegel@gnu.org>
parents: 21366
diff changeset
1925 ;;;###autoload
37b978fc46cb (vc-merge, vc-backend-merge): New functions.
André Spiegel <spiegel@gnu.org>
parents: 21366
diff changeset
1926 (defun vc-resolve-conflicts (&optional name-A name-B)
21324
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1927 "Invoke ediff to resolve conflicts in the current buffer.
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1928 The conflicts must be marked with rcsmerge conflict markers."
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1929 (interactive)
21366
e7b64d0b3b3d (vc-ensure-vc-buffer): New function.
André Spiegel <spiegel@gnu.org>
parents: 21357
diff changeset
1930 (vc-ensure-vc-buffer)
21324
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1931 (let* ((found nil)
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1932 (file-name (file-name-nondirectory buffer-file-name))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1933 (your-buffer (generate-new-buffer
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1934 (concat "*" file-name
21368
37b978fc46cb (vc-merge, vc-backend-merge): New functions.
André Spiegel <spiegel@gnu.org>
parents: 21366
diff changeset
1935 " " (or name-A "WORKFILE") "*")))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1936 (other-buffer (generate-new-buffer
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1937 (concat "*" file-name
21368
37b978fc46cb (vc-merge, vc-backend-merge): New functions.
André Spiegel <spiegel@gnu.org>
parents: 21366
diff changeset
1938 " " (or name-B "CHECKED-IN") "*")))
21324
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1939 (result-buffer (current-buffer)))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1940 (save-excursion
21324
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1941 (set-buffer your-buffer)
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1942 (erase-buffer)
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1943 (insert-buffer result-buffer)
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1944 (goto-char (point-min))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1945 (while (re-search-forward (concat "^<<<<<<< "
21324
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1946 (regexp-quote file-name) "\n") nil t)
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1947 (setq found t)
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1948 (replace-match "")
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1949 (if (not (re-search-forward "^=======\n" nil t))
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1950 (error "Malformed conflict marker"))
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1951 (replace-match "")
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1952 (let ((start (point)))
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1953 (if (not (re-search-forward "^>>>>>>> [0-9.]+\n" nil t))
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1954 (error "Malformed conflict marker"))
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1955 (delete-region start (point))))
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1956 (if (not found)
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1957 (progn
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1958 (kill-buffer your-buffer)
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1959 (kill-buffer other-buffer)
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1960 (error "No conflict markers found")))
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1961 (set-buffer other-buffer)
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1962 (erase-buffer)
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1963 (insert-buffer result-buffer)
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1964 (goto-char (point-min))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1965 (while (re-search-forward (concat "^<<<<<<< "
21324
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1966 (regexp-quote file-name) "\n") nil t)
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1967 (let ((start (match-beginning 0)))
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1968 (if (not (re-search-forward "^=======\n" nil t))
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1969 (error "Malformed conflict marker"))
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1970 (delete-region start (point))
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1971 (if (not (re-search-forward "^>>>>>>> [0-9.]+\n" nil t))
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1972 (error "Malformed conflict marker"))
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1973 (replace-match "")))
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1974 (let ((config (current-window-configuration))
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1975 (ediff-default-variant 'default-B))
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1976
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1977 ;; Fire up ediff.
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1978
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1979 (set-buffer (ediff-merge-buffers your-buffer other-buffer))
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1980
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1981 ;; Ediff is now set up, and we are in the control buffer.
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1982 ;; Do a few further adjustments and take precautions for exit.
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1983
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1984 (make-local-variable 'vc-ediff-windows)
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1985 (setq vc-ediff-windows config)
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1986 (make-local-variable 'vc-ediff-result)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1987 (setq vc-ediff-result result-buffer)
21324
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
1988 (make-local-variable 'ediff-quit-hook)
31565
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
1989 (setq ediff-quit-hook
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1990 (lambda ()
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1991 (let ((buffer-A ediff-buffer-A)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1992 (buffer-B ediff-buffer-B)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1993 (buffer-C ediff-buffer-C)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1994 (result vc-ediff-result)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1995 (windows vc-ediff-windows))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1996 (ediff-cleanup-mess)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1997 (set-buffer result)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1998 (erase-buffer)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
1999 (insert-buffer buffer-C)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2000 (kill-buffer buffer-A)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2001 (kill-buffer buffer-B)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2002 (kill-buffer buffer-C)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2003 (set-window-configuration windows)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2004 (message "Conflict resolution finished; you may save the buffer"))))
21324
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
2005 (message "Please resolve conflicts now; exit ediff when done")
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
2006 nil))))
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
2007
13012
ac84d1c8c770 (vc-dired-mode): Now a major mode derived from dired-mode.
André Spiegel <spiegel@gnu.org>
parents: 12968
diff changeset
2008 ;; The VC directory major mode. Coopt Dired for this.
2490
70d00ecacc0d (vc-directory. vc-start-entry, vc-next-action, vc-next-action-on-file):
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2464
diff changeset
2009 ;; All VC commands get mapped into logical equivalents.
70d00ecacc0d (vc-directory. vc-start-entry, vc-next-action, vc-next-action-on-file):
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2464
diff changeset
2010
23792
ec06ad058029 (vc-dired-window-configuration, vc-ediff-windows,
André Spiegel <spiegel@gnu.org>
parents: 23635
diff changeset
2011 (defvar vc-dired-switches)
ec06ad058029 (vc-dired-window-configuration, vc-ediff-windows,
André Spiegel <spiegel@gnu.org>
parents: 23635
diff changeset
2012 (defvar vc-dired-terse-mode)
ec06ad058029 (vc-dired-window-configuration, vc-ediff-windows,
André Spiegel <spiegel@gnu.org>
parents: 23635
diff changeset
2013
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2014 (defvar vc-dired-mode-map
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2015 (let ((map (make-sparse-keymap))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2016 (vmap (make-sparse-keymap)))
38374
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
2017 (define-key map "\C-xv" vmap)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2018 (define-key map "v" vmap)
38374
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
2019 (set-keymap-parent vmap vc-prefix-map)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2020 (define-key vmap "t" 'vc-dired-toggle-terse-mode)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2021 map))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2022
13012
ac84d1c8c770 (vc-dired-mode): Now a major mode derived from dired-mode.
André Spiegel <spiegel@gnu.org>
parents: 12968
diff changeset
2023 (define-derived-mode vc-dired-mode dired-mode "Dired under VC"
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2024 "The major mode used in VC directory buffers.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2025
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2026 It works like Dired, but lists only files under version control, with
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2027 the current VC state of each file being indicated in the place of the
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2028 file's link count, owner, group and size. Subdirectories are also
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2029 listed, and you may insert them into the buffer as desired, like in
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2030 Dired.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2031
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2032 All Dired commands operate normally, with the exception of `v', which
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2033 is redefined as the version control prefix, so that you can type
21357
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2034 `vl', `v=' etc. to invoke `vc-print-log', `vc-diff', and the like on
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2035 the file named in the current Dired buffer line. `vv' invokes
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2036 `vc-next-action' on this file, or on all files currently marked.
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2037 There is a special command, `*l', to mark all files currently locked."
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2038 ;; define-derived-mode does it for us in Emacs-21, but not in Emacs-20.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2039 ;; We do it here because dired might not be loaded yet
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2040 ;; when vc-dired-mode-map is initialized.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2041 (set-keymap-parent vc-dired-mode-map dired-mode-map)
21370
e8224143df73 (vc-dired-mode): Make dired-after-readin-hook a local hook, not a local variable.
André Spiegel <spiegel@gnu.org>
parents: 21368
diff changeset
2042 (make-local-hook 'dired-after-readin-hook)
e8224143df73 (vc-dired-mode): Make dired-after-readin-hook a local hook, not a local variable.
André Spiegel <spiegel@gnu.org>
parents: 21368
diff changeset
2043 (add-hook 'dired-after-readin-hook 'vc-dired-hook nil t)
21560
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2044 ;; The following is slightly modified from dired.el,
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2045 ;; because file lines look a bit different in vc-dired-mode.
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2046 (set (make-local-variable 'dired-move-to-filename-regexp)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2047 (let*
21560
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2048 ((l "\\([A-Za-z]\\|[^\0-\177]\\)")
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2049 ;; In some locales, month abbreviations are as short as 2 letters,
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2050 ;; and they can be padded on the right with spaces.
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2051 (month (concat l l "+ *"))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2052 ;; Recognize any non-ASCII character.
21560
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2053 ;; The purpose is to match a Kanji character.
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2054 (k "[^\0-\177]")
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2055 ;; (k "[^\x00-\x7f\x80-\xff]")
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2056 (s " ")
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2057 (yyyy "[0-9][0-9][0-9][0-9]")
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2058 (mm "[ 0-1][0-9]")
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2059 (dd "[ 0-3][0-9]")
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2060 (HH:MM "[ 0-2][0-9]:[0-5][0-9]")
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2061 (western (concat "\\(" month s dd "\\|" dd s month "\\)"
24852
fb28ec3f61c7 Undo previous undo -- spiegel's change already corrected rms's.
Karl Heuer <kwzh@gnu.org>
parents: 24850
diff changeset
2062 s "\\(" HH:MM "\\|" s yyyy"\\|" yyyy s "\\)"))
21560
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2063 (japanese (concat mm k s dd k s "\\(" s HH:MM "\\|" yyyy k "\\)")))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2064 ;; the .* below ensures that we find the last match on a line
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2065 (concat ".*" s "\\(" western "\\|" japanese "\\)" s)))
22356
a1f8c5a5c3e1 (vc-directory): Bind vc-dired-switches in order to pass switches to vc-dired-mode.
André Spiegel <spiegel@gnu.org>
parents: 22345
diff changeset
2066 (and (boundp 'vc-dired-switches)
a1f8c5a5c3e1 (vc-directory): Bind vc-dired-switches in order to pass switches to vc-dired-mode.
André Spiegel <spiegel@gnu.org>
parents: 22345
diff changeset
2067 vc-dired-switches
a1f8c5a5c3e1 (vc-directory): Bind vc-dired-switches in order to pass switches to vc-dired-mode.
André Spiegel <spiegel@gnu.org>
parents: 22345
diff changeset
2068 (set (make-local-variable 'dired-actual-switches)
a1f8c5a5c3e1 (vc-directory): Bind vc-dired-switches in order to pass switches to vc-dired-mode.
André Spiegel <spiegel@gnu.org>
parents: 22345
diff changeset
2069 vc-dired-switches))
22437
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2070 (set (make-local-variable 'vc-dired-terse-mode) vc-dired-terse-display)
13012
ac84d1c8c770 (vc-dired-mode): Now a major mode derived from dired-mode.
André Spiegel <spiegel@gnu.org>
parents: 12968
diff changeset
2071 (setq vc-dired-mode t))
ac84d1c8c770 (vc-dired-mode): Now a major mode derived from dired-mode.
André Spiegel <spiegel@gnu.org>
parents: 12968
diff changeset
2072
22437
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2073 (defun vc-dired-toggle-terse-mode ()
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2074 "Toggle terse display in VC Dired."
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2075 (interactive)
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2076 (if (not vc-dired-mode)
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2077 nil
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2078 (setq vc-dired-terse-mode (not vc-dired-terse-mode))
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2079 (if vc-dired-terse-mode
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2080 (vc-dired-hook)
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2081 (revert-buffer))))
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2082
21357
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2083 (defun vc-dired-mark-locked ()
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2084 "Mark all files currently locked."
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2085 (interactive)
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2086 (dired-mark-if (let ((f (dired-get-filename nil t)))
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2087 (and f
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2088 (not (file-directory-p f))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2089 (not (vc-up-to-date-p f))))
21357
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2090 "locked file"))
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2091
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2092 (define-key vc-dired-mode-map "*l" 'vc-dired-mark-locked)
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2093
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2094 (defun vc-default-dired-state-info (backend file)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2095 (let ((state (vc-state file)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2096 (cond
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2097 ((stringp state) (concat "(" state ")"))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2098 ((eq state 'edited) (concat "(" (vc-user-login-name) ")"))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2099 ((eq state 'needs-merge) "(merge)")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2100 ((eq state 'needs-patch) "(patch)")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2101 ((eq state 'unlocked-changes) "(stale)"))))
12943
10d0f42db2da (vc-directory): Kill existing vc-dired buffers for this directory.
André Spiegel <spiegel@gnu.org>
parents: 12926
diff changeset
2102
2580
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
2103 (defun vc-dired-reformat-line (x)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2104 "Reformat a directory-listing line.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2105 Replace various columns with version control information.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2106 This code, like dired, assumes UNIX -l format."
21357
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2107 (beginning-of-line)
21560
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2108 (let ((pos (point)) limit perm date-and-file)
13012
ac84d1c8c770 (vc-dired-mode): Now a major mode derived from dired-mode.
André Spiegel <spiegel@gnu.org>
parents: 12968
diff changeset
2109 (end-of-line)
ac84d1c8c770 (vc-dired-mode): Now a major mode derived from dired-mode.
André Spiegel <spiegel@gnu.org>
parents: 12968
diff changeset
2110 (setq limit (point))
ac84d1c8c770 (vc-dired-mode): Now a major mode derived from dired-mode.
André Spiegel <spiegel@gnu.org>
parents: 12968
diff changeset
2111 (goto-char pos)
21560
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2112 (when
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2113 (or
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2114 (re-search-forward ;; owner and group
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2115 "^\\(..[drwxlts-]+ \\) *[0-9]+ [^ ]+ +[^ ]+ +[0-9]+\\( .*\\)"
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2116 limit t)
21560
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2117 (re-search-forward ;; only owner displayed
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2118 "^\\(..[drwxlts-]+ \\) *[0-9]+ [^ ]+ +[0-9]+\\( .*\\)"
21560
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2119 limit t)
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2120 (re-search-forward ;; OS/2 -l format, no links, owner, group
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2121 "^\\(..[drwxlts-]+ \\) *[0-9]+\\( .*\\)"
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2122 limit t))
13012
ac84d1c8c770 (vc-dired-mode): Now a major mode derived from dired-mode.
André Spiegel <spiegel@gnu.org>
parents: 12968
diff changeset
2123 (setq perm (match-string 1)
21560
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2124 date-and-file (match-string 2))
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2125 (setq x (substring (concat x " ") 0 10))
9e3de167472c (vc-dired-mode): Redefine dired-move-to-filename-regexp locally.
André Spiegel <spiegel@gnu.org>
parents: 21559
diff changeset
2126 (replace-match (concat perm x date-and-file)))))
2580
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
2127
21357
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2128 (defun vc-dired-hook ()
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2129 "Reformat the listing according to version control.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2130 Called by dired after any portion of a vc-dired buffer has been read in."
21357
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2131 (message "Getting version information... ")
21908
e35eb91f05cc (vc-fetch-cvs-status): Don't specify DIR on the command line.
André Spiegel <spiegel@gnu.org>
parents: 21669
diff changeset
2132 (let (subdir filename (buffer-read-only nil) cvs-dir)
21357
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2133 (goto-char (point-min))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2134 (while (not (eobp))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2135 (cond
21357
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2136 ;; subdir header line
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2137 ((setq subdir (dired-get-subdir))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2138 ;; if the backend supports it, get the state
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2139 ;; of all files in this directory at once
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2140 (let ((backend (vc-responsible-backend subdir)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2141 (if (vc-find-backend-function backend 'dir-state)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2142 (vc-call-backend backend 'dir-state subdir)))
21357
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2143 (forward-line 1)
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2144 ;; erase (but don't remove) the "total" line
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2145 (delete-region (point) (line-end-position))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2146 (beginning-of-line)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2147 (forward-line 1))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2148 ;; file line
21357
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2149 ((setq filename (dired-get-filename nil t))
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2150 (cond
22437
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2151 ;; subdir
21357
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2152 ((file-directory-p filename)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2153 (cond
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2154 ((member (file-name-nondirectory filename)
22437
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2155 vc-directory-exclusion-list)
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2156 (let ((pos (point)))
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2157 (dired-kill-tree filename)
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2158 (goto-char pos)
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2159 (dired-kill-line)))
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2160 (vc-dired-terse-mode
22453
9d9df85eb7fb (vc-dired-hook): Don't use dired-kill-line to remove directory lines
André Spiegel <spiegel@gnu.org>
parents: 22437
diff changeset
2161 ;; Don't show directories in terse mode. Don't use
9d9df85eb7fb (vc-dired-hook): Don't use dired-kill-line to remove directory lines
André Spiegel <spiegel@gnu.org>
parents: 22437
diff changeset
2162 ;; dired-kill-line to remove it, because in recursive listings,
9d9df85eb7fb (vc-dired-hook): Don't use dired-kill-line to remove directory lines
André Spiegel <spiegel@gnu.org>
parents: 22437
diff changeset
2163 ;; that would remove the directory contents as well.
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2164 (delete-region (line-beginning-position)
22453
9d9df85eb7fb (vc-dired-hook): Don't use dired-kill-line to remove directory lines
André Spiegel <spiegel@gnu.org>
parents: 22437
diff changeset
2165 (progn (forward-line 1) (point))))
22437
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2166 ((string-match "\\`\\.\\.?\\'" (file-name-nondirectory filename))
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2167 (dired-kill-line))
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2168 (t
21357
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2169 (vc-dired-reformat-line nil)
22437
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2170 (forward-line 1))))
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2171 ;; ordinary file
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2172 ((and (vc-backend filename)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2173 (not (and vc-dired-terse-mode
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2174 (vc-up-to-date-p filename))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2175 (vc-dired-reformat-line (vc-call dired-state-info filename))
21357
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2176 (forward-line 1))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2177 (t
21357
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2178 (dired-kill-line))))
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2179 ;; any other line
22437
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2180 (t (forward-line 1))))
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2181 (vc-dired-purge))
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2182 (message "Getting version information... done")
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2183 (save-restriction
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2184 (widen)
22453
9d9df85eb7fb (vc-dired-hook): Don't use dired-kill-line to remove directory lines
André Spiegel <spiegel@gnu.org>
parents: 22437
diff changeset
2185 (cond ((eq (count-lines (point-min) (point-max)) 1)
9d9df85eb7fb (vc-dired-hook): Don't use dired-kill-line to remove directory lines
André Spiegel <spiegel@gnu.org>
parents: 22437
diff changeset
2186 (goto-char (point-min))
9d9df85eb7fb (vc-dired-hook): Don't use dired-kill-line to remove directory lines
André Spiegel <spiegel@gnu.org>
parents: 22437
diff changeset
2187 (message "No files locked under %s" default-directory)))))
22437
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2188
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2189 (defun vc-dired-purge ()
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2190 "Remove empty subdirs."
22437
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2191 (let (subdir)
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2192 (goto-char (point-min))
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2193 (while (setq subdir (dired-get-subdir))
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2194 (forward-line 2)
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2195 (if (dired-get-filename nil t)
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2196 (if (not (dired-next-subdir 1 t))
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2197 (goto-char (point-max)))
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2198 (forward-line -2)
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2199 (if (not (string= (dired-current-directory) default-directory))
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2200 (dired-do-kill-lines t "")
22453
9d9df85eb7fb (vc-dired-hook): Don't use dired-kill-line to remove directory lines
André Spiegel <spiegel@gnu.org>
parents: 22437
diff changeset
2201 ;; We cannot remove the top level directory.
9d9df85eb7fb (vc-dired-hook): Don't use dired-kill-line to remove directory lines
André Spiegel <spiegel@gnu.org>
parents: 22437
diff changeset
2202 ;; Just make it look a little nicer.
9d9df85eb7fb (vc-dired-hook): Don't use dired-kill-line to remove directory lines
André Spiegel <spiegel@gnu.org>
parents: 22437
diff changeset
2203 (forward-line 1)
9d9df85eb7fb (vc-dired-hook): Don't use dired-kill-line to remove directory lines
André Spiegel <spiegel@gnu.org>
parents: 22437
diff changeset
2204 (kill-line)
22437
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2205 (if (not (dired-next-subdir 1 t))
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2206 (goto-char (point-max))))))
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2207 (goto-char (point-min))))
13012
ac84d1c8c770 (vc-dired-mode): Now a major mode derived from dired-mode.
André Spiegel <spiegel@gnu.org>
parents: 12968
diff changeset
2208
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2209 (defun vc-dired-buffers-for-dir (dir)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2210 "Return a list of all vc-dired buffers that currently display DIR."
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2211 (let (result)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2212 ;; Check whether dired is loaded.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2213 (when (fboundp 'dired-buffers-for-dir)
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2214 (mapcar (lambda (buffer)
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2215 (with-current-buffer buffer
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2216 (if vc-dired-mode
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2217 (setq result (append result (list buffer))))))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2218 (dired-buffers-for-dir dir)))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2219 result))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2220
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2221 (defun vc-dired-resynch-file (file)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2222 "Update the entries for FILE in any VC Dired buffers that list it."
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2223 (let ((buffers (vc-dired-buffers-for-dir (file-name-directory file))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2224 (when buffers
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2225 (mapcar (lambda (buffer)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2226 (with-current-buffer buffer
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2227 (if (dired-goto-file file)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2228 ;; bind vc-dired-terse-mode to nil so that
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2229 ;; files won't vanish when they are checked in
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2230 (let ((vc-dired-terse-mode nil))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2231 (dired-do-redisplay 1)))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2232 buffers))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2233
927
587a08c3a70b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 904
diff changeset
2234 ;;;###autoload
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2235 (defun vc-directory (dir read-switches)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2236 "Create a buffer in VC Dired Mode for directory DIR.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2237
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2238 See Info node `VC Dired Mode'.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2239
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2240 With prefix arg READ-SWITCHES, specify a value to override
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2241 `dired-listing-switches' when generating the listing."
13012
ac84d1c8c770 (vc-dired-mode): Now a major mode derived from dired-mode.
André Spiegel <spiegel@gnu.org>
parents: 12968
diff changeset
2242 (interactive "DDired under VC (directory): \nP")
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2243 (let ((vc-dired-switches (concat vc-dired-listing-switches
22437
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2244 (if vc-dired-recurse "R" ""))))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2245 (if read-switches
22437
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2246 (setq vc-dired-switches
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2247 (read-string "Dired listing switches: "
982bf2f2c1de (vc-dired-recurse, vc-dired-terse-display): New user options.
André Spiegel <spiegel@gnu.org>
parents: 22356
diff changeset
2248 vc-dired-switches)))
21357
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2249 (require 'dired)
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2250 (require 'dired-aux)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2251 (switch-to-buffer
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2252 (dired-internal-noselect (expand-file-name (file-name-as-directory dir))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2253 vc-dired-switches
21357
b0e5a2784761 (vc-next-action-dired): Use dired-do-redisplay. Handle
Richard M. Stallman <rms@gnu.org>
parents: 21329
diff changeset
2254 'vc-dired-mode))))
10475
2d9590603a06 Revert Jan 15 and Jan 5 changes.
Richard M. Stallman <rms@gnu.org>
parents: 10431
diff changeset
2255
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2256
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2257 ;; Named-configuration entry points
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2258
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2259 (defun vc-snapshot-precondition (dir)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2260 "Scan the tree below DIR, looking for non-uptodate files.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2261 If any file is not up-to-date, return the name of the first such file.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2262 \(This means, neither snapshot creation nor retrieval is allowed.\)
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2263 If one or more of the files are currently visited, return `visited'.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2264 Otherwise, return nil."
12714
192f537bca2a (vc-resynch-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12589
diff changeset
2265 (let ((status nil))
192f537bca2a (vc-resynch-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12589
diff changeset
2266 (catch 'vc-locked-example
192f537bca2a (vc-resynch-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12589
diff changeset
2267 (vc-file-tree-walk
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2268 dir
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2269 (lambda (f)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2270 (if (not (vc-up-to-date-p f)) (throw 'vc-locked-example f)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2271 (if (get-file-buffer f) (setq status 'visited)))))
12714
192f537bca2a (vc-resynch-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12589
diff changeset
2272 status)))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2273
927
587a08c3a70b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 904
diff changeset
2274 ;;;###autoload
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2275 (defun vc-create-snapshot (dir name branchp)
31565
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
2276 "Descending recursively from DIR, make a snapshot called NAME.
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2277 For each registered file, the version level of its latest version
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2278 becomes part of the named configuration. If the prefix argument
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2279 BRANCHP is given, the snapshot is made as a new branch and the files
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2280 are checked out in that new branch."
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2281 (interactive
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2282 (list (read-file-name "Directory: " default-directory default-directory t)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2283 (read-string "New snapshot name: ")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2284 current-prefix-arg))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2285 (message "Making %s... " (if branchp "branch" "snapshot"))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2286 (if (file-directory-p dir) (setq dir (file-name-as-directory dir)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2287 (vc-call-backend (vc-responsible-backend dir)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2288 'create-snapshot dir name branchp)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2289 (message "Making %s... done" (if branchp "branch" "snapshot")))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2290
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2291 (defun vc-default-create-snapshot (backend dir name branchp)
31565
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
2292 (when branchp
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2293 (error "VC backend %s does not support module branches" backend))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2294 (let ((result (vc-snapshot-precondition dir)))
12714
192f537bca2a (vc-resynch-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12589
diff changeset
2295 (if (stringp result)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2296 (error "File %s is not up-to-date" result)
4656
29bd5f3d0059 (vc-locked-example): Renamed from vc-quiescent-p. Now yields example of
Paul Eggert <eggert@twinsun.com>
parents: 4509
diff changeset
2297 (vc-file-tree-walk
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2298 dir
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2299 (lambda (f)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2300 (vc-call assign-name f name))))))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2301
927
587a08c3a70b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 904
diff changeset
2302 ;;;###autoload
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2303 (defun vc-retrieve-snapshot (dir name)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2304 "Descending recursively from DIR, retrieve the snapshot called NAME.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2305 If NAME is empty, it refers to the latest versions.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2306 If locking is used for the files in DIR, then there must not be any
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2307 locked files at or below DIR (but if NAME is empty, locked files are
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2308 allowed and simply skipped)."
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2309 (interactive
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2310 (list (read-file-name "Directory: " default-directory default-directory t)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2311 (read-string "Snapshot name to retrieve (default latest versions): ")))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2312 (let ((update (yes-or-no-p "Update any affected buffers? "))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2313 (msg (if (or (not name) (string= name ""))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2314 (format "Updating %s... " (abbreviate-file-name dir))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2315 (format "Retrieving snapshot into %s... "
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2316 (abbreviate-file-name dir)))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2317 (message msg)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2318 (vc-call-backend (vc-responsible-backend dir)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2319 'retrieve-snapshot dir name update)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2320 (message (concat msg "done"))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2321
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2322 (defun vc-default-retrieve-snapshot (backend dir name update)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2323 (if (string= name "")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2324 (progn
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2325 (vc-file-tree-walk
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2326 dir
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2327 (lambda (f) (and
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2328 (vc-up-to-date-p f)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2329 (vc-error-occurred
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2330 (vc-call checkout f nil "")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2331 (if update (vc-resynch-buffer f t t)))))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2332 (let ((result (vc-snapshot-precondition dir)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2333 (if (stringp result)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2334 (error "File %s is locked" result)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2335 (setq update (and (eq result 'visited) update))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2336 (vc-file-tree-walk
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2337 dir
37544
94c0503d3f2d (vc-next-action-on-file): Only force buffer+file to writable
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36710
diff changeset
2338 (lambda (f) (vc-error-occurred
94c0503d3f2d (vc-next-action-on-file): Only force buffer+file to writable
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36710
diff changeset
2339 (vc-call checkout f nil name)
94c0503d3f2d (vc-next-action-on-file): Only force buffer+file to writable
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36710
diff changeset
2340 (if update (vc-resynch-buffer f t t)))))))))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2341
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2342 ;; Miscellaneous other entry points
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2343
927
587a08c3a70b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 904
diff changeset
2344 ;;;###autoload
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2345 (defun vc-print-log ()
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2346 "List the change log of the current buffer in a window."
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2347 (interactive)
21366
e7b64d0b3b3d (vc-ensure-vc-buffer): New function.
André Spiegel <spiegel@gnu.org>
parents: 21357
diff changeset
2348 (vc-ensure-vc-buffer)
e7b64d0b3b3d (vc-ensure-vc-buffer): New function.
André Spiegel <spiegel@gnu.org>
parents: 21357
diff changeset
2349 (let ((file buffer-file-name))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2350 (vc-call print-log file)
36710
66e9d0506b71 (vc-do-command): If the destination buffer is already current, don't
André Spiegel <spiegel@gnu.org>
parents: 36395
diff changeset
2351 (set-buffer "*vc*")
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2352 (pop-to-buffer (current-buffer))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2353 (if (fboundp 'log-view-mode) (log-view-mode))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2354 (vc-exec-after
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2355 `(progn
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2356 (goto-char (point-max)) (forward-line -1)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2357 (while (looking-at "=*\n")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2358 (delete-char (- (match-end 0) (match-beginning 0)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2359 (forward-line -1))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2360 (goto-char (point-min))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2361 (if (looking-at "[\b\t\n\v\f\r ]+")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2362 (delete-char (- (match-end 0) (match-beginning 0))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2363 (shrink-window-if-larger-than-buffer)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2364 ;; move point to the log entry for the current version
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2365 (if (fboundp 'log-view-goto-rev)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2366 (log-view-goto-rev ',(vc-workfile-version file))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2367 (if (vc-find-backend-function ',(vc-backend file) 'show-log-entry)
31565
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
2368 (vc-call-backend ',(vc-backend file)
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
2369 'show-log-entry
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2370 ',(vc-workfile-version file))))))))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2371
32054
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2372 (defun vc-default-comment-history (backend file)
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2373 "Return a string with all log entries that were made under BACKEND for FILE."
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2374 (if (vc-find-backend-function backend 'print-log)
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2375 (with-temp-buffer
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2376 (vc-call print-log file)
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2377 (vc-call wash-log file)
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2378 (buffer-string))))
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2379
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2380 (defun vc-default-wash-log (backend file)
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2381 "Remove all non-comment information from log output.
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2382 This default implementation works for RCS logs; backends should override
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2383 it if their logs are not in RCS format."
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2384 (let ((separator (concat "^-+\nrevision [0-9.]+\ndate: .*\n"
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2385 "\\(branches: .*;\n\\)?"
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2386 "\\(\\*\\*\\* empty log message \\*\\*\\*\n\\)?")))
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2387 (goto-char (point-max)) (forward-line -1)
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2388 (while (looking-at "=*\n")
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2389 (delete-char (- (match-end 0) (match-beginning 0)))
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2390 (forward-line -1))
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2391 (goto-char (point-min))
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2392 (if (looking-at "[\b\t\n\v\f\r ]+")
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2393 (delete-char (- (match-end 0) (match-beginning 0))))
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2394 (goto-char (point-min))
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2395 (re-search-forward separator nil t)
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2396 (delete-region (point-min) (point))
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2397 (while (re-search-forward separator nil t)
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2398 (delete-region (match-beginning 0) (match-end 0)))))
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2399
927
587a08c3a70b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 904
diff changeset
2400 ;;;###autoload
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2401 (defun vc-revert-buffer ()
21324
b0abfde79536 * vc.el (vc-resolve-conflicts): New function.
André Spiegel <spiegel@gnu.org>
parents: 21233
diff changeset
2402 "Revert the current buffer's file back to the version it was based on.
952
ba6a993500d4 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 927
diff changeset
2403 This asks for confirmation if the buffer contents are not identical
32058
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2404 to that version. This function does not automatically pick up newer
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2405 changes found in the master file; use \\[universal-argument] \\[vc-next-action] to do so."
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2406 (interactive)
21366
e7b64d0b3b3d (vc-ensure-vc-buffer): New function.
André Spiegel <spiegel@gnu.org>
parents: 21357
diff changeset
2407 (vc-ensure-vc-buffer)
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2408 (let ((file buffer-file-name)
13536
af2fc95b03f0 (vc-directory): Require dired.
Richard M. Stallman <rms@gnu.org>
parents: 13379
diff changeset
2409 ;; This operation should always ask for confirmation.
af2fc95b03f0 (vc-directory): Require dired.
Richard M. Stallman <rms@gnu.org>
parents: 13379
diff changeset
2410 (vc-suppress-confirm nil)
32126
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2411 (obuf (current-buffer))
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2412 status)
33548
714a4c4917cd (vc-revert-buffer): Ask for confirmation if file seems up-to-date.
André Spiegel <spiegel@gnu.org>
parents: 33546
diff changeset
2413 (if (vc-up-to-date-p file)
714a4c4917cd (vc-revert-buffer): Ask for confirmation if file seems up-to-date.
André Spiegel <spiegel@gnu.org>
parents: 33546
diff changeset
2414 (unless (yes-or-no-p "File seems up-to-date. Revert anyway? ")
714a4c4917cd (vc-revert-buffer): Ask for confirmation if file seems up-to-date.
André Spiegel <spiegel@gnu.org>
parents: 33546
diff changeset
2415 (error "Revert canceled")))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2416 (unless (vc-workfile-unchanged-p file)
32189
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
2417 ;; vc-diff selects the new window, which is not what we want:
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
2418 ;; if the new window is on another frame, that'd require the user
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
2419 ;; moving her mouse to answer the yes-or-no-p question.
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
2420 (let ((win (save-selected-window
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
2421 (setq status (vc-diff nil t)) (selected-window))))
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
2422 (vc-exec-after `(message nil))
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
2423 (when status
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
2424 (unwind-protect
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
2425 (unless (yes-or-no-p "Discard changes? ")
32126
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2426 (error "Revert canceled"))
32189
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
2427 (select-window win)
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
2428 (if (one-window-p t)
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
2429 (if (window-dedicated-p (selected-window))
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
2430 (make-frame-invisible))
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
2431 (delete-window))))))
21329
58dc75416c30 (vc-revert-buffer): Rewrote handling of vc-diff buffer,
André Spiegel <spiegel@gnu.org>
parents: 21325
diff changeset
2432 (set-buffer obuf)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2433 ;; Do the reverting
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2434 (message "Reverting %s..." file)
32093
5c36fa51ee96 (vc-revert-file): New function.
André Spiegel <spiegel@gnu.org>
parents: 32069
diff changeset
2435 (vc-revert-file file)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2436 (message "Reverting %s...done" file)))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2437
32126
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2438 (defun vc-version-backup-file (file &optional rev)
33564
d8c822512b62 (vc-version-diff): Bind inhibit-read-only when inserting text.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33562
diff changeset
2439 "Return name of backup file for revision REV of FILE.
d8c822512b62 (vc-version-diff): Bind inhibit-read-only when inserting text.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33562
diff changeset
2440 If version backups should be used for FILE, and there exists
32126
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2441 such a backup for REV or the current workfile version of file,
33564
d8c822512b62 (vc-version-diff): Bind inhibit-read-only when inserting text.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33562
diff changeset
2442 return its name; otherwise return nil."
32748
e2cb0aef151a (vc-checkout): Added `-p' suffix in call to vc-make-version-backups-p;
André Spiegel <spiegel@gnu.org>
parents: 32344
diff changeset
2443 (when (vc-call make-version-backups-p file)
32126
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2444 (let ((backup-file (vc-version-backup-file-name file rev)))
32748
e2cb0aef151a (vc-checkout): Added `-p' suffix in call to vc-make-version-backups-p;
André Spiegel <spiegel@gnu.org>
parents: 32344
diff changeset
2445 (if (file-exists-p backup-file)
e2cb0aef151a (vc-checkout): Added `-p' suffix in call to vc-make-version-backups-p;
André Spiegel <spiegel@gnu.org>
parents: 32344
diff changeset
2446 backup-file
e2cb0aef151a (vc-checkout): Added `-p' suffix in call to vc-make-version-backups-p;
André Spiegel <spiegel@gnu.org>
parents: 32344
diff changeset
2447 ;; there is no automatic backup, but maybe the user made one manually
e2cb0aef151a (vc-checkout): Added `-p' suffix in call to vc-make-version-backups-p;
André Spiegel <spiegel@gnu.org>
parents: 32344
diff changeset
2448 (setq backup-file (vc-version-backup-file-name file rev 'manual))
e2cb0aef151a (vc-checkout): Added `-p' suffix in call to vc-make-version-backups-p;
André Spiegel <spiegel@gnu.org>
parents: 32344
diff changeset
2449 (if (file-exists-p backup-file)
e2cb0aef151a (vc-checkout): Added `-p' suffix in call to vc-make-version-backups-p;
André Spiegel <spiegel@gnu.org>
parents: 32344
diff changeset
2450 backup-file)))))
32126
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2451
32093
5c36fa51ee96 (vc-revert-file): New function.
André Spiegel <spiegel@gnu.org>
parents: 32069
diff changeset
2452 (defun vc-revert-file (file)
5c36fa51ee96 (vc-revert-file): New function.
André Spiegel <spiegel@gnu.org>
parents: 32069
diff changeset
2453 "Revert FILE back to the version it was based on."
5c36fa51ee96 (vc-revert-file): New function.
André Spiegel <spiegel@gnu.org>
parents: 32069
diff changeset
2454 (with-vc-properties
5c36fa51ee96 (vc-revert-file): New function.
André Spiegel <spiegel@gnu.org>
parents: 32069
diff changeset
2455 file
32126
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2456 (let ((backup-file (vc-version-backup-file file)))
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2457 (if (not backup-file)
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2458 (vc-call revert file)
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2459 (copy-file backup-file file 'ok-if-already-exists 'keep-date)
32748
e2cb0aef151a (vc-checkout): Added `-p' suffix in call to vc-make-version-backups-p;
André Spiegel <spiegel@gnu.org>
parents: 32344
diff changeset
2460 (vc-delete-automatic-version-backups file)))
32189
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
2461 `((vc-state . up-to-date)
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
2462 (vc-checkout-time . ,(nth 5 (file-attributes file)))))
32093
5c36fa51ee96 (vc-revert-file): New function.
André Spiegel <spiegel@gnu.org>
parents: 32069
diff changeset
2463 (vc-resynch-buffer file t t))
5c36fa51ee96 (vc-revert-file): New function.
André Spiegel <spiegel@gnu.org>
parents: 32069
diff changeset
2464
927
587a08c3a70b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 904
diff changeset
2465 ;;;###autoload
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2466 (defun vc-cancel-version (norevert)
2750
6f340eabf13f Improve doc strings and prompt strings.
Richard M. Stallman <rms@gnu.org>
parents: 2745
diff changeset
2467 "Get rid of most recently checked in version of this file.
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2468 A prefix argument NOREVERT means do not revert the buffer afterwards."
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2469 (interactive "P")
21366
e7b64d0b3b3d (vc-ensure-vc-buffer): New function.
André Spiegel <spiegel@gnu.org>
parents: 21357
diff changeset
2470 (vc-ensure-vc-buffer)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2471 (let* ((file (buffer-file-name))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2472 (backend (vc-backend file))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2473 (target (vc-workfile-version file))
13934
ee57ee38cdb5 (vc-cancel-version): Handle versions that start a new branch.
André Spiegel <spiegel@gnu.org>
parents: 13890
diff changeset
2474 (config (current-window-configuration)) done)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2475 (cond
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2476 ((not (vc-find-backend-function backend 'cancel-version))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2477 (error "Sorry, canceling versions is not supported under %s" backend))
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2478 ((not (vc-call latest-on-branch-p file))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2479 (error "This is not the latest version; VC cannot cancel it"))
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2480 ((not (vc-up-to-date-p file))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2481 (error (substitute-command-keys "File is not up to date; use \\[vc-revert-buffer] to discard changes"))))
13934
ee57ee38cdb5 (vc-cancel-version): Handle versions that start a new branch.
André Spiegel <spiegel@gnu.org>
parents: 13890
diff changeset
2482 (if (null (yes-or-no-p (format "Remove version %s from master? " target)))
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2483 (error "Aborted")
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2484 (setq norevert (or norevert (not
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2485 (yes-or-no-p "Revert buffer to most recent remaining version? "))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2486
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2487 (message "Removing last change from %s..." file)
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2488 (with-vc-properties
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2489 file
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2490 (vc-call cancel-version file norevert)
32189
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
2491 `((vc-state . ,(if norevert 'edited 'up-to-date))
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
2492 (vc-checkout-time . ,(if norevert
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
2493 0
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2494 (nth 5 (file-attributes file))))
32189
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
2495 (vc-workfile-version . nil)))
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2496 (message "Removing last change from %s...done" file)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2497
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2498 (cond
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2499 (norevert ;; clear version headers and mark the buffer modified
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2500 (set-visited-file-name file)
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2501 (when (not vc-make-backup-files)
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2502 ;; inhibit backup for this buffer
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2503 (make-local-variable 'backup-inhibited)
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2504 (setq backup-inhibited t))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2505 (setq buffer-read-only nil)
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2506 (vc-clear-headers)
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2507 (vc-mode-line file)
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2508 (vc-dired-resynch-file file))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2509 (t ;; revert buffer to file on disk
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2510 (vc-resynch-buffer file t t)))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2511 (message "Version %s has been removed from the master" target))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2512
31810
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
2513 ;;;autoload
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
2514 (defun vc-switch-backend (file backend)
32058
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2515 "Make BACKEND the current version control system for FILE.
31810
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
2516 FILE must already be registered in BACKEND. The change is not
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
2517 permanent, only for the current session. This function only changes
32058
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2518 VC's perspective on FILE, it does not register or unregister it.
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2519 By default, this command cycles through the registered backends.
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2520 To get a prompt, use a prefix argument."
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2521 (interactive
31810
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
2522 (list
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
2523 buffer-file-name
32058
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2524 (let ((backend (vc-backend buffer-file-name))
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2525 (backends nil))
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2526 ;; Find the registered backends.
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2527 (dolist (backend vc-handled-backends)
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2528 (when (vc-call-backend backend 'registered buffer-file-name)
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2529 (push backend backends)))
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2530 ;; Find the next backend.
32059
13e0fdf65e3c (with-vc-file, vc-next-action-on-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32058
diff changeset
2531 (let ((def (car (delq backend (append (memq backend backends) backends))))
32058
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2532 (others (delete backend backends)))
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2533 (cond
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2534 ((null others) (error "No other backend to switch to"))
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2535 (current-prefix-arg
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2536 (intern
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2537 (upcase
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2538 (completing-read
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2539 (format "Switch to backend [%s]: " def)
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2540 (mapcar (lambda (b) (list (downcase (symbol-name b)))) backends)
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2541 nil t nil nil (downcase (symbol-name def))))))
4196f89984ce * vc.el (vc-editable-p): Minor optimization.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32054
diff changeset
2542 (t def))))))
32059
13e0fdf65e3c (with-vc-file, vc-next-action-on-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32058
diff changeset
2543 (unless (eq backend (vc-backend file))
13e0fdf65e3c (with-vc-file, vc-next-action-on-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32058
diff changeset
2544 (vc-file-clearprops file)
13e0fdf65e3c (with-vc-file, vc-next-action-on-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32058
diff changeset
2545 (vc-file-setprop file 'vc-backend backend)
13e0fdf65e3c (with-vc-file, vc-next-action-on-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32058
diff changeset
2546 ;; Force recomputation of the state
32189
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
2547 (unless (vc-call-backend backend 'registered file)
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
2548 (vc-file-clearprops file)
921a2e8fa97e (with-vc-properties): Use conses rather than length-2 lists.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32126
diff changeset
2549 (error "%s is not registered in %s" file backend))
32059
13e0fdf65e3c (with-vc-file, vc-next-action-on-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32058
diff changeset
2550 (vc-mode-line file)))
31810
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
2551
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
2552 ;;;autoload
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
2553 (defun vc-transfer-file (file new-backend)
32059
13e0fdf65e3c (with-vc-file, vc-next-action-on-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32058
diff changeset
2554 "Transfer FILE to another version control system NEW-BACKEND.
31810
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
2555 If NEW-BACKEND has a higher precedence than FILE's current backend
32059
13e0fdf65e3c (with-vc-file, vc-next-action-on-file):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32058
diff changeset
2556 \(i.e. it comes earlier in `vc-handled-backends'), then register FILE in
31810
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
2557 NEW-BACKEND, using the version number from the current backend as the
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
2558 base level. If NEW-BACKEND has a lower precedence than the current
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
2559 backend, then commit all changes that were made under the current
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
2560 backend to NEW-BACKEND, and unregister FILE from the current backend.
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
2561 \(If FILE is not yet registered under NEW-BACKEND, register it.)"
32097
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2562 (let* ((old-backend (vc-backend file))
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2563 (edited (memq (vc-state file) '(edited needs-merge)))
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2564 (registered (vc-call-backend new-backend 'registered file))
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2565 (move
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2566 (and registered ; Never move if not registered in new-backend yet.
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2567 ;; move if new-backend comes later in vc-handled-backends
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2568 (or (memq new-backend (memq old-backend vc-handled-backends))
32126
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2569 (y-or-n-p "Final transfer? "))))
32097
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2570 (comment nil))
31810
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
2571 (if (eq old-backend new-backend)
32097
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2572 (error "%s is the current backend of %s" new-backend file))
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2573 (if registered
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2574 (set-file-modes file (logior (file-modes file) 128))
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2575 ;; `registered' might have switched under us.
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2576 (vc-switch-backend file old-backend)
32126
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2577 (let* ((rev (vc-workfile-version file))
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2578 (modified-file (and edited (make-temp-name file)))
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2579 (unmodified-file (and modified-file (vc-version-backup-file file))))
32097
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2580 ;; Go back to the base unmodified file.
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2581 (unwind-protect
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2582 (progn
32126
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2583 (when modified-file
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2584 (copy-file file modified-file)
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2585 ;; If we have a local copy of the unmodified file, handle that
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2586 ;; here and not in vc-revert-file because we don't want to
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2587 ;; delete that copy -- it is still useful for OLD-BACKEND.
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2588 (if unmodified-file
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2589 (copy-file unmodified-file file 'ok-if-already-exists)
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2590 (if (y-or-n-p "Get base version from master? ")
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2591 (vc-revert-file file))))
32097
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2592 (vc-call-backend new-backend 'receive-file file rev))
32126
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2593 (when modified-file
32097
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2594 (vc-switch-backend file new-backend)
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2595 (unless (eq (vc-checkout-model file) 'implicit)
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2596 (vc-checkout file t nil))
32126
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2597 (rename-file modified-file file 'ok-if-already-exists)
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2598 (vc-file-setprop file 'vc-checkout-time nil)))))
32097
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2599 (when move
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2600 (vc-switch-backend file old-backend)
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2601 (setq comment (vc-call comment-history file))
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2602 (vc-call unregister file))
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2603 (vc-switch-backend file new-backend)
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2604 (when (or move edited)
31810
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
2605 (vc-file-setprop file 'vc-state 'edited)
32126
3aab429d3c8a (vc-revert-buffer): Handle empty diff properly.
André Spiegel <spiegel@gnu.org>
parents: 32097
diff changeset
2606 (vc-mode-line file)
32054
fef29341db1c (vc-next-action-on-file): Update mode line only if file is visited.
André Spiegel <spiegel@gnu.org>
parents: 31836
diff changeset
2607 (vc-checkin file nil comment (stringp comment)))))
31810
495ca3bd372d (vc-index-of, vc-transfer-file, vc-default-receive-file): New functions.
André Spiegel <spiegel@gnu.org>
parents: 31718
diff changeset
2608
32097
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2609 (defun vc-default-unregister (backend file)
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2610 "Default implementation of `vc-unregister', signals an error."
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2611 (error "Unregistering files is not supported for %s" backend))
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2612
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2613 (defun vc-default-receive-file (backend file rev)
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2614 "Let BACKEND receive FILE from another version control system."
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2615 (vc-call-backend backend 'register file rev ""))
adf341c172af (vc-transfer-file, vc-default-receive-file): Rewritten to factorize
André Spiegel <spiegel@gnu.org>
parents: 32093
diff changeset
2616
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2617 (defun vc-rename-master (oldmaster newfile templates)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2618 "Rename OLDMASTER to be the master file for NEWFILE based on TEMPLATES."
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2619 (let* ((dir (file-name-directory (expand-file-name oldmaster)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2620 (newdir (or (file-name-directory newfile) ""))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2621 (newbase (file-name-nondirectory newfile))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2622 (masters
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2623 ;; List of potential master files for `newfile'
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2624 (mapcar
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2625 (lambda (s) (vc-possible-master s newdir newbase))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2626 templates)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2627 (if (or (file-symlink-p oldmaster)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2628 (file-symlink-p (file-name-directory oldmaster)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2629 (error "This unsafe in the presence of symbolic links"))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2630 (rename-file
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2631 oldmaster
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2632 (catch 'found
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2633 ;; If possible, keep the master file in the same directory.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2634 (mapcar (lambda (f)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2635 (if (and f (string= (file-name-directory (expand-file-name f))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2636 dir))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2637 (throw 'found f)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2638 masters)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2639 ;; If not, just use the first possible place.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2640 (mapcar (lambda (f)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2641 (and f
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2642 (or (not (setq dir (file-name-directory f)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2643 (file-directory-p dir))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2644 (throw 'found f)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2645 masters)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2646 (error "New file lacks a version control directory")))))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2647
9044
5ddb0e0adb08 (vc-backend-checkout): Add if-statements to the shell cmds
Richard M. Stallman <rms@gnu.org>
parents: 8726
diff changeset
2648 ;;;###autoload
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2649 (defun vc-rename-file (old new)
2750
6f340eabf13f Improve doc strings and prompt strings.
Richard M. Stallman <rms@gnu.org>
parents: 2745
diff changeset
2650 "Rename file OLD to NEW, and rename its master file likewise."
6f340eabf13f Improve doc strings and prompt strings.
Richard M. Stallman <rms@gnu.org>
parents: 2745
diff changeset
2651 (interactive "fVC rename file: \nFRename to: ")
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2652 (let ((oldbuf (get-file-buffer old))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2653 (backend (vc-backend old)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2654 (unless (or (null backend) (vc-find-backend-function backend 'rename-file))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2655 (error "Renaming files under %s is not supported in VC" backend))
4991
9da6c6c24ddd (vc-rename-file): Don't overwrite an existing file.
Richard M. Stallman <rms@gnu.org>
parents: 4854
diff changeset
2656 (if (and oldbuf (buffer-modified-p oldbuf))
3804
d7d674c99039 (vc-rename-file): Remove periods from error messages.
Richard M. Stallman <rms@gnu.org>
parents: 3671
diff changeset
2657 (error "Please save files before moving them"))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2658 (if (get-file-buffer new)
3804
d7d674c99039 (vc-rename-file): Remove periods from error messages.
Richard M. Stallman <rms@gnu.org>
parents: 3671
diff changeset
2659 (error "Already editing new file name"))
4991
9da6c6c24ddd (vc-rename-file): Don't overwrite an existing file.
Richard M. Stallman <rms@gnu.org>
parents: 4854
diff changeset
2660 (if (file-exists-p new)
9da6c6c24ddd (vc-rename-file): Don't overwrite an existing file.
Richard M. Stallman <rms@gnu.org>
parents: 4854
diff changeset
2661 (error "New file already exists"))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2662 (when backend
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2663 (if (and backend (not (vc-up-to-date-p old)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2664 (error "Please check in files before moving them"))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2665 (vc-call-backend backend 'rename-file old new))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2666 ;; Move the actual file (unless the backend did it already)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2667 (if (or (not backend) (file-exists-p old))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2668 (rename-file old new))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2669 ;; ?? Renaming a file might change its contents due to keyword expansion.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2670 ;; We should really check out a new copy if the old copy was precisely equal
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2671 ;; to some checked in version. However, testing for this is tricky....
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2672 (if oldbuf
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2673 (with-current-buffer oldbuf
15227
207c2c343394 (vc-rename-file): After renaming, update VC info and modeline.
Richard M. Stallman <rms@gnu.org>
parents: 15036
diff changeset
2674 (let ((buffer-read-only buffer-read-only))
207c2c343394 (vc-rename-file): After renaming, update VC info and modeline.
Richard M. Stallman <rms@gnu.org>
parents: 15036
diff changeset
2675 (set-visited-file-name new))
207c2c343394 (vc-rename-file): After renaming, update VC info and modeline.
Richard M. Stallman <rms@gnu.org>
parents: 15036
diff changeset
2676 (vc-backend new)
207c2c343394 (vc-rename-file): After renaming, update VC info and modeline.
Richard M. Stallman <rms@gnu.org>
parents: 15036
diff changeset
2677 (vc-mode-line new)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2678 (set-buffer-modified-p nil)))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2679
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2680 ;; Only defined in very recent Emacsen
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2681 (defvar small-temporary-file-directory nil)
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2682
927
587a08c3a70b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 904
diff changeset
2683 ;;;###autoload
1226
573df03a54d8 (vc-update-change-log): Use shell-command, not shell-command-on-region.
Roland McGrath <roland@gnu.org>
parents: 952
diff changeset
2684 (defun vc-update-change-log (&rest args)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2685 "Find change log file and add entries from recent version control logs.
15989
2813c68432c9 (vc-update-change-log): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15977
diff changeset
2686 Normally, find log entries for all registered files in the default
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2687 directory.
15989
2813c68432c9 (vc-update-change-log): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15977
diff changeset
2688
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2689 With prefix arg of \\[universal-argument], only find log entries for the current buffer's file.
15989
2813c68432c9 (vc-update-change-log): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15977
diff changeset
2690
2813c68432c9 (vc-update-change-log): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15977
diff changeset
2691 With any numeric prefix arg, find log entries for all currently visited
2813c68432c9 (vc-update-change-log): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15977
diff changeset
2692 files that are under version control. This puts all the entries in the
2813c68432c9 (vc-update-change-log): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15977
diff changeset
2693 log for the default directory, which may not be appropriate.
2813c68432c9 (vc-update-change-log): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15977
diff changeset
2694
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2695 From a program, any ARGS are assumed to be filenames for which
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2696 log entries should be gathered."
1227
d07030650283 (vc-checkin-hook): New user hook variable.
Roland McGrath <roland@gnu.org>
parents: 1226
diff changeset
2697 (interactive
d07030650283 (vc-checkin-hook): New user hook variable.
Roland McGrath <roland@gnu.org>
parents: 1226
diff changeset
2698 (cond ((consp current-prefix-arg) ;C-u
d07030650283 (vc-checkin-hook): New user hook variable.
Roland McGrath <roland@gnu.org>
parents: 1226
diff changeset
2699 (list buffer-file-name))
d07030650283 (vc-checkin-hook): New user hook variable.
Roland McGrath <roland@gnu.org>
parents: 1226
diff changeset
2700 (current-prefix-arg ;Numeric argument.
d07030650283 (vc-checkin-hook): New user hook variable.
Roland McGrath <roland@gnu.org>
parents: 1226
diff changeset
2701 (let ((files nil)
d07030650283 (vc-checkin-hook): New user hook variable.
Roland McGrath <roland@gnu.org>
parents: 1226
diff changeset
2702 (buffers (buffer-list))
d07030650283 (vc-checkin-hook): New user hook variable.
Roland McGrath <roland@gnu.org>
parents: 1226
diff changeset
2703 file)
d07030650283 (vc-checkin-hook): New user hook variable.
Roland McGrath <roland@gnu.org>
parents: 1226
diff changeset
2704 (while buffers
d07030650283 (vc-checkin-hook): New user hook variable.
Roland McGrath <roland@gnu.org>
parents: 1226
diff changeset
2705 (setq file (buffer-file-name (car buffers)))
11605
36b1eb58d0c9 (vc-next-action-on-file): Add missing let-binding.
Karl Heuer <kwzh@gnu.org>
parents: 11597
diff changeset
2706 (and file (vc-backend file)
3939
1b954eb0f249 (vc-update-change-log): Ensure that file names inserted into a ChangeLog
Paul Eggert <eggert@twinsun.com>
parents: 3905
diff changeset
2707 (setq files (cons file files)))
1227
d07030650283 (vc-checkin-hook): New user hook variable.
Roland McGrath <roland@gnu.org>
parents: 1226
diff changeset
2708 (setq buffers (cdr buffers)))
3939
1b954eb0f249 (vc-update-change-log): Ensure that file names inserted into a ChangeLog
Paul Eggert <eggert@twinsun.com>
parents: 3905
diff changeset
2709 files))
1b954eb0f249 (vc-update-change-log): Ensure that file names inserted into a ChangeLog
Paul Eggert <eggert@twinsun.com>
parents: 3905
diff changeset
2710 (t
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2711 ;; Don't supply any filenames to backend; this means
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2712 ;; it should find all relevant files relative to
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2713 ;; the default-directory.
15977
abc3b3e7ea88 (vc-update-change-log): Remove code which found RCS files
Richard M. Stallman <rms@gnu.org>
parents: 15787
diff changeset
2714 nil)))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2715 (vc-call-backend (vc-responsible-backend default-directory)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2716 'update-changelog args))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2717
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2718 (defun vc-default-update-changelog (backend files)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2719 "Default implementation of update-changelog.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2720 Uses `rcs2log' which only works for RCS and CVS."
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2721 ;; FIXME: We (c|sh)ould add support for cvs2cl
14053
c8c5b83d9691 (vc-update-change-log): Use add-log-full-name and
Karl Heuer <kwzh@gnu.org>
parents: 14040
diff changeset
2722 (let ((odefault default-directory)
17410
777a31320b0f (vc-update-change-log): Run `rcs2log' in the correct
Richard M. Stallman <rms@gnu.org>
parents: 17274
diff changeset
2723 (changelog (find-change-log))
777a31320b0f (vc-update-change-log): Run `rcs2log' in the correct
Richard M. Stallman <rms@gnu.org>
parents: 17274
diff changeset
2724 ;; Presumably not portable to non-Unixy systems, along with rcs2log:
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2725 (tempfile (funcall
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2726 (if (fboundp 'make-temp-file) 'make-temp-file 'make-temp-name)
25488
48c997ce6c8d (vc-update-change-log): Use small-temporary-file-directory when non-nil.
Eli Zaretskii <eliz@gnu.org>
parents: 25406
diff changeset
2727 (expand-file-name "vc"
48c997ce6c8d (vc-update-change-log): Use small-temporary-file-directory when non-nil.
Eli Zaretskii <eliz@gnu.org>
parents: 25406
diff changeset
2728 (or small-temporary-file-directory
48c997ce6c8d (vc-update-change-log): Use small-temporary-file-directory when non-nil.
Eli Zaretskii <eliz@gnu.org>
parents: 25406
diff changeset
2729 temporary-file-directory))))
14855
52f730593064 (vc-update-change-log): Use add-log-full-name and
Richard M. Stallman <rms@gnu.org>
parents: 14734
diff changeset
2730 (full-name (or add-log-full-name
16743
612fe5713ede (vc-next-action-on-file, vc-update-change-log,
André Spiegel <spiegel@gnu.org>
parents: 16590
diff changeset
2731 (user-full-name)
612fe5713ede (vc-next-action-on-file, vc-update-change-log,
André Spiegel <spiegel@gnu.org>
parents: 16590
diff changeset
2732 (user-login-name)
612fe5713ede (vc-next-action-on-file, vc-update-change-log,
André Spiegel <spiegel@gnu.org>
parents: 16590
diff changeset
2733 (format "uid%d" (number-to-string (user-uid)))))
14855
52f730593064 (vc-update-change-log): Use add-log-full-name and
Richard M. Stallman <rms@gnu.org>
parents: 14734
diff changeset
2734 (mailing-address (or add-log-mailing-address
52f730593064 (vc-update-change-log): Use add-log-full-name and
Richard M. Stallman <rms@gnu.org>
parents: 14734
diff changeset
2735 user-mail-address)))
17410
777a31320b0f (vc-update-change-log): Run `rcs2log' in the correct
Richard M. Stallman <rms@gnu.org>
parents: 17274
diff changeset
2736 (find-file-other-window changelog)
3905
5669887e3692 (vc-update-change-log): Restore previous default-directory
Richard M. Stallman <rms@gnu.org>
parents: 3895
diff changeset
2737 (barf-if-buffer-read-only)
5669887e3692 (vc-update-change-log): Restore previous default-directory
Richard M. Stallman <rms@gnu.org>
parents: 3895
diff changeset
2738 (vc-buffer-sync)
5669887e3692 (vc-update-change-log): Restore previous default-directory
Richard M. Stallman <rms@gnu.org>
parents: 3895
diff changeset
2739 (undo-boundary)
5669887e3692 (vc-update-change-log): Restore previous default-directory
Richard M. Stallman <rms@gnu.org>
parents: 3895
diff changeset
2740 (goto-char (point-min))
5669887e3692 (vc-update-change-log): Restore previous default-directory
Richard M. Stallman <rms@gnu.org>
parents: 3895
diff changeset
2741 (push-mark)
5669887e3692 (vc-update-change-log): Restore previous default-directory
Richard M. Stallman <rms@gnu.org>
parents: 3895
diff changeset
2742 (message "Computing change log entries...")
3939
1b954eb0f249 (vc-update-change-log): Ensure that file names inserted into a ChangeLog
Paul Eggert <eggert@twinsun.com>
parents: 3905
diff changeset
2743 (message "Computing change log entries... %s"
17410
777a31320b0f (vc-update-change-log): Run `rcs2log' in the correct
Richard M. Stallman <rms@gnu.org>
parents: 17274
diff changeset
2744 (unwind-protect
777a31320b0f (vc-update-change-log): Run `rcs2log' in the correct
Richard M. Stallman <rms@gnu.org>
parents: 17274
diff changeset
2745 (progn
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2746 (setq default-directory odefault)
31565
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
2747 (if (eq 0 (apply 'call-process
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
2748 (expand-file-name "rcs2log"
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
2749 exec-directory)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2750 nil (list t tempfile) nil
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2751 "-c" changelog
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2752 "-u" (concat (vc-user-login-name)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2753 "\t" full-name
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2754 "\t" mailing-address)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2755 (mapcar
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2756 (lambda (f)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2757 (file-relative-name
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2758 (if (file-name-absolute-p f)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2759 f
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2760 (concat odefault f))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2761 files)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2762 "done"
17410
777a31320b0f (vc-update-change-log): Run `rcs2log' in the correct
Richard M. Stallman <rms@gnu.org>
parents: 17274
diff changeset
2763 (pop-to-buffer
777a31320b0f (vc-update-change-log): Run `rcs2log' in the correct
Richard M. Stallman <rms@gnu.org>
parents: 17274
diff changeset
2764 (set-buffer (get-buffer-create "*vc*")))
777a31320b0f (vc-update-change-log): Run `rcs2log' in the correct
Richard M. Stallman <rms@gnu.org>
parents: 17274
diff changeset
2765 (erase-buffer)
777a31320b0f (vc-update-change-log): Run `rcs2log' in the correct
Richard M. Stallman <rms@gnu.org>
parents: 17274
diff changeset
2766 (insert-file tempfile)
777a31320b0f (vc-update-change-log): Run `rcs2log' in the correct
Richard M. Stallman <rms@gnu.org>
parents: 17274
diff changeset
2767 "failed"))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2768 (setq default-directory (file-name-directory changelog))
17410
777a31320b0f (vc-update-change-log): Run `rcs2log' in the correct
Richard M. Stallman <rms@gnu.org>
parents: 17274
diff changeset
2769 (delete-file tempfile)))))
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2770
38374
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
2771 ;; Annotate functionality
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2772
18246
3b4321d0ee7e (vc-annotate-mode-variables): Init vc-annotate-mode-menu
Richard M. Stallman <rms@gnu.org>
parents: 18174
diff changeset
2773 ;; Declare globally instead of additional parameter to
3b4321d0ee7e (vc-annotate-mode-variables): Init vc-annotate-mode-menu
Richard M. Stallman <rms@gnu.org>
parents: 18174
diff changeset
2774 ;; temp-buffer-show-function (not possible to pass more than one
3b4321d0ee7e (vc-annotate-mode-variables): Init vc-annotate-mode-menu
Richard M. Stallman <rms@gnu.org>
parents: 18174
diff changeset
2775 ;; parameter).
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2776 (defvar vc-annotate-ratio nil "Global variable.")
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2777 (defvar vc-annotate-backend nil "Global variable.")
18246
3b4321d0ee7e (vc-annotate-mode-variables): Init vc-annotate-mode-menu
Richard M. Stallman <rms@gnu.org>
parents: 18174
diff changeset
2778
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2779 (defun vc-annotate-get-backend (buffer)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2780 "Return the backend matching \"Annotate\" buffer BUFFER.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2781 Return NIL if no match made. Associations are made based on
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2782 `vc-annotate-buffers'."
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2783 (cdr (assoc buffer vc-annotate-buffers)))
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2784
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2785 (define-derived-mode vc-annotate-mode fundamental-mode "Annotate"
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2786 "Major mode for buffers displaying output from the `annotate' command.
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2787
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2788 You can use the mode-specific menu to alter the time-span of the used
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2789 colors. See variable `vc-annotate-menu-elements' for customizing the
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2790 menu items."
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2791 (vc-annotate-add-menu))
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2792
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2793 (defun vc-annotate-display-default (&optional event)
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2794 "Use the default color spectrum for VC Annotate mode."
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2795 (interactive "e")
18246
3b4321d0ee7e (vc-annotate-mode-variables): Init vc-annotate-mode-menu
Richard M. Stallman <rms@gnu.org>
parents: 18174
diff changeset
2796 (message "Redisplaying annotation...")
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2797 (vc-annotate-display (current-buffer)
31565
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
2798 nil
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2799 (vc-annotate-get-backend (current-buffer)))
18246
3b4321d0ee7e (vc-annotate-mode-variables): Init vc-annotate-mode-menu
Richard M. Stallman <rms@gnu.org>
parents: 18174
diff changeset
2800 (message "Redisplaying annotation...done"))
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2801
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2802 (defun vc-annotate-add-menu ()
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2803 "Add the menu 'Annotate' to the menu bar in VC-Annotate mode."
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2804 (setq vc-annotate-mode-menu (make-sparse-keymap "Annotate"))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2805 (define-key vc-annotate-mode-map [menu-bar vc-annotate-mode]
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2806 (cons "VC-Annotate" vc-annotate-mode-menu))
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2807 (define-key vc-annotate-mode-menu [default]
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2808 '("Default" . vc-annotate-display-default))
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2809 (let ((menu-elements vc-annotate-menu-elements))
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2810 (while menu-elements
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2811 (let* ((element (car menu-elements))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2812 (days (round (* element
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2813 (vc-annotate-car-last-cons vc-annotate-color-map)
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2814 0.7585))))
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2815 (setq menu-elements (cdr menu-elements))
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2816 (define-key vc-annotate-mode-menu
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2817 (vector days)
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2818 (cons (format "Span %d days"
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2819 days)
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2820 `(lambda ()
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2821 ,(format "Use colors spanning %d days" days)
18246
3b4321d0ee7e (vc-annotate-mode-variables): Init vc-annotate-mode-menu
Richard M. Stallman <rms@gnu.org>
parents: 18174
diff changeset
2822 (interactive)
3b4321d0ee7e (vc-annotate-mode-variables): Init vc-annotate-mode-menu
Richard M. Stallman <rms@gnu.org>
parents: 18174
diff changeset
2823 (message "Redisplaying annotation...")
3b4321d0ee7e (vc-annotate-mode-variables): Init vc-annotate-mode-menu
Richard M. Stallman <rms@gnu.org>
parents: 18174
diff changeset
2824 (vc-annotate-display
3b4321d0ee7e (vc-annotate-mode-variables): Init vc-annotate-mode-menu
Richard M. Stallman <rms@gnu.org>
parents: 18174
diff changeset
2825 (get-buffer (buffer-name))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2826 (vc-annotate-time-span vc-annotate-color-map ,element)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2827 (vc-annotate-get-backend (current-buffer)))
18246
3b4321d0ee7e (vc-annotate-mode-variables): Init vc-annotate-mode-menu
Richard M. Stallman <rms@gnu.org>
parents: 18174
diff changeset
2828 (message "Redisplaying annotation...done"))))))))
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2829
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2830
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2831 ;;;; (defun vc-BACKEND-annotate-command (file buffer) ...)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2832 ;;;; Execute "annotate" on FILE by using `call-process' and insert
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2833 ;;;; the contents in BUFFER.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2834
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2835 ;;;###autoload
33546
4f99fed47d24 (vc-annotate): Changed handling of prefix arg; now asks for both
André Spiegel <spiegel@gnu.org>
parents: 32950
diff changeset
2836 (defun vc-annotate (prefix)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2837 "Display the result of the \"Annotate\" command using colors.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2838 \"Annotate\" is defined by `vc-BACKEND-annotate-command'. New lines
33546
4f99fed47d24 (vc-annotate): Changed handling of prefix arg; now asks for both
André Spiegel <spiegel@gnu.org>
parents: 32950
diff changeset
2839 are displayed in red, old in blue. When given a prefix argument, asks
4f99fed47d24 (vc-annotate): Changed handling of prefix arg; now asks for both
André Spiegel <spiegel@gnu.org>
parents: 32950
diff changeset
2840 for a version to annotate from, and a factor for stretching the time
4f99fed47d24 (vc-annotate): Changed handling of prefix arg; now asks for both
André Spiegel <spiegel@gnu.org>
parents: 32950
diff changeset
2841 scale.
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2842
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2843 `vc-annotate-menu-elements' customizes the menu elements of the
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2844 mode-specific menu. `vc-annotate-color-map' and
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2845 `vc-annotate-very-old-color' defines the mapping of time to
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2846 colors. `vc-annotate-background' specifies the background color."
33546
4f99fed47d24 (vc-annotate): Changed handling of prefix arg; now asks for both
André Spiegel <spiegel@gnu.org>
parents: 32950
diff changeset
2847 (interactive "P")
21366
e7b64d0b3b3d (vc-ensure-vc-buffer): New function.
André Spiegel <spiegel@gnu.org>
parents: 21357
diff changeset
2848 (vc-ensure-vc-buffer)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2849 (let ((temp-buffer-name (concat "*Annotate " (buffer-name) "*"))
33546
4f99fed47d24 (vc-annotate): Changed handling of prefix arg; now asks for both
André Spiegel <spiegel@gnu.org>
parents: 32950
diff changeset
2850 (temp-buffer-show-function 'vc-annotate-display)
4f99fed47d24 (vc-annotate): Changed handling of prefix arg; now asks for both
André Spiegel <spiegel@gnu.org>
parents: 32950
diff changeset
2851 (vc-annotate-version
4f99fed47d24 (vc-annotate): Changed handling of prefix arg; now asks for both
André Spiegel <spiegel@gnu.org>
parents: 32950
diff changeset
2852 (if prefix (read-string
4f99fed47d24 (vc-annotate): Changed handling of prefix arg; now asks for both
André Spiegel <spiegel@gnu.org>
parents: 32950
diff changeset
2853 (format "Annotate from version: (default %s) "
4f99fed47d24 (vc-annotate): Changed handling of prefix arg; now asks for both
André Spiegel <spiegel@gnu.org>
parents: 32950
diff changeset
2854 (vc-workfile-version (buffer-file-name)))
4f99fed47d24 (vc-annotate): Changed handling of prefix arg; now asks for both
André Spiegel <spiegel@gnu.org>
parents: 32950
diff changeset
2855 nil nil (vc-workfile-version (buffer-file-name)))))
4f99fed47d24 (vc-annotate): Changed handling of prefix arg; now asks for both
André Spiegel <spiegel@gnu.org>
parents: 32950
diff changeset
2856 (vc-annotate-ratio
4f99fed47d24 (vc-annotate): Changed handling of prefix arg; now asks for both
André Spiegel <spiegel@gnu.org>
parents: 32950
diff changeset
2857 (if prefix (string-to-number
4f99fed47d24 (vc-annotate): Changed handling of prefix arg; now asks for both
André Spiegel <spiegel@gnu.org>
parents: 32950
diff changeset
2858 (read-string "Annotate ratio: (default 1.0) "
4f99fed47d24 (vc-annotate): Changed handling of prefix arg; now asks for both
André Spiegel <spiegel@gnu.org>
parents: 32950
diff changeset
2859 nil nil "1.0"))))
4f99fed47d24 (vc-annotate): Changed handling of prefix arg; now asks for both
André Spiegel <spiegel@gnu.org>
parents: 32950
diff changeset
2860 (vc-annotate-backend (vc-backend (buffer-file-name))))
4f99fed47d24 (vc-annotate): Changed handling of prefix arg; now asks for both
André Spiegel <spiegel@gnu.org>
parents: 32950
diff changeset
2861 (message "Annotating...")
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2862 (if (not (vc-find-backend-function vc-annotate-backend 'annotate-command))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2863 (error "Sorry, annotating is not implemented for %s"
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2864 vc-annotate-backend))
32344
f91ef1141a75 (with-vc-file, edit-vc-file): Specify `indent-function' property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 32310
diff changeset
2865 (with-output-to-temp-buffer temp-buffer-name
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2866 (vc-call-backend vc-annotate-backend 'annotate-command
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2867 (file-name-nondirectory (buffer-file-name))
33546
4f99fed47d24 (vc-annotate): Changed handling of prefix arg; now asks for both
André Spiegel <spiegel@gnu.org>
parents: 32950
diff changeset
2868 (get-buffer temp-buffer-name)
4f99fed47d24 (vc-annotate): Changed handling of prefix arg; now asks for both
André Spiegel <spiegel@gnu.org>
parents: 32950
diff changeset
2869 vc-annotate-version))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2870 ;; Don't use the temp-buffer-name until the buffer is created
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2871 ;; (only after `with-output-to-temp-buffer'.)
31565
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
2872 (setq vc-annotate-buffers
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2873 (append vc-annotate-buffers
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2874 (list (cons (get-buffer temp-buffer-name) vc-annotate-backend)))))
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2875 (message "Annotating... done"))
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2876
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2877
20752
826e4167d1dc (vc-annotate-compcar): Iterate instead of recursing.
Richard M. Stallman <rms@gnu.org>
parents: 20661
diff changeset
2878 (defun vc-annotate-car-last-cons (a-list)
826e4167d1dc (vc-annotate-compcar): Iterate instead of recursing.
Richard M. Stallman <rms@gnu.org>
parents: 20661
diff changeset
2879 "Return car of last cons in association list A-LIST."
826e4167d1dc (vc-annotate-compcar): Iterate instead of recursing.
Richard M. Stallman <rms@gnu.org>
parents: 20661
diff changeset
2880 (if (not (eq nil (cdr a-list)))
826e4167d1dc (vc-annotate-compcar): Iterate instead of recursing.
Richard M. Stallman <rms@gnu.org>
parents: 20661
diff changeset
2881 (vc-annotate-car-last-cons (cdr a-list))
826e4167d1dc (vc-annotate-compcar): Iterate instead of recursing.
Richard M. Stallman <rms@gnu.org>
parents: 20661
diff changeset
2882 (car (car a-list))))
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2883
20752
826e4167d1dc (vc-annotate-compcar): Iterate instead of recursing.
Richard M. Stallman <rms@gnu.org>
parents: 20661
diff changeset
2884 (defun vc-annotate-time-span (a-list span &optional quantize)
31565
de4e73d77734 (vc-dired-listing-switches): Fix :version.
Dave Love <fx@gnu.org>
parents: 31520
diff changeset
2885 "Apply factor SPAN to the time-span of association list A-LIST.
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2886 Return the new alist.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2887 Optionally quantize to the factor of QUANTIZE."
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2888 ;; Apply span to each car of every cons
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2889 (if (not (eq nil a-list))
20752
826e4167d1dc (vc-annotate-compcar): Iterate instead of recursing.
Richard M. Stallman <rms@gnu.org>
parents: 20661
diff changeset
2890 (append (list (cons (* (car (car a-list)) span)
826e4167d1dc (vc-annotate-compcar): Iterate instead of recursing.
Richard M. Stallman <rms@gnu.org>
parents: 20661
diff changeset
2891 (cdr (car a-list))))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2892 (vc-annotate-time-span (nthcdr (or quantize ; optional
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2893 1) ; Default to cdr
20752
826e4167d1dc (vc-annotate-compcar): Iterate instead of recursing.
Richard M. Stallman <rms@gnu.org>
parents: 20661
diff changeset
2894 a-list) span quantize))))
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2895
20752
826e4167d1dc (vc-annotate-compcar): Iterate instead of recursing.
Richard M. Stallman <rms@gnu.org>
parents: 20661
diff changeset
2896 (defun vc-annotate-compcar (threshold a-list)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2897 "Test successive cons cells of association list A-LIST against THRESHOLD.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2898 Return the first cons cell which car is not less than THRESHOLD,
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2899 nil otherwise"
20752
826e4167d1dc (vc-annotate-compcar): Iterate instead of recursing.
Richard M. Stallman <rms@gnu.org>
parents: 20661
diff changeset
2900 (let ((i 1)
826e4167d1dc (vc-annotate-compcar): Iterate instead of recursing.
Richard M. Stallman <rms@gnu.org>
parents: 20661
diff changeset
2901 (tmp-cons (car a-list)))
826e4167d1dc (vc-annotate-compcar): Iterate instead of recursing.
Richard M. Stallman <rms@gnu.org>
parents: 20661
diff changeset
2902 (while (and tmp-cons (< (car tmp-cons) threshold))
826e4167d1dc (vc-annotate-compcar): Iterate instead of recursing.
Richard M. Stallman <rms@gnu.org>
parents: 20661
diff changeset
2903 (setq tmp-cons (car (nthcdr i a-list)))
826e4167d1dc (vc-annotate-compcar): Iterate instead of recursing.
Richard M. Stallman <rms@gnu.org>
parents: 20661
diff changeset
2904 (setq i (+ i 1)))
826e4167d1dc (vc-annotate-compcar): Iterate instead of recursing.
Richard M. Stallman <rms@gnu.org>
parents: 20661
diff changeset
2905 tmp-cons)) ; Return the appropriate value
826e4167d1dc (vc-annotate-compcar): Iterate instead of recursing.
Richard M. Stallman <rms@gnu.org>
parents: 20661
diff changeset
2906
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2907
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2908 (defun vc-annotate-display (buffer &optional color-map backend)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2909 "Do the VC-Annotate display in BUFFER using COLOR-MAP.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2910 The original annotating file is supposed to be handled by BACKEND.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2911 If BACKEND is NIL, variable VC-ANNOTATE-BACKEND is used instead.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2912 This function is destructive on VC-ANNOTATE-BACKEND when BACKEND is non-nil."
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2913
18246
3b4321d0ee7e (vc-annotate-mode-variables): Init vc-annotate-mode-menu
Richard M. Stallman <rms@gnu.org>
parents: 18174
diff changeset
2914 ;; Handle the case of the global variable vc-annotate-ratio being
3b4321d0ee7e (vc-annotate-mode-variables): Init vc-annotate-mode-menu
Richard M. Stallman <rms@gnu.org>
parents: 18174
diff changeset
2915 ;; set. This variable is used to pass information from function
3b4321d0ee7e (vc-annotate-mode-variables): Init vc-annotate-mode-menu
Richard M. Stallman <rms@gnu.org>
parents: 18174
diff changeset
2916 ;; vc-annotate since it is not possible to use another parameter
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2917 ;; (see temp-buffer-show-function).
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2918 (if (and (not color-map) vc-annotate-ratio)
18246
3b4321d0ee7e (vc-annotate-mode-variables): Init vc-annotate-mode-menu
Richard M. Stallman <rms@gnu.org>
parents: 18174
diff changeset
2919 ;; This will only be true if called from vc-annotate with ratio
3b4321d0ee7e (vc-annotate-mode-variables): Init vc-annotate-mode-menu
Richard M. Stallman <rms@gnu.org>
parents: 18174
diff changeset
2920 ;; being non-nil.
3b4321d0ee7e (vc-annotate-mode-variables): Init vc-annotate-mode-menu
Richard M. Stallman <rms@gnu.org>
parents: 18174
diff changeset
2921 (setq color-map (vc-annotate-time-span vc-annotate-color-map
3b4321d0ee7e (vc-annotate-mode-variables): Init vc-annotate-mode-menu
Richard M. Stallman <rms@gnu.org>
parents: 18174
diff changeset
2922 vc-annotate-ratio)))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2923 (set-buffer buffer)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2924 (display-buffer buffer)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2925 (if (not vc-annotate-mode) ; Turn on vc-annotate-mode if not done
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2926 (vc-annotate-mode))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2927 (goto-char (point-min)) ; Position at the top of the buffer.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2928 ;; Delete old overlays
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2929 (mapcar
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2930 (lambda (overlay)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2931 (if (overlay-get overlay 'vc-annotation)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2932 (delete-overlay overlay)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2933 (overlays-in (point-min) (point-max)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2934 (goto-char (point-min)) ; Position at the top of the buffer.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2935
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2936 (if backend (setq vc-annotate-backend backend)) ; Destructive on `vc-annotate-backend'
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2937
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2938 (let ((difference (vc-call-backend vc-annotate-backend 'annotate-difference (point))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2939 (while difference
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2940 (let*
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2941 ((color (or (vc-annotate-compcar
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2942 difference (or color-map vc-annotate-color-map))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2943 (cons nil vc-annotate-very-old-color)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2944 ;; substring from index 1 to remove any leading `#' in the name
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2945 (face-name (concat "vc-annotate-face-" (substring (cdr color) 1)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2946 ;; Make the face if not done.
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2947 (face (or (intern-soft face-name)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2948 (let ((tmp-face (make-face (intern face-name))))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2949 (set-face-foreground tmp-face (cdr color))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2950 (if vc-annotate-background
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2951 (set-face-background tmp-face vc-annotate-background))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2952 tmp-face))) ; Return the face
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2953 (point (point))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2954 overlay)
20752
826e4167d1dc (vc-annotate-compcar): Iterate instead of recursing.
Richard M. Stallman <rms@gnu.org>
parents: 20661
diff changeset
2955 (forward-line 1)
24139
2b3e32c0fc18 (vc-annotate-display): Delete old overlays. Fix check for major-mode.
André Spiegel <spiegel@gnu.org>
parents: 23980
diff changeset
2956 (setq overlay (make-overlay point (point)))
2b3e32c0fc18 (vc-annotate-display): Delete old overlays. Fix check for major-mode.
André Spiegel <spiegel@gnu.org>
parents: 23980
diff changeset
2957 (overlay-put overlay 'face face)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2958 (overlay-put overlay 'vc-annotation t))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2959 (setq difference (vc-call-backend vc-annotate-backend 'annotate-difference (point))))))
20752
826e4167d1dc (vc-annotate-compcar): Iterate instead of recursing.
Richard M. Stallman <rms@gnu.org>
parents: 20661
diff changeset
2960
18174
238e30645d07 (diff-switches): defvar deleted.
Richard M. Stallman <rms@gnu.org>
parents: 17911
diff changeset
2961
11597
d6d53a54da18 (vc-backend-checkout): Pass vc-checkout-switches arg
Richard M. Stallman <rms@gnu.org>
parents: 11080
diff changeset
2962 ;; Collect back-end-dependent stuff here
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2963
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2964 (defalias 'vc-default-logentry-check 'ignore)
11597
d6d53a54da18 (vc-backend-checkout): Pass vc-checkout-switches arg
Richard M. Stallman <rms@gnu.org>
parents: 11080
diff changeset
2965
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2966 (defun vc-check-headers ()
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2967 "Check if the current file has any headers in it."
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2968 (interactive)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2969 (vc-call-backend (vc-backend buffer-file-name) 'check-headers))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2970
33562
7c20a27966ae Updated backend documentation.
André Spiegel <spiegel@gnu.org>
parents: 33553
diff changeset
2971 (defun vc-default-check-headers (backend)
7c20a27966ae Updated backend documentation.
André Spiegel <spiegel@gnu.org>
parents: 33553
diff changeset
2972 "Default implementation of check-headers; always returns nil."
7c20a27966ae Updated backend documentation.
André Spiegel <spiegel@gnu.org>
parents: 33553
diff changeset
2973 nil)
7c20a27966ae Updated backend documentation.
André Spiegel <spiegel@gnu.org>
parents: 33553
diff changeset
2974
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2975 ;; Back-end-dependent stuff ends here.
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2976
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2977 ;; Set up key bindings for use while editing log messages
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2978
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
2979 (define-derived-mode vc-log-mode text-mode "VC-Log"
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2980 "Major mode for editing VC log entries.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2981 These bindings are added to the global keymap when you enter this mode:
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2982 \\[vc-next-action] perform next logical version-control operation on current file
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2983 \\[vc-register] register current file
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2984 \\[vc-toggle-read-only] like next-action, but won't register files
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2985 \\[vc-insert-headers] insert version-control headers in current file
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2986 \\[vc-print-log] display change history of current file
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2987 \\[vc-revert-buffer] revert buffer to latest version
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2988 \\[vc-cancel-version] undo latest checkin
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2989 \\[vc-diff] show diffs between file versions
4725
126cf4bdfd35 (vc-version-other-window): New function.
Paul Eggert <eggert@twinsun.com>
parents: 4684
diff changeset
2990 \\[vc-version-other-window] visit old version in another window
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2991 \\[vc-directory] show all files locked by any user in or below .
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
2992 \\[vc-annotate] colorful display of the cvs annotate command
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2993 \\[vc-update-change-log] add change log entry from recent checkins
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2994
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2995 While you are entering a change log message for a version, the following
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2996 additional bindings will be in effect.
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2997
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2998 \\[vc-finish-logentry] proceed with check in, ending log message entry
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2999
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3000 Whenever you do a checkin, your log comment is added to a ring of
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3001 saved comments. These can be recalled as follows:
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3002
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3003 \\[vc-next-comment] replace region with next message in comment ring
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3004 \\[vc-previous-comment] replace region with previous message in comment ring
2580
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
3005 \\[vc-comment-search-reverse] search backward for regexp in the comment ring
a66f7ed76416 (vc-diff): Get proper error message when you run this with no prefix
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2558
diff changeset
3006 \\[vc-comment-search-forward] search backward for regexp in the comment ring
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3007
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3008 Entry to the change-log submode calls the value of `text-mode-hook', then
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3009 the value of `vc-log-mode-hook'.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3010
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3011 Global user options:
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3012 `vc-initial-comment' If non-nil, require user to enter a change
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3013 comment upon first checkin of the file.
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3014
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3015 `vc-keep-workfiles' Non-nil value prevents workfiles from being
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3016 deleted when changes are checked in
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3017
33548
714a4c4917cd (vc-revert-buffer): Ask for confirmation if file seems up-to-date.
André Spiegel <spiegel@gnu.org>
parents: 33546
diff changeset
3018 `vc-suppress-confirm' Suppresses some confirmation prompts.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3019
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3020 vc-BACKEND-header Which keywords to insert when adding headers
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3021 with \\[vc-insert-headers]. Defaults to
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3022 '(\"\%\W\%\") under SCCS, '(\"\$Id\$\") under
9249
909ae53a446d (vc-backend-checkin): When CVS checks in a file, it is
Richard M. Stallman <rms@gnu.org>
parents: 9216
diff changeset
3023 RCS and CVS.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3024
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3025 `vc-static-header-alist' By default, version headers inserted in C files
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3026 get stuffed in a static string area so that
9249
909ae53a446d (vc-backend-checkin): When CVS checks in a file, it is
Richard M. Stallman <rms@gnu.org>
parents: 9216
diff changeset
3027 ident(RCS/CVS) or what(SCCS) can see them in
909ae53a446d (vc-backend-checkin): When CVS checks in a file, it is
Richard M. Stallman <rms@gnu.org>
parents: 9216
diff changeset
3028 the compiled object code. You can override
909ae53a446d (vc-backend-checkin): When CVS checks in a file, it is
Richard M. Stallman <rms@gnu.org>
parents: 9216
diff changeset
3029 this by setting this variable to nil, or change
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3030 the header template by changing it.
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3031
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3032 `vc-command-messages' if non-nil, display run messages from the
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3033 actual version-control utilities (this is
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3034 intended primarily for people hacking vc
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
3035 itself)."
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
3036 (make-local-variable 'vc-comment-ring-index))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3037
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3038 (defun vc-log-edit (file)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
3039 "Set up `log-edit' for use with VC on FILE.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
3040 If `log-edit' is not available, resort to `vc-log-mode'."
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
3041 (setq default-directory
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
3042 (if file (file-name-directory file)
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
3043 (with-current-buffer vc-parent-buffer default-directory)))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
3044 (if (fboundp 'log-edit)
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
3045 (log-edit 'vc-finish-logentry nil
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
3046 (if file `(lambda () ',(list (file-name-nondirectory file)))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
3047 ;; If FILE is nil, we were called from vc-dired.
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
3048 (lambda ()
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
3049 (with-current-buffer vc-parent-buffer
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
3050 (dired-get-marked-files t)))))
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
3051 (vc-log-mode))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3052 (set (make-local-variable 'vc-log-file) file)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3053 (make-local-variable 'vc-log-version)
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31387
diff changeset
3054 (set-buffer-modified-p nil)
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3055 (setq buffer-file-name nil))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3056
38374
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3057 ;; These things should probably be generally available
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3058
13012
ac84d1c8c770 (vc-dired-mode): Now a major mode derived from dired-mode.
André Spiegel <spiegel@gnu.org>
parents: 12968
diff changeset
3059 (defun vc-file-tree-walk (dirname func &rest args)
ac84d1c8c770 (vc-dired-mode): Now a major mode derived from dired-mode.
André Spiegel <spiegel@gnu.org>
parents: 12968
diff changeset
3060 "Walk recursively through DIRNAME.
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3061 Invoke FUNC f ARGS on each VC-managed file f underneath it."
13012
ac84d1c8c770 (vc-dired-mode): Now a major mode derived from dired-mode.
André Spiegel <spiegel@gnu.org>
parents: 12968
diff changeset
3062 (vc-file-tree-walk-internal (expand-file-name dirname) func args)
ac84d1c8c770 (vc-dired-mode): Now a major mode derived from dired-mode.
André Spiegel <spiegel@gnu.org>
parents: 12968
diff changeset
3063 (message "Traversing directory %s...done" dirname))
2054
341337259785 (vc-update-change-log): Check that ChangeLog is writable
Paul Eggert <eggert@twinsun.com>
parents: 2041
diff changeset
3064
341337259785 (vc-update-change-log): Check that ChangeLog is writable
Paul Eggert <eggert@twinsun.com>
parents: 2041
diff changeset
3065 (defun vc-file-tree-walk-internal (file func args)
341337259785 (vc-update-change-log): Check that ChangeLog is writable
Paul Eggert <eggert@twinsun.com>
parents: 2041
diff changeset
3066 (if (not (file-directory-p file))
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3067 (if (vc-backend file) (apply func file args))
12311
d33ef5819d81 (vc-register): Inhibit backups for the file's buffer
Richard M. Stallman <rms@gnu.org>
parents: 12281
diff changeset
3068 (message "Traversing directory %s..." (abbreviate-file-name file))
2054
341337259785 (vc-update-change-log): Check that ChangeLog is writable
Paul Eggert <eggert@twinsun.com>
parents: 2041
diff changeset
3069 (let ((dir (file-name-as-directory file)))
341337259785 (vc-update-change-log): Check that ChangeLog is writable
Paul Eggert <eggert@twinsun.com>
parents: 2041
diff changeset
3070 (mapcar
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3071 (lambda (f) (or
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3072 (string-equal f ".")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3073 (string-equal f "..")
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3074 (member f vc-directory-exclusion-list)
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3075 (let ((dirf (expand-file-name f dir)))
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3076 (or
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3077 (file-symlink-p dirf);; Avoid possible loops
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3078 (vc-file-tree-walk-internal dirf func args)))))
2054
341337259785 (vc-update-change-log): Check that ChangeLog is writable
Paul Eggert <eggert@twinsun.com>
parents: 2041
diff changeset
3079 (directory-files dir)))))
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3080
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3081 (provide 'vc)
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3082
38374
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3083 ;; DEVELOPER'S NOTES ON CONCURRENCY PROBLEMS IN THIS CODE
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3084 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3085 ;; These may be useful to anyone who has to debug or extend the package.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3086 ;; (Note that this information corresponds to versions 5.x. Some of it
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3087 ;; might have been invalidated by the additions to support branching
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3088 ;; and RCS keyword lookup. AS, 1995/03/24)
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3089 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3090 ;; A fundamental problem in VC is that there are time windows between
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3091 ;; vc-next-action's computations of the file's version-control state and
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3092 ;; the actions that change it. This is a window open to lossage in a
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3093 ;; multi-user environment; someone else could nip in and change the state
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3094 ;; of the master during it.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3095 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3096 ;; The performance problem is that rlog/prs calls are very expensive; we want
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3097 ;; to avoid them as much as possible.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3098 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3099 ;; ANALYSIS:
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3100 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3101 ;; The performance problem, it turns out, simplifies in practice to the
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3102 ;; problem of making vc-state fast. The two other functions that call
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3103 ;; prs/rlog will not be so commonly used that the slowdown is a problem; one
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3104 ;; makes snapshots, the other deletes the calling user's last change in the
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3105 ;; master.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3106 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3107 ;; The race condition implies that we have to either (a) lock the master
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3108 ;; during the entire execution of vc-next-action, or (b) detect and
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3109 ;; recover from errors resulting from dispatch on an out-of-date state.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3110 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3111 ;; Alternative (a) appears to be infeasible. The problem is that we can't
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3112 ;; guarantee that the lock will ever be removed. Suppose a user starts a
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3113 ;; checkin, the change message buffer pops up, and the user, having wandered
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3114 ;; off to do something else, simply forgets about it?
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3115 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3116 ;; Alternative (b), on the other hand, works well with a cheap way to speed up
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3117 ;; vc-state. Usually, if a file is registered, we can read its locked/
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3118 ;; unlocked state and its current owner from its permissions.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3119 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3120 ;; This shortcut will fail if someone has manually changed the workfile's
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3121 ;; permissions; also if developers are munging the workfile in several
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3122 ;; directories, with symlinks to a master (in this latter case, the
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3123 ;; permissions shortcut will fail to detect a lock asserted from another
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3124 ;; directory).
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3125 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3126 ;; Note that these cases correspond exactly to the errors which could happen
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3127 ;; because of a competing checkin/checkout race in between two instances of
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3128 ;; vc-next-action.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3129 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3130 ;; For VC's purposes, a workfile/master pair may have the following states:
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3131 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3132 ;; A. Unregistered. There is a workfile, there is no master.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3133 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3134 ;; B. Registered and not locked by anyone.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3135 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3136 ;; C. Locked by calling user and unchanged.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3137 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3138 ;; D. Locked by the calling user and changed.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3139 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3140 ;; E. Locked by someone other than the calling user.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3141 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3142 ;; This makes for 25 states and 20 error conditions. Here's the matrix:
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3143 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3144 ;; VC's idea of state
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3145 ;; |
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3146 ;; V Actual state RCS action SCCS action Effect
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3147 ;; A B C D E
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3148 ;; A . 1 2 3 4 ci -u -t- admin -fb -i<file> initial admin
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3149 ;; B 5 . 6 7 8 co -l get -e checkout
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3150 ;; C 9 10 . 11 12 co -u unget; get revert
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3151 ;; D 13 14 15 . 16 ci -u -m<comment> delta -y<comment>; get checkin
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3152 ;; E 17 18 19 20 . rcs -u -M -l unget -n ; get -g steal lock
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3153 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3154 ;; All commands take the master file name as a last argument (not shown).
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3155 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3156 ;; In the discussion below, a "self-race" is a pathological situation in
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3157 ;; which VC operations are being attempted simultaneously by two or more
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3158 ;; Emacsen running under the same username.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3159 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3160 ;; The vc-next-action code has the following windows:
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3161 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3162 ;; Window P:
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3163 ;; Between the check for existence of a master file and the call to
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3164 ;; admin/checkin in vc-buffer-admin (apparent state A). This window may
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3165 ;; never close if the initial-comment feature is on.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3166 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3167 ;; Window Q:
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3168 ;; Between the call to vc-workfile-unchanged-p in and the immediately
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3169 ;; following revert (apparent state C).
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3170 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3171 ;; Window R:
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3172 ;; Between the call to vc-workfile-unchanged-p in and the following
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3173 ;; checkin (apparent state D). This window may never close.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3174 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3175 ;; Window S:
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3176 ;; Between the unlock and the immediately following checkout during a
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3177 ;; revert operation (apparent state C). Included in window Q.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3178 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3179 ;; Window T:
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3180 ;; Between vc-state and the following checkout (apparent state B).
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3181 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3182 ;; Window U:
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3183 ;; Between vc-state and the following revert (apparent state C).
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3184 ;; Includes windows Q and S.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3185 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3186 ;; Window V:
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3187 ;; Between vc-state and the following checkin (apparent state
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3188 ;; D). This window may never be closed if the user fails to complete the
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3189 ;; checkin message. Includes window R.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3190 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3191 ;; Window W:
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3192 ;; Between vc-state and the following steal-lock (apparent
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3193 ;; state E). This window may never close if the user fails to complete
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3194 ;; the steal-lock message. Includes window X.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3195 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3196 ;; Window X:
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3197 ;; Between the unlock and the immediately following re-lock during a
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3198 ;; steal-lock operation (apparent state E). This window may never close
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3199 ;; if the user fails to complete the steal-lock message.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3200 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3201 ;; Errors:
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3202 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3203 ;; Apparent state A ---
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3204 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3205 ;; 1. File looked unregistered but is actually registered and not locked.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3206 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3207 ;; Potential cause: someone else's admin during window P, with
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3208 ;; caller's admin happening before their checkout.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3209 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3210 ;; RCS: Prior to version 5.6.4, ci fails with message
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3211 ;; "no lock set by <user>". From 5.6.4 onwards, VC uses the new
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3212 ;; ci -i option and the message is "<file>,v: already exists".
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3213 ;; SCCS: admin will fail with error (ad19).
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3214 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3215 ;; We can let these errors be passed up to the user.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3216 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3217 ;; 2. File looked unregistered but is actually locked by caller, unchanged.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3218 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3219 ;; Potential cause: self-race during window P.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3220 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3221 ;; RCS: Prior to version 5.6.4, reverts the file to the last saved
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3222 ;; version and unlocks it. From 5.6.4 onwards, VC uses the new
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3223 ;; ci -i option, failing with message "<file>,v: already exists".
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3224 ;; SCCS: will fail with error (ad19).
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3225 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3226 ;; Either of these consequences is acceptable.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3227 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3228 ;; 3. File looked unregistered but is actually locked by caller, changed.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3229 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3230 ;; Potential cause: self-race during window P.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3231 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3232 ;; RCS: Prior to version 5.6.4, VC registers the caller's workfile as
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3233 ;; a delta with a null change comment (the -t- switch will be
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3234 ;; ignored). From 5.6.4 onwards, VC uses the new ci -i option,
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3235 ;; failing with message "<file>,v: already exists".
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3236 ;; SCCS: will fail with error (ad19).
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3237 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3238 ;; 4. File looked unregistered but is locked by someone else.
31380
2d74ed749db8 (vc-next-action-on-file): Do not visit the file if it's
Gerd Moellmann <gerd@gnu.org>
parents: 28460
diff changeset
3239 ;;;
38374
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3240 ;; Potential cause: someone else's admin during window P, with
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3241 ;; caller's admin happening *after* their checkout.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3242 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3243 ;; RCS: Prior to version 5.6.4, ci fails with a
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3244 ;; "no lock set by <user>" message. From 5.6.4 onwards,
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3245 ;; VC uses the new ci -i option, failing with message
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3246 ;; "<file>,v: already exists".
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3247 ;; SCCS: will fail with error (ad19).
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3248 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3249 ;; We can let these errors be passed up to the user.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3250 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3251 ;; Apparent state B ---
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3252 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3253 ;; 5. File looked registered and not locked, but is actually unregistered.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3254 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3255 ;; Potential cause: master file got nuked during window P.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3256 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3257 ;; RCS: will fail with "RCS/<file>: No such file or directory"
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3258 ;; SCCS: will fail with error ut4.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3259 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3260 ;; We can let these errors be passed up to the user.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3261 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3262 ;; 6. File looked registered and not locked, but is actually locked by the
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3263 ;; calling user and unchanged.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3264 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3265 ;; Potential cause: self-race during window T.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3266 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3267 ;; RCS: in the same directory as the previous workfile, co -l will fail
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3268 ;; with "co error: writable foo exists; checkout aborted". In any other
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3269 ;; directory, checkout will succeed.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3270 ;; SCCS: will fail with ge17.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3271 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3272 ;; Either of these consequences is acceptable.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3273 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3274 ;; 7. File looked registered and not locked, but is actually locked by the
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3275 ;; calling user and changed.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3276 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3277 ;; As case 6.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3278 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3279 ;; 8. File looked registered and not locked, but is actually locked by another
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3280 ;; user.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3281 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3282 ;; Potential cause: someone else checks it out during window T.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3283 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3284 ;; RCS: co error: revision 1.3 already locked by <user>
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3285 ;; SCCS: fails with ge4 (in directory) or ut7 (outside it).
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3286 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3287 ;; We can let these errors be passed up to the user.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3288 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3289 ;; Apparent state C ---
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3290 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3291 ;; 9. File looks locked by calling user and unchanged, but is unregistered.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3292 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3293 ;; As case 5.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3294 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3295 ;; 10. File looks locked by calling user and unchanged, but is actually not
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3296 ;; locked.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3297 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3298 ;; Potential cause: a self-race in window U, or by the revert's
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3299 ;; landing during window X of some other user's steal-lock or window S
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3300 ;; of another user's revert.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3301 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3302 ;; RCS: succeeds, refreshing the file from the identical version in
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3303 ;; the master.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3304 ;; SCCS: fails with error ut4 (p file nonexistent).
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3305 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3306 ;; Either of these consequences is acceptable.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3307 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3308 ;; 11. File is locked by calling user. It looks unchanged, but is actually
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3309 ;; changed.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3310 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3311 ;; Potential cause: the file would have to be touched by a self-race
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3312 ;; during window Q.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3313 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3314 ;; The revert will succeed, removing whatever changes came with
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3315 ;; the touch. It is theoretically possible that work could be lost.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3316 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3317 ;; 12. File looks like it's locked by the calling user and unchanged, but
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3318 ;; it's actually locked by someone else.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3319 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3320 ;; Potential cause: a steal-lock in window V.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3321 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3322 ;; RCS: co error: revision <rev> locked by <user>; use co -r or rcs -u
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3323 ;; SCCS: fails with error un2
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3324 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3325 ;; We can pass these errors up to the user.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3326 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3327 ;; Apparent state D ---
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3328 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3329 ;; 13. File looks like it's locked by the calling user and changed, but it's
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3330 ;; actually unregistered.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3331 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3332 ;; Potential cause: master file got nuked during window P.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3333 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3334 ;; RCS: Prior to version 5.6.4, checks in the user's version as an
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3335 ;; initial delta. From 5.6.4 onwards, VC uses the new ci -j
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3336 ;; option, failing with message "no such file or directory".
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3337 ;; SCCS: will fail with error ut4.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3338 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3339 ;; This case is kind of nasty. Under RCS prior to version 5.6.4,
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3340 ;; VC may fail to detect the loss of previous version information.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3341 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3342 ;; 14. File looks like it's locked by the calling user and changed, but it's
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3343 ;; actually unlocked.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3344 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3345 ;; Potential cause: self-race in window V, or the checkin happening
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3346 ;; during the window X of someone else's steal-lock or window S of
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3347 ;; someone else's revert.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3348 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3349 ;; RCS: ci will fail with "no lock set by <user>".
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3350 ;; SCCS: delta will fail with error ut4.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3351 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3352 ;; 15. File looks like it's locked by the calling user and changed, but it's
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3353 ;; actually locked by the calling user and unchanged.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3354 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3355 ;; Potential cause: another self-race --- a whole checkin/checkout
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3356 ;; sequence by the calling user would have to land in window R.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3357 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3358 ;; SCCS: checks in a redundant delta and leaves the file unlocked as usual.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3359 ;; RCS: reverts to the file state as of the second user's checkin, leaving
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3360 ;; the file unlocked.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3361 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3362 ;; It is theoretically possible that work could be lost under RCS.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3363 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3364 ;; 16. File looks like it's locked by the calling user and changed, but it's
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3365 ;; actually locked by a different user.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3366 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3367 ;; RCS: ci error: no lock set by <user>
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3368 ;; SCCS: unget will fail with error un2
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3369 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3370 ;; We can pass these errors up to the user.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3371 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3372 ;; Apparent state E ---
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3373 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3374 ;; 17. File looks like it's locked by some other user, but it's actually
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3375 ;; unregistered.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3376 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3377 ;; As case 13.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3378 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3379 ;; 18. File looks like it's locked by some other user, but it's actually
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3380 ;; unlocked.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3381 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3382 ;; Potential cause: someone released a lock during window W.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3383 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3384 ;; RCS: The calling user will get the lock on the file.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3385 ;; SCCS: unget -n will fail with cm4.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3386 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3387 ;; Either of these consequences will be OK.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3388 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3389 ;; 19. File looks like it's locked by some other user, but it's actually
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3390 ;; locked by the calling user and unchanged.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3391 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3392 ;; Potential cause: the other user relinquishing a lock followed by
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3393 ;; a self-race, both in window W.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3394 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3395 ;; Under both RCS and SCCS, both unlock and lock will succeed, making
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3396 ;; the sequence a no-op.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3397 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3398 ;; 20. File looks like it's locked by some other user, but it's actually
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3399 ;; locked by the calling user and changed.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3400 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3401 ;; As case 19.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3402 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3403 ;; PROBLEM CASES:
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3404 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3405 ;; In order of decreasing severity:
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3406 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3407 ;; Cases 11 and 15 are the only ones that potentially lose work.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3408 ;; They would require a self-race for this to happen.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3409 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3410 ;; Case 13 in RCS loses information about previous deltas, retaining
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3411 ;; only the information in the current workfile. This can only happen
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3412 ;; if the master file gets nuked in window P.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3413 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3414 ;; Case 3 in RCS and case 15 under SCCS insert a redundant delta with
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3415 ;; no change comment in the master. This would require a self-race in
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3416 ;; window P or R respectively.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3417 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3418 ;; Cases 2, 10, 19 and 20 do extra work, but make no changes.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3419 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3420 ;; Unfortunately, it appears to me that no recovery is possible in these
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3421 ;; cases. They don't yield error messages, so there's no way to tell that
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3422 ;; a race condition has occurred.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3423 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3424 ;; All other cases don't change either the workfile or the master, and
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3425 ;; trigger command errors which the user will see.
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3426 ;;
ee328ec2505c (vc-prefix-map): Moved back to vc-hooks.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37544
diff changeset
3427 ;; Thus, there is no explicit recovery code.
904
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3428
4a1ac370d57a Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3429 ;;; vc.el ends here