annotate lisp/pcvs.el @ 107777:13c077500eb3

2010-04-04 John Wiegley <jwiegley@gmail.com> * ido.el (ido-use-virtual-buffers): New variable to indicate whether "virtual buffer" support is enabled for IDO. Essentially it works as follows: Say you are visiting a file and the buffer gets cleaned up by mignight.el. Later, you want to switch to that buffer, but find it's no longer open. With virtual buffers enabled, the buffer name stays in the buffer list (using the ido-virtual face, and always at the end), and if you select it, it opens the file back up again. This allows you to think less about whether recently opened files are still open or not. Most of the time you can quit Emacs, restart, and then switch to a file buffer that was previously open as if it still were. NOTE: This feature has been present in iswitchb for several years now, and I'm porting the same logic to IDO. (ido-virtual): Face used to indicate virtual buffers in the list. (ido-buffer-internal): If a buffer is chosen, and no such buffer exists, but a virtual buffer of that name does (which would be why it was in the list), recreate the buffer by reopening the file. (ido-make-buffer-list): If virtual buffers are being used, call `ido-add-virtual-buffers-to-list' before the make list hook. (ido-virtual-buffers): New variable which contains a copy of the current contents of the `recentf-list', albeit pared down for the sake of speed, and with proper faces applied. (ido-add-virtual-buffers-to-list): Using the `recentf-list', create a list of "virtual buffers" to present to the user in addition to the currently open set. Note that this logic could get rather slow if that list is too large. With the default `recentf-max-saved-items' of 200, there is little speed penalty.
author jwiegley@gmail.com
date Sun, 04 Apr 2010 02:55:19 -0400
parents 1d1d5d9bd884
children 376148b31b5e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38422
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 37339
diff changeset
1 ;;; pcvs.el --- a front-end to CVS
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2
58158
0d53729c8f7a (cvs-mode-checkout): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57505
diff changeset
3 ;; Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 105196
diff changeset
4 ;; 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
5
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
6 ;; Author: (The PCL-CVS Trust) pcl-cvs@cyclic.com
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
7 ;; (Per Cederqvist) ceder@lysator.liu.se
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
8 ;; (Greg A. Woods) woods@weird.com
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
9 ;; (Jim Blandy) jimb@cyclic.com
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
10 ;; (Karl Fogel) kfogel@floss.red-bean.com
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
11 ;; (Jim Kingdon) kingdon@cyclic.com
31977
2f79c1ebd1fe (cvs-ediff-exit-hook): Kill buffer before window.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30879
diff changeset
12 ;; (Stefan Monnier) monnier@cs.yale.edu
2f79c1ebd1fe (cvs-ediff-exit-hook): Kill buffer before window.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30879
diff changeset
13 ;; (Greg Klanderman) greg@alphatech.com
2f79c1ebd1fe (cvs-ediff-exit-hook): Kill buffer before window.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30879
diff changeset
14 ;; (Jari Aalto+mail.emacs) jari.aalto@poboxes.com
54619
261ba76ae244 (cvs-parse-process): Workaround for Darwin.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54376
diff changeset
15 ;; Maintainer: (Stefan Monnier) monnier@gnu.org
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
16 ;; Keywords: CVS, version control, release management
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
17
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
18 ;; This file is part of GNU Emacs.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
19
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87785
diff changeset
20 ;; GNU Emacs is free software: you can redistribute it and/or modify
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
21 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87785
diff changeset
22 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87785
diff changeset
23 ;; (at your option) any later version.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
24
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
25 ;; GNU Emacs is distributed in the hope that it will be useful,
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
26 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
27 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
28 ;; GNU General Public License for more details.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
29
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
30 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87785
diff changeset
31 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
32
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
33 ;;; Commentary:
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
34
28256
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
35 ;; PCL-CVS is a front-end to the CVS version control system. For people
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
36 ;; familiar with VC, it is somewhat like VC-dired: it presents the status of
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
37 ;; all the files in your working area and allows you to commit/update several
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
38 ;; of them at a time. Compared to VC-dired, it is considerably better and
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
39 ;; faster (but only for CVS).
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
40
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
41 ;; PCL-CVS was originally written by Per Cederqvist many years ago. This
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
42 ;; version derives from the XEmacs-21 version, itself based on the 2.0b2
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
43 ;; version (last release from Per). It is a thorough rework.
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
44
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
45 ;; Contrary to what you'd expect, PCL-CVS is not a replacement for VC but only
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
46 ;; for VC-dired. As such, I've tried to make PCL-CVS and VC interoperate
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
47 ;; seamlessly (I also use VC).
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
48
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
49 ;; To use PCL-CVS just use `M-x cvs-examine RET <dir> RET'.
30717
e6e5480e5b25 (cvs-menu): Don't move point. Use popup-menu.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30618
diff changeset
50 ;; There is a TeXinfo manual, which can be helpful to get started.
28256
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
51
34376
25976c39c41e * pcvs.el (cvs-menu): Use `cvs-menu' rather than `cvs-menu-map'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34304
diff changeset
52 ;;; Bugs:
25976c39c41e * pcvs.el (cvs-menu): Use `cvs-menu' rather than `cvs-menu-map'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34304
diff changeset
53
39392
11216aa2d43c *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38422
diff changeset
54 ;; - Extracting an old version seems not to recognize encoding correctly.
11216aa2d43c *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38422
diff changeset
55 ;; That's probably because it's done via a process rather than a file.
34376
25976c39c41e * pcvs.el (cvs-menu): Use `cvs-menu' rather than `cvs-menu-map'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34304
diff changeset
56
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
57 ;;; Todo:
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
58
28256
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
59 ;; ******** FIX THE DOCUMENTATION *********
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48671
diff changeset
60 ;;
34376
25976c39c41e * pcvs.el (cvs-menu): Use `cvs-menu' rather than `cvs-menu-map'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34304
diff changeset
61 ;; - rework the displaying of error messages.
33234
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
62 ;; - allow to flush messages only
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
63 ;; - allow to protect files like ChangeLog from flushing
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
64 ;; - automatically cvs-mode-insert files from find-file-hook
33195
d296e0e3cf43 (cvs-mode-add-change-log-entry-other-window):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32488
diff changeset
65 ;; (and don't flush them as long as they are visited)
33234
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
66 ;; - query the user for cvs-get-marked (for some cmds or if nothing's selected)
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
67 ;; - don't return the first (resp last) FI if the cursor is before
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
68 ;; (resp after) it.
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
69 ;; - allow cvs-confirm-removals to force always confirmation.
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
70 ;; - cvs-checkout should ask for a revision (with completion).
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
71 ;; - removal confirmation should allow specifying another file name.
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48671
diff changeset
72 ;;
30717
e6e5480e5b25 (cvs-menu): Don't move point. Use popup-menu.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30618
diff changeset
73 ;; - hide fileinfos without getting rid of them (will require ewok work).
28256
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
74 ;; - add toolbar entries
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
75 ;; - marking
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
76 ;; marking directories should jump to just after the dir.
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
77 ;; allow (un)marking directories at a time with the mouse.
37339
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
78 ;; allow cvs-cmd-do to either clear the marks or not.
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
79 ;; add a "marks active" notion, like transient-mark-mode does.
28256
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
80 ;; - liveness indicator
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
81 ;; - indicate in docstring if the cmd understands the `b' prefix(es).
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
82 ;; - call smerge-mode when opening CONFLICT files.
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
83 ;; - have vc-checkin delegate to cvs-mode-commit when applicable
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
84 ;; - higher-level CVS operations
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
85 ;; cvs-mode-rename
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
86 ;; cvs-mode-branch
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
87 ;; - module-level commands
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
88 ;; add support for parsing 'modules' file ("cvs co -c")
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
89 ;; cvs-mode-rcs2log
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
90 ;; cvs-rdiff
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
91 ;; cvs-release
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
92 ;; cvs-import
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
93 ;; C-u M-x cvs-checkout should ask for a cvsroot
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
94 ;; cvs-mode-handle-new-vendor-version
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
95 ;; - checks out module, or alternately does update join
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
96 ;; - does "cvs -n tag LAST_VENDOR" to find old files into *cvs*
28256
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
97 ;; cvs-export
30879
3a1ff1caafe2 * emacs-lisp/ewoc.el (ewoc-locate): Default POS to (point).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30717
diff changeset
98 ;; (with completion on tag names and hooks to help generate full releases)
28256
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
99 ;; - display stickiness information. And current CVS/Tag as well.
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
100 ;; - write 'cvs-mode-admin' to do arbitrary 'cvs admin' commands
29577
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
101 ;; Most interesting would be version removal and log message replacement.
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
102 ;; The last one would be neat when called from log-view-mode.
28256
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
103 ;; - cvs-mode-incorporate
29577
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
104 ;; It would merge in the status from one *cvs* buffer into another.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
105 ;; This would be used to populate such a buffer that had been created with
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
106 ;; a `cvs {update,status,checkout} -l'.
28256
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
107 ;; - cvs-mode-(i)diff-other-{file,buffer,cvs-buffer}
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
108 ;; - offer the choice to kill the process when the user kills the cvs buffer.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
109 ;; right now, it's killed without further ado.
28256
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
110 ;; - make `cvs-mode-ignore' allow manually entering a pattern.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
111 ;; to which dir should it apply ?
28256
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
112 ;; - cvs-mode-ignore should try to remove duplicate entries.
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
113 ;; - maybe poll/check CVS/Entries files to react to external `cvs' commands ?
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
114 ;; - some kind of `cvs annotate' support ?
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
115 ;; but vc-annotate can be used instead.
30879
3a1ff1caafe2 * emacs-lisp/ewoc.el (ewoc-locate): Default POS to (point).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30717
diff changeset
116 ;; - proper `g' that passes safe args and uses either cvs-status or cvs-examine
3a1ff1caafe2 * emacs-lisp/ewoc.el (ewoc-locate): Default POS to (point).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30717
diff changeset
117 ;; maybe also use cvs-update depending on I-don't-know-what.
28256
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
118 ;; - add message-levels so that we can hide some levels of messages
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
119
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
120 ;;; Code:
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
121
30612
a019ed819488 (require): Require `cl' during compilation, only.
Gerd Moellmann <gerd@gnu.org>
parents: 30569
diff changeset
122 (eval-when-compile (require 'cl))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
123 (require 'ewoc) ;Ewoc was once cookie
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
124 (require 'pcvs-defs)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
125 (require 'pcvs-util)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
126 (require 'pcvs-parse)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
127 (require 'pcvs-info)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
128
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
129
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
130 ;;;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
131 ;;;; global vars
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
132 ;;;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
133
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
134 (defvar cvs-cookies) ;;nil
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
135 ;;"Handle for the cookie structure that is displayed in the *cvs* buffer.")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
136 ;;(make-variable-buffer-local 'cvs-cookies)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
137
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
138 ;;;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
139 ;;;; Dynamically scoped variables
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
140 ;;;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
141
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
142 (defvar cvs-from-vc nil "Bound to t inside VC advice.")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
143
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
144 ;;;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
145 ;;;; flags variables
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
146 ;;;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
147
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
148 (defun cvs-defaults (&rest defs)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
149 (let ((defs (cvs-first defs cvs-shared-start)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
150 (append defs
30879
3a1ff1caafe2 * emacs-lisp/ewoc.el (ewoc-locate): Default POS to (point).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30717
diff changeset
151 (make-list (- cvs-shared-start (length defs)) (car defs))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
152 cvs-shared-flags)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
153
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
154 ;; For cvs flags, we need to add "-f" to override the cvsrc settings
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
155 ;; we also want to evict the annoying -q and -Q options that hide useful
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
156 ;; information from pcl-cvs.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
157 (cvs-flags-define cvs-cvs-flags '(("-f")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
158
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
159 (cvs-flags-define cvs-checkout-flags (cvs-defaults '("-P")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
160 (cvs-flags-define cvs-status-flags (cvs-defaults '("-v") nil))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
161 (cvs-flags-define cvs-log-flags (cvs-defaults nil))
29577
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
162 (cvs-flags-define cvs-diff-flags (cvs-defaults '("-u" "-N") '("-c" "-N") '("-u" "-b")))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
163 (cvs-flags-define cvs-tag-flags (cvs-defaults nil))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
164 (cvs-flags-define cvs-add-flags (cvs-defaults nil))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
165 (cvs-flags-define cvs-commit-flags (cvs-defaults nil))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
166 (cvs-flags-define cvs-remove-flags (cvs-defaults nil))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
167 ;;(cvs-flags-define cvs-undo-flags (cvs-defaults nil))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
168 (cvs-flags-define cvs-update-flags (cvs-defaults '("-d" "-P")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
169
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
170 (defun cvs-reread-cvsrc ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
171 "Reset the default arguments to those in the `cvs-cvsrc-file'."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
172 (interactive)
41779
d31a6beb070e (cvs-reread-cvsrc): Don't use cvs-file-to-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40479
diff changeset
173 (condition-case nil
d31a6beb070e (cvs-reread-cvsrc): Don't use cvs-file-to-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40479
diff changeset
174 (with-temp-buffer
d31a6beb070e (cvs-reread-cvsrc): Don't use cvs-file-to-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40479
diff changeset
175 (insert-file-contents cvs-cvsrc-file)
d31a6beb070e (cvs-reread-cvsrc): Don't use cvs-file-to-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40479
diff changeset
176 ;; fetch the values
d31a6beb070e (cvs-reread-cvsrc): Don't use cvs-file-to-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40479
diff changeset
177 (dolist (cmd '("cvs" "checkout" "status" "log" "diff" "tag"
d31a6beb070e (cvs-reread-cvsrc): Don't use cvs-file-to-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40479
diff changeset
178 "add" "commit" "remove" "update"))
d31a6beb070e (cvs-reread-cvsrc): Don't use cvs-file-to-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40479
diff changeset
179 (goto-char (point-min))
42966
afd482080b6f (cvs-reread-cvsrc): Distinguish between an empty list of
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42206
diff changeset
180 (when (re-search-forward
afd482080b6f (cvs-reread-cvsrc): Distinguish between an empty list of
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42206
diff changeset
181 (concat "^" cmd "\\(\\s-+\\(.*\\)\\)?$") nil t)
afd482080b6f (cvs-reread-cvsrc): Distinguish between an empty list of
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42206
diff changeset
182 (let* ((sym (intern (concat "cvs-" cmd "-flags")))
78535
651c50f01f5f (cvs-reread-cvsrc, cvs-checkout, cvs-mode-checkout)
Richard M. Stallman <rms@gnu.org>
parents: 78239
diff changeset
183 (val (split-string-and-unquote (or (match-string 2) ""))))
42966
afd482080b6f (cvs-reread-cvsrc): Distinguish between an empty list of
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42206
diff changeset
184 (cvs-flags-set sym 0 val))))
41779
d31a6beb070e (cvs-reread-cvsrc): Don't use cvs-file-to-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40479
diff changeset
185 ;; ensure that cvs doesn't have -q or -Q
d31a6beb070e (cvs-reread-cvsrc): Don't use cvs-file-to-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40479
diff changeset
186 (cvs-flags-set 'cvs-cvs-flags 0
d31a6beb070e (cvs-reread-cvsrc): Don't use cvs-file-to-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40479
diff changeset
187 (cons "-f"
d31a6beb070e (cvs-reread-cvsrc): Don't use cvs-file-to-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40479
diff changeset
188 (cdr (cvs-partition
42966
afd482080b6f (cvs-reread-cvsrc): Distinguish between an empty list of
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42206
diff changeset
189 (lambda (x) (member x '("-q" "-Q" "-f")))
41779
d31a6beb070e (cvs-reread-cvsrc): Don't use cvs-file-to-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40479
diff changeset
190 (cvs-flags-query 'cvs-cvs-flags
d31a6beb070e (cvs-reread-cvsrc): Don't use cvs-file-to-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40479
diff changeset
191 nil 'noquery))))))
d31a6beb070e (cvs-reread-cvsrc): Don't use cvs-file-to-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40479
diff changeset
192 (file-error nil)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
193
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
194 ;; initialize to cvsrc's default values
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
195 (cvs-reread-cvsrc)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
196
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
197
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
198 ;;;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
199 ;;;; Mouse bindings and mode motion
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
200 ;;;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
201
50958
d20464e3d617 (cvs-minor-current-files): Move before first use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50956
diff changeset
202 (defvar cvs-minor-current-files)
d20464e3d617 (cvs-minor-current-files): Move before first use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50956
diff changeset
203
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
204 (defun cvs-menu (e)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
205 "Popup the CVS menu."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
206 (interactive "e")
30717
e6e5480e5b25 (cvs-menu): Don't move point. Use popup-menu.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30618
diff changeset
207 (let ((cvs-minor-current-files
e6e5480e5b25 (cvs-menu): Don't move point. Use popup-menu.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30618
diff changeset
208 (list (ewoc-data (ewoc-locate
e6e5480e5b25 (cvs-menu): Don't move point. Use popup-menu.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30618
diff changeset
209 cvs-cookies (posn-point (event-end e)))))))
34376
25976c39c41e * pcvs.el (cvs-menu): Use `cvs-menu' rather than `cvs-menu-map'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34304
diff changeset
210 (popup-menu cvs-menu e)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
211
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
212 (defvar cvs-mode-line-process nil
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
213 "Mode-line control for displaying info on cvs process status.")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
214
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
215
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
216 ;;;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
217 ;;;; Query-Type-Descriptor for Tags
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
218 ;;;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
219
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
220 (autoload 'cvs-status-get-tags "cvs-status")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
221 (defun cvs-tags-list ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
222 "Return a list of acceptable tags, ready for completions."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
223 (assert (cvs-buffer-p))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
224 (let ((marked (cvs-get-marked)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
225 (list* '("BASE") '("HEAD")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
226 (when marked
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
227 (with-temp-buffer
84571
44b45775d250 (cvs-tags-list, cvs-retrieve-revision, cvs-find-modif)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84380
diff changeset
228 (process-file cvs-program
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
229 nil ;no input
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
230 t ;output to current-buffer
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
231 nil ;don't update display while running
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
232 "status"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
233 "-v"
61867
59330b4d0e5b Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61245
diff changeset
234 (cvs-fileinfo->full-name (car marked)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
235 (goto-char (point-min))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
236 (let ((tags (cvs-status-get-tags)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
237 (when (listp tags) tags)))))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
238
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
239 (defvar cvs-tag-history nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
240 (defconst cvs-qtypedesc-tag
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
241 (cvs-qtypedesc-create 'identity 'identity 'cvs-tags-list 'cvs-tag-history))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
242
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
243 ;;;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
244
50143
93622ce43bdd (cvs-mode!): Remove unused argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49688
diff changeset
245 (defun cvs-mode! (&optional -cvs-mode!-fun)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
246 "Switch to the *cvs* buffer.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
247 If -CVS-MODE!-FUN is provided, it is executed *cvs* being the current buffer
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
248 and with its window selected. Else, the *cvs* buffer is simply selected.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
249 -CVS-MODE!-FUN is called interactively if applicable and else with no argument."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
250 (let* ((-cvs-mode!-buf (current-buffer))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
251 (cvsbuf (cond ((cvs-buffer-p) (current-buffer))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
252 ((and cvs-buffer (cvs-buffer-p cvs-buffer)) cvs-buffer)
38422
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 37339
diff changeset
253 (t (error "can't find the *cvs* buffer"))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
254 (-cvs-mode!-wrapper cvs-minor-wrap-function)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
255 (-cvs-mode!-cont (lambda ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
256 (save-current-buffer
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
257 (if (commandp -cvs-mode!-fun)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
258 (call-interactively -cvs-mode!-fun)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
259 (funcall -cvs-mode!-fun))))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
260 (if (not -cvs-mode!-fun) (set-buffer cvsbuf)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
261 (let ((cvs-mode!-buf (current-buffer))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
262 (cvs-mode!-owin (selected-window))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
263 (cvs-mode!-nwin (get-buffer-window cvsbuf 'visible)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
264 (unwind-protect
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
265 (progn
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
266 (set-buffer cvsbuf)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
267 (when cvs-mode!-nwin (select-window cvs-mode!-nwin))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
268 (if -cvs-mode!-wrapper
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
269 (funcall -cvs-mode!-wrapper -cvs-mode!-buf -cvs-mode!-cont)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
270 (funcall -cvs-mode!-cont)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
271 (set-buffer cvs-mode!-buf)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
272 (when (and cvs-mode!-nwin (eq cvs-mode!-nwin (selected-window)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
273 ;; the selected window has not been changed by FUN
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
274 (select-window cvs-mode!-owin)))))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
275
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
276 ;;;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
277 ;;;; Prefixes
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
278 ;;;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
279
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
280 (defvar cvs-branches (list cvs-vendor-branch "HEAD" "HEAD"))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
281 (cvs-prefix-define cvs-branch-prefix
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
282 "Current selected branch."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
283 "version"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
284 (cons cvs-vendor-branch cvs-branches)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
285 cvs-qtypedesc-tag)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
286
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
287 (defun cvs-set-branch-prefix (arg)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
288 "Set the branch prefix to take action at the next command.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
289 See `cvs-prefix-set' for a further the description of the behavior.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
290 \\[universal-argument] 1 selects the vendor branch
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
291 and \\[universal-argument] 2 selects the HEAD."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
292 (interactive "P")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
293 (cvs-mode!)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
294 (cvs-prefix-set 'cvs-branch-prefix arg))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
295
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
296 (defun cvs-add-branch-prefix (flags &optional arg)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
297 "Add branch selection argument if the branch prefix was set.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
298 The argument is added (or not) to the list of FLAGS and is constructed
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
299 by appending the branch to ARG which defaults to \"-r\"."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
300 (let ((branch (cvs-prefix-get 'cvs-branch-prefix)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
301 ;; deactivate the secondary prefix, even if not used.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
302 (cvs-prefix-get 'cvs-secondary-branch-prefix)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
303 (if branch (cons (concat (or arg "-r") branch) flags) flags)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
304
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
305 (cvs-prefix-define cvs-secondary-branch-prefix
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
306 "Current secondary selected branch."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
307 "version"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
308 (cons cvs-vendor-branch cvs-branches)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
309 cvs-qtypedesc-tag)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
310
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
311 (defun cvs-set-secondary-branch-prefix (arg)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
312 "Set the branch prefix to take action at the next command.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
313 See `cvs-prefix-set' for a further the description of the behavior.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
314 \\[universal-argument] 1 selects the vendor branch
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
315 and \\[universal-argument] 2 selects the HEAD."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
316 (interactive "P")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
317 (cvs-mode!)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
318 (cvs-prefix-set 'cvs-secondary-branch-prefix arg))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
319
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
320 (defun cvs-add-secondary-branch-prefix (flags &optional arg)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
321 "Add branch selection argument if the secondary branch prefix was set.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
322 The argument is added (or not) to the list of FLAGS and is constructed
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
323 by appending the branch to ARG which defaults to \"-r\".
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
324 Since the `cvs-secondary-branch-prefix' is only active if the primary
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
325 prefix is active, it is important to read the secondary prefix before
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
326 the primay since reading the primary can deactivate it."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
327 (let ((branch (and (cvs-prefix-get 'cvs-branch-prefix 'read-only)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
328 (cvs-prefix-get 'cvs-secondary-branch-prefix))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
329 (if branch (cons (concat (or arg "-r") branch) flags) flags)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
330
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
331 ;;;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
332
33234
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
333 (define-minor-mode cvs-minor-mode
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
334 "This mode is used for buffers related to a main *cvs* buffer.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
335 All the `cvs-mode' buffer operations are simply rebound under
33234
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
336 the \\[cvs-mode-map] prefix."
48445
86325beb168c (cvs-minor-mode, cvs-mode-commit-hook): Add group.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 48285
diff changeset
337 nil " CVS"
86325beb168c (cvs-minor-mode, cvs-mode-commit-hook): Add group.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 48285
diff changeset
338 :group 'pcl-cvs)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
339 (put 'cvs-minor-mode 'permanent-local t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
340
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
341
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
342 (defvar cvs-temp-buffers nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
343 (defun cvs-temp-buffer (&optional cmd normal nosetup)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
344 "Create a temporary buffer to run CMD in.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
345 If CMD is a string, use it to lookup `cvs-buffer-name-alist' to find
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
346 the buffer name to be used and its `major-mode'.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
347
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
348 The selected window will not be changed. The new buffer will not maintain undo
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
349 information and will be read-only unless NORMAL is non-nil. It will be emptied
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
350 \(unless NOSETUP is non-nil\) and its `default-directory' will be inherited
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
351 from the current buffer."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
352 (let* ((cvs-buf (current-buffer))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
353 (info (cdr (assoc cmd cvs-buffer-name-alist)))
30618
9dd1a6504bdd Use `nth' instead of `first', `second', and `third'.
Gerd Moellmann <gerd@gnu.org>
parents: 30612
diff changeset
354 (name (eval (nth 0 info)))
9dd1a6504bdd Use `nth' instead of `first', `second', and `third'.
Gerd Moellmann <gerd@gnu.org>
parents: 30612
diff changeset
355 (mode (nth 1 info))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
356 (dir default-directory)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
357 (buf (cond
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
358 (name (cvs-get-buffer-create name))
61205
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
359 ((and (bufferp cvs-temp-buffer) (buffer-live-p cvs-temp-buffer))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
360 cvs-temp-buffer)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
361 (t
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
362 (set (make-local-variable 'cvs-temp-buffer)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
363 (cvs-get-buffer-create
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
364 (eval cvs-temp-buffer-name) 'noreuse))))))
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
365
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
366 ;; handle the potential pre-existing process
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
367 (let ((proc (get-buffer-process buf)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
368 (when (and (not normal) (processp proc)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
369 (memq (process-status proc) '(run stop)))
51170
ae05e83c45d5 (cvs-temp-buffer): Kill running process in displayed buffers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50991
diff changeset
370 (if cmd
ae05e83c45d5 (cvs-temp-buffer): Kill running process in displayed buffers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50991
diff changeset
371 ;; When CMD is specified, the buffer is normally shown to the
ae05e83c45d5 (cvs-temp-buffer): Kill running process in displayed buffers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50991
diff changeset
372 ;; user, so interrupting the process is not harmful.
ae05e83c45d5 (cvs-temp-buffer): Kill running process in displayed buffers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50991
diff changeset
373 ;; Use `delete-process' rather than `kill-process' otherwise
ae05e83c45d5 (cvs-temp-buffer): Kill running process in displayed buffers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50991
diff changeset
374 ;; the pending output of the process will still get inserted
ae05e83c45d5 (cvs-temp-buffer): Kill running process in displayed buffers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50991
diff changeset
375 ;; after we erase the buffer.
ae05e83c45d5 (cvs-temp-buffer): Kill running process in displayed buffers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50991
diff changeset
376 (delete-process proc)
ae05e83c45d5 (cvs-temp-buffer): Kill running process in displayed buffers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50991
diff changeset
377 (error "Can not run two cvs processes simultaneously"))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
378
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
379 (if (not name) (kill-local-variable 'other-window-scroll-buffer)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
380 ;; Strangely, if no window is created, `display-buffer' ends up
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
381 ;; doing a `switch-to-buffer' which does a `set-buffer', hence
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
382 ;; the need for `save-excursion'.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
383 (unless nosetup (save-excursion (display-buffer buf)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
384 ;; FIXME: this doesn't do the right thing if the user later on
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
385 ;; does a `find-file-other-window' and `scroll-other-window'
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
386 (set (make-local-variable 'other-window-scroll-buffer) buf))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
387
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
388 (add-to-list 'cvs-temp-buffers buf)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
389
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
390 (with-current-buffer buf
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
391 (setq buffer-read-only nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
392 (setq default-directory dir)
78239
be7fbb40c851 (cvs-temp-buffer): Undo last ill-conceived change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
393 (unless nosetup
be7fbb40c851 (cvs-temp-buffer): Undo last ill-conceived change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
394 ;; Disable undo before calling erase-buffer since it may generate
be7fbb40c851 (cvs-temp-buffer): Undo last ill-conceived change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
395 ;; a very large and unwanted undo record.
be7fbb40c851 (cvs-temp-buffer): Undo last ill-conceived change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
396 (buffer-disable-undo)
be7fbb40c851 (cvs-temp-buffer): Undo last ill-conceived change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
397 (erase-buffer))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
398 (set (make-local-variable 'cvs-buffer) cvs-buf)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
399 ;;(cvs-minor-mode 1)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
400 (let ((lbd list-buffers-directory))
78239
be7fbb40c851 (cvs-temp-buffer): Undo last ill-conceived change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
401 (if (fboundp mode) (funcall mode) (fundamental-mode))
105196
d991506f9286 * menu-bar.el (list-buffers-directory): Add docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 104916
diff changeset
402 (when lbd (setq list-buffers-directory lbd)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
403 (cvs-minor-mode 1)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
404 ;;(set (make-local-variable 'cvs-buffer) cvs-buf)
78239
be7fbb40c851 (cvs-temp-buffer): Undo last ill-conceived change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
405 (if normal
be7fbb40c851 (cvs-temp-buffer): Undo last ill-conceived change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
406 (buffer-enable-undo)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
407 (setq buffer-read-only t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
408 (buffer-disable-undo))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
409 buf)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
410
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
411 (defun cvs-mode-kill-buffers ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
412 "Kill all the \"temporary\" buffers created by the *cvs* buffer."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
413 (interactive)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
414 (dolist (buf cvs-temp-buffers) (ignore-errors (kill-buffer buf))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
415
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
416 (defun cvs-make-cvs-buffer (dir &optional new)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
417 "Create the *cvs* buffer for directory DIR.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
418 If non-nil, NEW means to create a new buffer no matter what."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
419 ;; the real cvs-buffer creation
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
420 (setq dir (cvs-expand-dir-name dir))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
421 (let* ((buffer-name (eval cvs-buffer-name))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
422 (buffer
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
423 (or (and (not new)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
424 (eq cvs-reuse-cvs-buffer 'current)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
425 (cvs-buffer-p) ;reuse the current buffer if possible
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
426 (current-buffer))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
427 ;; look for another cvs buffer visiting the same directory
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
428 (save-excursion
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
429 (unless new
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
430 (dolist (buffer (cons (current-buffer) (buffer-list)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
431 (set-buffer buffer)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
432 (and (cvs-buffer-p)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
433 (case cvs-reuse-cvs-buffer
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
434 (always t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
435 (subdir
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
436 (or (cvs-string-prefix-p default-directory dir)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
437 (cvs-string-prefix-p dir default-directory)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
438 (samedir (string= default-directory dir)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
439 (return buffer)))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
440 ;; we really have to create a new buffer:
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
441 ;; we temporarily bind cwd to "" to prevent
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
442 ;; create-file-buffer from using directory info
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
443 ;; unless it is explicitly in the cvs-buffer-name.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
444 (cvs-get-buffer-create buffer-name new))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
445 (with-current-buffer buffer
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
446 (or
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
447 (and (string= dir default-directory) (cvs-buffer-p)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
448 ;; just a refresh
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
449 (ignore-errors
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
450 (cvs-cleanup-collection cvs-cookies nil nil t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
451 (current-buffer)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
452 ;; setup from scratch
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
453 (progn
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
454 (setq default-directory dir)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
455 (setq buffer-read-only nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
456 (erase-buffer)
50965
c1e6923f4f9b (cvs-make-cvs-buffer): Add the tag info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50958
diff changeset
457 (insert "Repository : " (directory-file-name (cvs-get-cvsroot))
c1e6923f4f9b (cvs-make-cvs-buffer): Add the tag info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50958
diff changeset
458 "\nModule : " (cvs-get-module)
c1e6923f4f9b (cvs-make-cvs-buffer): Add the tag info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50958
diff changeset
459 "\nWorking dir: " (abbreviate-file-name dir)
c1e6923f4f9b (cvs-make-cvs-buffer): Add the tag info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50958
diff changeset
460 (if (not (file-readable-p "CVS/Tag")) "\n"
c1e6923f4f9b (cvs-make-cvs-buffer): Add the tag info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50958
diff changeset
461 (let ((tag (cvs-file-to-string "CVS/Tag")))
c1e6923f4f9b (cvs-make-cvs-buffer): Add the tag info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50958
diff changeset
462 (cond
c1e6923f4f9b (cvs-make-cvs-buffer): Add the tag info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50958
diff changeset
463 ((string-match "\\`T" tag)
c1e6923f4f9b (cvs-make-cvs-buffer): Add the tag info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50958
diff changeset
464 (concat "\nTag : " (substring tag 1)))
c1e6923f4f9b (cvs-make-cvs-buffer): Add the tag info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50958
diff changeset
465 ((string-match "\\`D" tag)
c1e6923f4f9b (cvs-make-cvs-buffer): Add the tag info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50958
diff changeset
466 (concat "\nDate : " (substring tag 1)))
51170
ae05e83c45d5 (cvs-temp-buffer): Kill running process in displayed buffers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50991
diff changeset
467 ("\n"))))
ae05e83c45d5 (cvs-temp-buffer): Kill running process in displayed buffers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50991
diff changeset
468 "\n")
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
469 (setq buffer-read-only t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
470 (cvs-mode)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
471 (set (make-local-variable 'list-buffers-directory) buffer-name)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
472 ;;(set (make-local-variable 'cvs-temp-buffer) (cvs-temp-buffer))
71007
4f58e5dcbbc0 (cvs-make-cvs-buffer): Specify NOSEP to `ewoc-create'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 70708
diff changeset
473 (let ((cookies (ewoc-create 'cvs-fileinfo-pp "\n\n" "\n" t)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
474 (set (make-local-variable 'cvs-cookies) cookies)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
475 (add-hook 'kill-buffer-hook
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
476 (lambda ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
477 (ignore-errors (kill-buffer cvs-temp-buffer)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
478 nil t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
479 ;;(set-buffer buf)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
480 buffer))))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
481
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
482 (defun* cvs-cmd-do (cmd dir flags fis new
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
483 &key cvsargs noexist dont-change-disc noshow)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
484 (let* ((dir (file-name-as-directory
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
485 (abbreviate-file-name (expand-file-name dir))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
486 (cvsbuf (cvs-make-cvs-buffer dir new)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
487 ;; Check that dir is under CVS control.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
488 (unless (file-directory-p dir)
29577
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
489 (error "%s is not a directory" dir))
45325
8b7e7b9551fe (cvs-cmd-do): Accept non-CVS dirs with CVS-ctrl'd subdirs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44384
diff changeset
490 (unless (or noexist (file-directory-p (expand-file-name "CVS" dir))
8b7e7b9551fe (cvs-cmd-do): Accept non-CVS dirs with CVS-ctrl'd subdirs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44384
diff changeset
491 (file-expand-wildcards (expand-file-name "*/CVS" dir)))
29577
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
492 (error "%s does not contain CVS controlled files" dir))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
493
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
494 (set-buffer cvsbuf)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
495 (cvs-mode-run cmd flags fis
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
496 :cvsargs cvsargs :dont-change-disc dont-change-disc)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
497
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
498 (if noshow cvsbuf
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
499 (let ((pop-up-windows nil)) (pop-to-buffer cvsbuf)))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
500 ;; (funcall (if (and (boundp 'pop-up-frames) pop-up-frames)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
501 ;; 'pop-to-buffer 'switch-to-buffer)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
502 ;; cvsbuf))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
503
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
504 (defun cvs-run-process (args fis postprocess &optional single-dir)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
505 (assert (cvs-buffer-p cvs-buffer))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
506 (save-current-buffer
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
507 (let ((procbuf (current-buffer))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
508 (cvsbuf cvs-buffer)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
509 (single-dir (or single-dir (eq cvs-execute-single-dir t))))
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
510
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
511 (set-buffer procbuf)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
512 (goto-char (point-max))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
513 (unless (bolp) (let ((inhibit-read-only t)) (insert "\n")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
514 ;; find the set of files we'll process in this round
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
515 (let* ((dir+files+rest
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
516 (if (or (null fis) (not single-dir))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
517 ;; not single-dir mode: just process the whole thing
61867
59330b4d0e5b Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61245
diff changeset
518 (list "" (mapcar 'cvs-fileinfo->full-name fis) nil)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
519 ;; single-dir mode: extract the same-dir-elements
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
520 (let ((dir (cvs-fileinfo->dir (car fis))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
521 ;; output the concerned dir so the parser can translate paths
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
522 (let ((inhibit-read-only t))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
523 (insert "pcl-cvs: descending directory " dir "\n"))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
524 ;; loop to find the same-dir-elems
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
525 (do* ((files () (cons (cvs-fileinfo->file fi) files))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
526 (fis fis (cdr fis))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
527 (fi (car fis) (car fis)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
528 ((not (and fis (string= dir (cvs-fileinfo->dir fi))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
529 (list dir files fis))))))
30618
9dd1a6504bdd Use `nth' instead of `first', `second', and `third'.
Gerd Moellmann <gerd@gnu.org>
parents: 30612
diff changeset
530 (dir (nth 0 dir+files+rest))
9dd1a6504bdd Use `nth' instead of `first', `second', and `third'.
Gerd Moellmann <gerd@gnu.org>
parents: 30612
diff changeset
531 (files (nth 1 dir+files+rest))
9dd1a6504bdd Use `nth' instead of `first', `second', and `third'.
Gerd Moellmann <gerd@gnu.org>
parents: 30612
diff changeset
532 (rest (nth 2 dir+files+rest)))
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
533
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
534 (add-hook 'kill-buffer-hook
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
535 (lambda ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
536 (let ((proc (get-buffer-process (current-buffer))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
537 (when (processp proc)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
538 (set-process-filter proc nil)
61205
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
539 ;; Abort postprocessing but leave the sentinel so it
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
540 ;; will update the list of running procs.
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
541 (process-put proc 'cvs-postprocess nil)
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
542 (interrupt-process proc))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
543 nil t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
544
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
545 ;; create the new process and setup the procbuffer correspondingly
61205
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
546 (let* ((msg (cvs-header-msg args fis))
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
547 (args (append (cvs-flags-query 'cvs-cvs-flags nil 'noquery)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
548 (if cvs-cvsroot (list "-d" cvs-cvsroot))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
549 args
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
550 files))
47211
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
551 ;; If process-connection-type is nil and the repository
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
552 ;; is accessed via SSH, a bad interaction between libc,
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
553 ;; CVS and SSH can lead to garbled output.
61205
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
554 ;; It might be a glibc-specific problem (but it can also happens
49688
372d20665473 Comment update.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49597
diff changeset
555 ;; under Mac OS X, it seems).
61205
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
556 ;; It seems that using a pty can help circumvent the problem,
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
557 ;; but at the cost of screwing up when the process thinks it
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
558 ;; can ask for user input (such as password or host-key
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
559 ;; confirmation). A better workaround is to set CVS_RSH to
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
560 ;; an appropriate script, or to use a later version of CVS.
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
561 (process-connection-type nil) ; Use a pipe, not a pty.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
562 (process
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
563 ;; the process will be run in the selected dir
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
564 (let ((default-directory (cvs-expand-dir-name dir)))
84571
44b45775d250 (cvs-tags-list, cvs-retrieve-revision, cvs-find-modif)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84380
diff changeset
565 (apply 'start-file-process "cvs" procbuf cvs-program args))))
61205
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
566 ;; setup the process.
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
567 (process-put process 'cvs-buffer cvs-buffer)
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
568 (with-current-buffer cvs-buffer (cvs-update-header msg 'add))
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
569 (process-put process 'cvs-header msg)
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
570 (process-put
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
571 process 'cvs-postprocess
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
572 (if (null rest)
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
573 ;; this is the last invocation
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
574 postprocess
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
575 ;; else, we have to register ourselves to be rerun on the rest
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
576 `(cvs-run-process ',args ',rest ',postprocess ',single-dir)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
577 (set-process-sentinel process 'cvs-sentinel)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
578 (set-process-filter process 'cvs-update-filter)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
579 (set-marker (process-mark process) (point-max))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
580 (ignore-errors (process-send-eof process)) ;close its stdin to avoid hangs
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
581
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
582 ;; now finish setting up the cvs-buffer
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
583 (set-buffer cvsbuf)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
584 (setq cvs-mode-line-process (symbol-name (process-status process)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
585 (force-mode-line-update)))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
586
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
587 ;; The following line is said to improve display updates on some
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
588 ;; emacsen. It shouldn't be needed, but it does no harm.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
589 (sit-for 0))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
590
58717
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
591 (defun cvs-header-msg (args fis)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
592 (let* ((lastarg nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
593 (args (mapcar (lambda (arg)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
594 (cond
47211
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
595 ;; filter out the largish commit message
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
596 ((and (eq lastarg nil) (string= arg "commit"))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
597 (setq lastarg 'commit) arg)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
598 ((and (eq lastarg 'commit) (string= arg "-m"))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
599 (setq lastarg '-m) arg)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
600 ((eq lastarg '-m)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
601 (setq lastarg 'done) "<log message>")
47211
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
602 ;; filter out the largish `admin -mrev:msg' message
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
603 ((and (eq lastarg nil) (string= arg "admin"))
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
604 (setq lastarg 'admin) arg)
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
605 ((and (eq lastarg 'admin)
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
606 (string-match "\\`-m[^:]*:" arg))
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
607 (setq lastarg 'done)
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
608 (concat (match-string 0 arg) "<log message>"))
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
609 ;; Keep the rest as is.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
610 (t arg)))
58717
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
611 args)))
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
612 (concat cvs-program " "
78535
651c50f01f5f (cvs-reread-cvsrc, cvs-checkout, cvs-mode-checkout)
Richard M. Stallman <rms@gnu.org>
parents: 78239
diff changeset
613 (combine-and-quote-strings
58717
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
614 (append (cvs-flags-query 'cvs-cvs-flags nil 'noquery)
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
615 (if cvs-cvsroot (list "-d" cvs-cvsroot))
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
616 args
61867
59330b4d0e5b Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61245
diff changeset
617 (mapcar 'cvs-fileinfo->full-name fis))))))
58717
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
618
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
619 (defun cvs-update-header (cmd add)
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
620 (let* ((hf (ewoc-get-hf cvs-cookies))
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
621 (str (car hf))
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
622 (done "")
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
623 (tin (ewoc-nth cvs-cookies 0)))
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
624 ;; look for the first *real* fileinfo (to determine emptyness)
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
625 (while
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
626 (and tin
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
627 (memq (cvs-fileinfo->type (ewoc-data tin))
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
628 '(MESSAGE DIRCHANGE)))
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
629 (setq tin (ewoc-next cvs-cookies tin)))
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
630 (if add
73207
7e220566994b (cvs-update-header): Fix handling of extra newlines so that
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72386
diff changeset
631 (progn
7e220566994b (cvs-update-header): Fix handling of extra newlines so that
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72386
diff changeset
632 ;; Remove the default empty line, if applicable.
7e220566994b (cvs-update-header): Fix handling of extra newlines so that
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72386
diff changeset
633 (if (not (string-match "." str)) (setq str "\n"))
7e220566994b (cvs-update-header): Fix handling of extra newlines so that
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72386
diff changeset
634 (setq str (concat "-- Running " cmd " ...\n" str)))
58717
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
635 (if (not (string-match
84380
2fa07ee359f5 Add comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82907
diff changeset
636 ;; FIXME: If `cmd' is large, this will bump into the
2fa07ee359f5 Add comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82907
diff changeset
637 ;; compiled-regexp size limit. We could drop the "^" anchor
2fa07ee359f5 Add comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 82907
diff changeset
638 ;; and use search-forward to circumvent the problem.
58717
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
639 (concat "^-- Running " (regexp-quote cmd) " \\.\\.\\.\n") str))
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
640 (error "Internal PCL-CVS error while removing message")
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
641 (setq str (replace-match "" t t str))
73207
7e220566994b (cvs-update-header): Fix handling of extra newlines so that
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72386
diff changeset
642 ;; Re-add the default empty line, if applicable.
7e220566994b (cvs-update-header): Fix handling of extra newlines so that
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72386
diff changeset
643 (if (not (string-match "." str)) (setq str "\n\n"))
7e220566994b (cvs-update-header): Fix handling of extra newlines so that
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72386
diff changeset
644 (setq done (concat "-- last cmd: " cmd " --\n"))))
58717
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
645 ;; set the new header and footer
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
646 (ewoc-set-hf cvs-cookies
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
647 str (concat "\n--------------------- "
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
648 (if tin "End" "Empty")
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
649 " ---------------------\n"
bd9d0c90fd28 (cvs-header-msg): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58158
diff changeset
650 done))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
651
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
652
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
653 (defun cvs-sentinel (proc msg)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
654 "Sentinel for the cvs update process.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
655 This is responsible for parsing the output from the cvs update when
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
656 it is finished."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
657 (when (memq (process-status proc) '(signal exit))
61206
9c95a69e7e08 (cvs-sentinel): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61205
diff changeset
658 (let ((cvs-postproc (process-get proc 'cvs-postprocess))
65874
03746d1d1011 (cvs-sentinel): Make sure we do re-enable undo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65582
diff changeset
659 (cvs-buf (process-get proc 'cvs-buffer))
03746d1d1011 (cvs-sentinel): Make sure we do re-enable undo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65582
diff changeset
660 (procbuf (process-buffer proc)))
03746d1d1011 (cvs-sentinel): Make sure we do re-enable undo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65582
diff changeset
661 (unless (buffer-live-p cvs-buf) (setq cvs-buf nil))
03746d1d1011 (cvs-sentinel): Make sure we do re-enable undo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65582
diff changeset
662 (unless (buffer-live-p procbuf) (setq procbuf nil))
61205
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
663 ;; Since the buffer and mode line will show that the
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
664 ;; process is dead, we can delete it now. Otherwise it
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
665 ;; will stay around until M-x list-processes.
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
666 (process-put proc 'postprocess nil)
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
667 (delete-process proc)
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
668 ;; Don't do anything if the main buffer doesn't exist any more.
65874
03746d1d1011 (cvs-sentinel): Make sure we do re-enable undo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65582
diff changeset
669 (when cvs-buf
61205
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
670 (with-current-buffer cvs-buf
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
671 (cvs-update-header (process-get proc 'cvs-header) nil)
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
672 (setq cvs-mode-line-process (symbol-name (process-status proc)))
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
673 (force-mode-line-update)
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
674 (when cvs-postproc
65874
03746d1d1011 (cvs-sentinel): Make sure we do re-enable undo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65582
diff changeset
675 (if (null procbuf)
61205
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
676 ;;(set-process-buffer proc nil)
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
677 (error "cvs' process buffer was killed")
65874
03746d1d1011 (cvs-sentinel): Make sure we do re-enable undo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65582
diff changeset
678 (with-current-buffer procbuf
03746d1d1011 (cvs-sentinel): Make sure we do re-enable undo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65582
diff changeset
679 ;; Do the postprocessing like parsing and such.
03746d1d1011 (cvs-sentinel): Make sure we do re-enable undo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65582
diff changeset
680 (save-excursion (eval cvs-postproc)))))))
03746d1d1011 (cvs-sentinel): Make sure we do re-enable undo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65582
diff changeset
681 ;; Check whether something is left.
03746d1d1011 (cvs-sentinel): Make sure we do re-enable undo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65582
diff changeset
682 (when (and procbuf (not (get-buffer-process procbuf)))
03746d1d1011 (cvs-sentinel): Make sure we do re-enable undo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65582
diff changeset
683 (with-current-buffer procbuf
03746d1d1011 (cvs-sentinel): Make sure we do re-enable undo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65582
diff changeset
684 ;; IIRC, we enable undo again once the process is finished
03746d1d1011 (cvs-sentinel): Make sure we do re-enable undo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65582
diff changeset
685 ;; for cases where the output was inserted in *vc-diff* or
03746d1d1011 (cvs-sentinel): Make sure we do re-enable undo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65582
diff changeset
686 ;; in a file-like buffer. --Stef
03746d1d1011 (cvs-sentinel): Make sure we do re-enable undo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65582
diff changeset
687 (buffer-enable-undo)
03746d1d1011 (cvs-sentinel): Make sure we do re-enable undo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65582
diff changeset
688 (with-current-buffer (or cvs-buf (current-buffer))
03746d1d1011 (cvs-sentinel): Make sure we do re-enable undo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65582
diff changeset
689 (message "CVS process has completed in %s"
03746d1d1011 (cvs-sentinel): Make sure we do re-enable undo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65582
diff changeset
690 (buffer-name))))))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
691
45999
6efc3066895b (cvs-fileinfo-kill): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45904
diff changeset
692 (defun cvs-parse-process (dcd &optional subdir old-fis)
6efc3066895b (cvs-fileinfo-kill): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45904
diff changeset
693 "Parse the output of a cvs process.
6efc3066895b (cvs-fileinfo-kill): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45904
diff changeset
694 DCD is the `dont-change-disc' flag to use when parsing that output.
6efc3066895b (cvs-fileinfo-kill): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45904
diff changeset
695 SUBDIR is the subdirectory (if any) where this command was run.
6efc3066895b (cvs-fileinfo-kill): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45904
diff changeset
696 OLD-FIS is the list of fileinfos on which the cvs command was applied and
6efc3066895b (cvs-fileinfo-kill): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45904
diff changeset
697 which should be considered up-to-date if they are missing from the output."
54619
261ba76ae244 (cvs-parse-process): Workaround for Darwin.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54376
diff changeset
698 (when (eq system-type 'darwin)
261ba76ae244 (cvs-parse-process): Workaround for Darwin.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54376
diff changeset
699 ;; Fixup the ^D^H^H inserted at beginning of buffer sometimes on MacOSX
261ba76ae244 (cvs-parse-process): Workaround for Darwin.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54376
diff changeset
700 ;; because of the call to `process-send-eof'.
261ba76ae244 (cvs-parse-process): Workaround for Darwin.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54376
diff changeset
701 (save-excursion
261ba76ae244 (cvs-parse-process): Workaround for Darwin.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54376
diff changeset
702 (goto-char (point-min))
261ba76ae244 (cvs-parse-process): Workaround for Darwin.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54376
diff changeset
703 (while (re-search-forward "^\\^D+" nil t)
261ba76ae244 (cvs-parse-process): Workaround for Darwin.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54376
diff changeset
704 (let ((inhibit-read-only t))
261ba76ae244 (cvs-parse-process): Workaround for Darwin.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54376
diff changeset
705 (delete-region (match-beginning 0) (match-end 0))))))
46002
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
706 (let* ((fileinfos (cvs-parse-buffer 'cvs-parse-table dcd subdir))
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
707 last)
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
708 (with-current-buffer cvs-buffer
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
709 ;; Expand OLD-FIS to actual files.
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
710 (let ((fis nil))
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
711 (dolist (fi old-fis)
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
712 (setq fis (if (eq (cvs-fileinfo->type fi) 'DIRCHANGE)
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
713 (nconc (ewoc-collect cvs-cookies 'cvs-dir-member-p
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
714 (cvs-fileinfo->dir fi))
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
715 fis)
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
716 (cons fi fis))))
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
717 (setq old-fis fis))
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
718 ;; Drop OLD-FIS which were already up-to-date.
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
719 (let ((fis nil))
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
720 (dolist (fi old-fis)
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
721 (unless (eq (cvs-fileinfo->type fi) 'UP-TO-DATE) (push fi fis)))
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
722 (setq old-fis fis))
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
723 ;; Add the new fileinfos to the ewoc.
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
724 (dolist (fi fileinfos)
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
725 (setq last (cvs-addto-collection cvs-cookies fi last))
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
726 ;; This FI was in the output, so remove it from OLD-FIS.
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
727 (setq old-fis (delq (ewoc-data last) old-fis)))
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
728 ;; Process the "silent output" (i.e. absence means up-to-date).
45999
6efc3066895b (cvs-fileinfo-kill): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45904
diff changeset
729 (dolist (fi old-fis)
46002
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
730 (setf (cvs-fileinfo->type fi) 'UP-TO-DATE)
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
731 (setq last (cvs-addto-collection cvs-cookies fi last)))
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
732 (setq fileinfos (nconc old-fis fileinfos))
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
733 ;; Clean up the ewoc as requested by the user.
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
734 (cvs-cleanup-collection cvs-cookies
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
735 (eq cvs-auto-remove-handled t)
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
736 cvs-auto-remove-directories
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
737 nil)
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
738 ;; Revert buffers if necessary.
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
739 (when (and cvs-auto-revert (not dcd) (not cvs-from-vc))
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
740 (cvs-revert-if-needed fileinfos)))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
741
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
742 (defmacro defun-cvs-mode (fun args docstring interact &rest body)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
743 "Define a function to be used in a *cvs* buffer.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
744 This will look for a *cvs* buffer and execute BODY in it.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
745 Since the interactive arguments might need to be queried after
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
746 switching to the *cvs* buffer, the generic code is rather ugly,
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
747 but luckily we can often use simpler alternatives.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
748
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
749 FUN can be either a symbol (i.e. STYLE is nil) or a cons (FUN . STYLE).
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
750 ARGS and DOCSTRING are the normal argument list.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
751 INTERACT is the interactive specification or nil for non-commands.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
752
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
753 STYLE can be either SIMPLE, NOARGS or DOUBLE. It's an error for it
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
754 to have any other value, unless other details of the function make it
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
755 clear what alternative to use.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
756 - SIMPLE will get all the interactive arguments from the original buffer.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
757 - NOARGS will get all the arguments from the *cvs* buffer and will
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
758 always behave as if called interactively.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
759 - DOUBLE is the generic case."
97363
e4c43328a99d (defun-cvs-mode): Add `doc-string' decl.
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
760 (declare (debug (&define sexp lambda-list stringp ("interactive" interactive) def-body))
e4c43328a99d (defun-cvs-mode): Add `doc-string' decl.
John Paul Wallington <jpw@pobox.com>
parents: 94678
diff changeset
761 (doc-string 3))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
762 (let ((style (cvs-cdr fun))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
763 (fun (cvs-car fun)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
764 (cond
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
765 ;; a trivial interaction, no need to move it
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
766 ((or (eq style 'SIMPLE)
30618
9dd1a6504bdd Use `nth' instead of `first', `second', and `third'.
Gerd Moellmann <gerd@gnu.org>
parents: 30612
diff changeset
767 (null (nth 1 interact))
9dd1a6504bdd Use `nth' instead of `first', `second', and `third'.
Gerd Moellmann <gerd@gnu.org>
parents: 30612
diff changeset
768 (stringp (nth 1 interact)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
769 `(defun ,fun ,args ,docstring ,interact
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
770 (cvs-mode! (lambda () ,@body))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
771
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
772 ;; fun is only called interactively: move all the args to the inner fun
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
773 ((eq style 'NOARGS)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
774 `(defun ,fun () ,docstring (interactive)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
775 (cvs-mode! (lambda ,args ,interact ,@body))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
776
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
777 ;; bad case
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
778 ((eq style 'DOUBLE)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
779 (string-match ".*" docstring)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
780 (let ((line1 (match-string 0 docstring))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
781 (fun-1 (intern (concat (symbol-name fun) "-1"))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
782 `(progn
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
783 (defun ,fun-1 ,args
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
784 ,(concat docstring "\nThis function only works within a *cvs* buffer.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
785 For interactive use, use `" (symbol-name fun) "' instead.")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
786 ,interact
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
787 ,@body)
67377
f031a0708433 (defun-cvs-mode): Put `definition-name' property on
Juri Linkov <juri@jurta.org>
parents: 66096
diff changeset
788 (put ',fun-1 'definition-name ',fun)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
789 (defun ,fun ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
790 ,(concat line1 "\nWrapper function that switches to a *cvs* buffer
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
791 before calling the real function `" (symbol-name fun-1) "'.\n")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
792 (interactive)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
793 (cvs-mode! ',fun-1)))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
794
55695
b25f4dadde90 (defun-cvs-mode): Fix capitalization of error message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55458
diff changeset
795 (t (error "Unknown style %s in `defun-cvs-mode'" style)))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
796
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
797 (defun-cvs-mode cvs-mode-kill-process ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
798 "Kill the temporary buffer and associated process."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
799 (interactive)
61205
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
800 (when (and (bufferp cvs-temp-buffer) (buffer-live-p cvs-temp-buffer))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
801 (let ((proc (get-buffer-process cvs-temp-buffer)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
802 (when proc (delete-process proc)))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
803
37339
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
804 ;;
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
805 ;; Maintaining the collection in the face of updates
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
806 ;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
807
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
808 (defun cvs-addto-collection (c fi &optional tin)
32488
1fd2c9a94ec3 * pcvs.el (cvs-make-cvs-buffer, cvs-run-process):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32309
diff changeset
809 "Add FI to C and return FI's corresponding tin.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
810 FI is inserted in its proper place or maybe even merged with a preexisting
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
811 fileinfo if applicable.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
812 TIN specifies an optional starting point."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
813 (unless tin (setq tin (ewoc-nth c 0)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
814 (while (and tin (cvs-fileinfo< fi (ewoc-data tin)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
815 (setq tin (ewoc-prev c tin)))
32488
1fd2c9a94ec3 * pcvs.el (cvs-make-cvs-buffer, cvs-run-process):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32309
diff changeset
816 (if (null tin) (ewoc-enter-first c fi) ;empty collection
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
817 (assert (not (cvs-fileinfo< fi (ewoc-data tin))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
818 (let ((next-tin (ewoc-next c tin)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
819 (while (not (or (null next-tin)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
820 (cvs-fileinfo< fi (ewoc-data next-tin))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
821 (setq tin next-tin next-tin (ewoc-next c next-tin)))
37339
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
822 (if (or (cvs-fileinfo< (ewoc-data tin) fi)
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
823 (eq (cvs-fileinfo->type fi) 'MESSAGE))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
824 ;; tin < fi < next-tin
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
825 (ewoc-enter-after c tin fi)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
826 ;; fi == tin
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
827 (cvs-fileinfo-update (ewoc-data tin) fi)
32488
1fd2c9a94ec3 * pcvs.el (cvs-make-cvs-buffer, cvs-run-process):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32309
diff changeset
828 (ewoc-invalidate c tin)
46002
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
829 ;; Move cursor back to where it belongs.
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
830 (when (bolp) (cvs-move-to-goal-column))
32488
1fd2c9a94ec3 * pcvs.el (cvs-make-cvs-buffer, cvs-run-process):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32309
diff changeset
831 tin))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
832
29577
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
833 (defcustom cvs-cleanup-functions nil
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
834 "Functions to tweak the cleanup process.
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
835 The functions are called with a single argument (a FILEINFO) and should
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
836 return a non-nil value if that fileinfo should be removed."
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
837 :group 'pcl-cvs
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
838 :type '(hook :options (cvs-cleanup-removed)))
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
839
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
840 (defun cvs-cleanup-removed (fi)
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
841 "Non-nil if FI has been cvs-removed but still exists.
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
842 This is intended for use on `cvs-cleanup-functions' when you have cvs-removed
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
843 automatically generated files (which should hence not be under CVS control)
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
844 but can't commit the removal because the repository's owner doesn't understand
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
845 the problem."
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
846 (and (or (eq (cvs-fileinfo->type fi) 'REMOVED)
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
847 (and (eq (cvs-fileinfo->type fi) 'CONFLICT)
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
848 (eq (cvs-fileinfo->subtype fi) 'REMOVED)))
61867
59330b4d0e5b Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61245
diff changeset
849 (file-exists-p (cvs-fileinfo->full-name fi))))
29577
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
850
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
851 ;; called at the following times:
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
852 ;; - postparse ((eq cvs-auto-remove-handled t) cvs-auto-remove-directories nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
853 ;; - pre-run ((eq cvs-auto-remove-handled 'delayed) nil t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
854 ;; - remove-handled (t (or cvs-auto-remove-directories 'handled) t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
855 ;; - cvs-cmd-do (nil nil t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
856 ;; - post-ignore (nil nil nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
857 ;; - acknowledge (nil nil nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
858 ;; - remove (nil nil nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
859 (defun cvs-cleanup-collection (c rm-handled rm-dirs rm-msgs)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
860 "Remove undesired entries.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
861 C is the collection
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
862 RM-HANDLED if non-nil means remove handled entries.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
863 RM-DIRS behaves like `cvs-auto-remove-directories'.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
864 RM-MSGS if non-nil means remove messages."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
865 (let (last-fi first-dir (rerun t))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
866 (while rerun
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
867 (setq rerun nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
868 (setq first-dir t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
869 (setq last-fi (cvs-create-fileinfo 'DEAD "../" "" "")) ;place-holder
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
870 (ewoc-filter
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
871 c (lambda (fi)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
872 (let* ((type (cvs-fileinfo->type fi))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
873 (subtype (cvs-fileinfo->subtype fi))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
874 (keep
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
875 (case type
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
876 ;; remove temp messages and keep the others
28862
d089f0a330a0 (cvs-cleanup-collection): Remove obsolete code for
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
877 (MESSAGE (not (or rm-msgs (eq subtype 'TEMP))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
878 ;; remove entries
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
879 (DEAD nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
880 ;; handled also?
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
881 (UP-TO-DATE (not rm-handled))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
882 ;; keep the rest
29577
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
883 (t (not (run-hook-with-args-until-success
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
884 'cvs-cleanup-functions fi))))))
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
885
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
886 ;; mark dirs for removal
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
887 (when (and keep rm-dirs
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
888 (eq (cvs-fileinfo->type last-fi) 'DIRCHANGE)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
889 (not (when first-dir (setq first-dir nil) t))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
890 (or (eq rm-dirs 'all)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
891 (not (cvs-string-prefix-p
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
892 (cvs-fileinfo->dir last-fi)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
893 (cvs-fileinfo->dir fi)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
894 (and (eq type 'DIRCHANGE) (eq rm-dirs 'empty))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
895 (eq subtype 'FOOTER)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
896 (setf (cvs-fileinfo->type last-fi) 'DEAD)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
897 (setq rerun t))
28862
d089f0a330a0 (cvs-cleanup-collection): Remove obsolete code for
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
898 (when keep (setq last-fi fi)))))
d089f0a330a0 (cvs-cleanup-collection): Remove obsolete code for
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
899 ;; remove empty last dir
d089f0a330a0 (cvs-cleanup-collection): Remove obsolete code for
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
900 (when (and rm-dirs
d089f0a330a0 (cvs-cleanup-collection): Remove obsolete code for
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
901 (not first-dir)
d089f0a330a0 (cvs-cleanup-collection): Remove obsolete code for
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
902 (eq (cvs-fileinfo->type last-fi) 'DIRCHANGE))
d089f0a330a0 (cvs-cleanup-collection): Remove obsolete code for
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
903 (setf (cvs-fileinfo->type last-fi) 'DEAD)
d089f0a330a0 (cvs-cleanup-collection): Remove obsolete code for
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
904 (setq rerun t)))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
905
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
906 (defun cvs-get-cvsroot ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
907 "Gets the CVSROOT for DIR."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
908 (let ((cvs-cvsroot-file (expand-file-name "Root" "CVS")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
909 (or (cvs-file-to-string cvs-cvsroot-file t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
910 cvs-cvsroot
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
911 (getenv "CVSROOT")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
912 "?????")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
913
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
914 (defun cvs-get-module ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
915 "Return the current CVS module.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
916 This usually doesn't really work but is a handy initval in a prompt."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
917 (let* ((repfile (expand-file-name "Repository" "CVS"))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
918 (rep (cvs-file-to-string repfile t)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
919 (cond
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
920 ((null rep) "")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
921 ((not (file-name-absolute-p rep)) rep)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
922 (t
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
923 (let* ((root (cvs-get-cvsroot))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
924 (str (concat (file-name-as-directory (or root "/")) " || " rep)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
925 (if (and root (string-match "\\(.*\\) || \\1\\(.*\\)\\'" str))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
926 (match-string 2 str)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
927 (file-name-nondirectory rep)))))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
928
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
929
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
930
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
931 ;;;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
932 ;;;; running a "cvs checkout".
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
933 ;;;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
934
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
935 ;;;###autoload
61245
b8fb5fb4b960 (cvs-checkout): Prompt for cvsroot as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61206
diff changeset
936 (defun cvs-checkout (modules dir flags &optional root)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
937 "Run a 'cvs checkout MODULES' in DIR.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
938 Feed the output to a *cvs* buffer, display it in the current window,
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
939 and run `cvs-mode' on it.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
940
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
941 With a prefix argument, prompt for cvs FLAGS to use."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
942 (interactive
61245
b8fb5fb4b960 (cvs-checkout): Prompt for cvsroot as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61206
diff changeset
943 (let ((root (cvs-get-cvsroot)))
b8fb5fb4b960 (cvs-checkout): Prompt for cvsroot as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61206
diff changeset
944 (if (or (null root) current-prefix-arg)
b8fb5fb4b960 (cvs-checkout): Prompt for cvsroot as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61206
diff changeset
945 (setq root (read-string "CVS Root: ")))
78535
651c50f01f5f (cvs-reread-cvsrc, cvs-checkout, cvs-mode-checkout)
Richard M. Stallman <rms@gnu.org>
parents: 78239
diff changeset
946 (list (split-string-and-unquote
651c50f01f5f (cvs-reread-cvsrc, cvs-checkout, cvs-mode-checkout)
Richard M. Stallman <rms@gnu.org>
parents: 78239
diff changeset
947 (read-string "Module(s): " (cvs-get-module)))
61245
b8fb5fb4b960 (cvs-checkout): Prompt for cvsroot as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61206
diff changeset
948 (read-directory-name "CVS Checkout Directory: "
b8fb5fb4b960 (cvs-checkout): Prompt for cvsroot as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61206
diff changeset
949 nil default-directory nil)
b8fb5fb4b960 (cvs-checkout): Prompt for cvsroot as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61206
diff changeset
950 (cvs-add-branch-prefix
b8fb5fb4b960 (cvs-checkout): Prompt for cvsroot as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61206
diff changeset
951 (cvs-flags-query 'cvs-checkout-flags "cvs checkout flags"))
b8fb5fb4b960 (cvs-checkout): Prompt for cvsroot as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61206
diff changeset
952 root)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
953 (when (eq flags t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
954 (setf flags (cvs-flags-query 'cvs-checkout-flags nil 'noquery)))
61245
b8fb5fb4b960 (cvs-checkout): Prompt for cvsroot as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61206
diff changeset
955 (let ((cvs-cvsroot root))
b8fb5fb4b960 (cvs-checkout): Prompt for cvsroot as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61206
diff changeset
956 (cvs-cmd-do "checkout" (or dir default-directory)
b8fb5fb4b960 (cvs-checkout): Prompt for cvsroot as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61206
diff changeset
957 (append flags modules) nil 'new
b8fb5fb4b960 (cvs-checkout): Prompt for cvsroot as well.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61206
diff changeset
958 :noexist t)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
959
58158
0d53729c8f7a (cvs-mode-checkout): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57505
diff changeset
960 (defun-cvs-mode (cvs-mode-checkout . NOARGS) (dir)
0d53729c8f7a (cvs-mode-checkout): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57505
diff changeset
961 "Run cvs checkout against the current branch.
0d53729c8f7a (cvs-mode-checkout): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57505
diff changeset
962 The files are stored to DIR."
63421
8d79f84e54e8 (cvs-mode): Follow error conventions.
Juanma Barranquero <lekktu@gmail.com>
parents: 63210
diff changeset
963 (interactive
58158
0d53729c8f7a (cvs-mode-checkout): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57505
diff changeset
964 (let* ((branch (cvs-prefix-get 'cvs-branch-prefix))
63421
8d79f84e54e8 (cvs-mode): Follow error conventions.
Juanma Barranquero <lekktu@gmail.com>
parents: 63210
diff changeset
965 (prompt (format "CVS Checkout Directory for `%s%s': "
58158
0d53729c8f7a (cvs-mode-checkout): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57505
diff changeset
966 (cvs-get-module)
0d53729c8f7a (cvs-mode-checkout): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57505
diff changeset
967 (if branch (format " (branch: %s)" branch)
0d53729c8f7a (cvs-mode-checkout): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57505
diff changeset
968 ""))))
0d53729c8f7a (cvs-mode-checkout): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57505
diff changeset
969 (list (read-directory-name prompt nil default-directory nil))))
78535
651c50f01f5f (cvs-reread-cvsrc, cvs-checkout, cvs-mode-checkout)
Richard M. Stallman <rms@gnu.org>
parents: 78239
diff changeset
970 (let ((modules (split-string-and-unquote (cvs-get-module)))
58158
0d53729c8f7a (cvs-mode-checkout): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57505
diff changeset
971 (flags (cvs-add-branch-prefix
0d53729c8f7a (cvs-mode-checkout): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57505
diff changeset
972 (cvs-flags-query 'cvs-checkout-flags "cvs checkout flags")))
0d53729c8f7a (cvs-mode-checkout): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57505
diff changeset
973 (cvs-cvsroot (cvs-get-cvsroot)))
0d53729c8f7a (cvs-mode-checkout): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57505
diff changeset
974 (cvs-checkout modules dir flags)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
975
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
976 ;;;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
977 ;;;; The code for running a "cvs update" and friends in various ways.
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
978 ;;;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
979
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
980 (defun-cvs-mode (cvs-mode-revert-buffer . SIMPLE)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
981 (&optional ignore-auto noconfirm)
35623
d88382df7b52 (cvs-mode-revert-buffer): Doc fix.
Dave Love <fx@gnu.org>
parents: 34653
diff changeset
982 "Rerun `cvs-examine' on the current directory with the default flags."
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
983 (interactive)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
984 (cvs-examine default-directory t))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
985
78654
e3a7c52130ec (cvs-query-directory): Only prompt when prefix is given.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 78639
diff changeset
986 (defun cvs-query-directory (prompt)
e3a7c52130ec (cvs-query-directory): Only prompt when prefix is given.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 78639
diff changeset
987 "Read directory name, prompting with PROMPT.
e3a7c52130ec (cvs-query-directory): Only prompt when prefix is given.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 78639
diff changeset
988 If in a *cvs* buffer, don't prompt unless a prefix argument is given."
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
989 (if (and (cvs-buffer-p)
78654
e3a7c52130ec (cvs-query-directory): Only prompt when prefix is given.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 78639
diff changeset
990 (not current-prefix-arg))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
991 default-directory
78654
e3a7c52130ec (cvs-query-directory): Only prompt when prefix is given.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 78639
diff changeset
992 (read-directory-name prompt nil default-directory nil)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
993
29577
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
994 ;;;###autoload
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
995 (defun cvs-quickdir (dir &optional flags noshow)
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
996 "Open a *cvs* buffer on DIR without running cvs.
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
997 With a prefix argument, prompt for a directory to use.
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
998 A prefix arg >8 (ex: \\[universal-argument] \\[universal-argument]),
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
999 prevents reuse of an existing *cvs* buffer.
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1000 Optional argument NOSHOW if non-nil means not to display the buffer.
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1001 FLAGS is ignored."
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1002 (interactive (list (cvs-query-directory "CVS quickdir (directory): ")))
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1003 ;; FIXME: code duplication with cvs-cmd-do and cvs-parse-process
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1004 (let* ((dir (file-name-as-directory
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1005 (abbreviate-file-name (expand-file-name dir))))
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1006 (new (> (prefix-numeric-value current-prefix-arg) 8))
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1007 (cvsbuf (cvs-make-cvs-buffer dir new))
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1008 last)
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1009 ;; Check that dir is under CVS control.
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1010 (unless (file-directory-p dir)
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1011 (error "%s is not a directory" dir))
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1012 (unless (file-directory-p (expand-file-name "CVS" dir))
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1013 (error "%s does not contain CVS controlled files" dir))
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1014 (set-buffer cvsbuf)
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1015 (dolist (fi (cvs-fileinfo-from-entries ""))
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1016 (setq last (cvs-addto-collection cvs-cookies fi last)))
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1017 (cvs-cleanup-collection cvs-cookies
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1018 (eq cvs-auto-remove-handled t)
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1019 cvs-auto-remove-directories
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1020 nil)
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1021 (if noshow cvsbuf
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1022 (let ((pop-up-windows nil)) (pop-to-buffer cvsbuf)))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1023
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1024 ;;;###autoload
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1025 (defun cvs-examine (directory flags &optional noshow)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1026 "Run a `cvs -n update' in the specified DIRECTORY.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1027 That is, check what needs to be done, but don't change the disc.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1028 Feed the output to a *cvs* buffer and run `cvs-mode' on it.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1029 With a prefix argument, prompt for a directory and cvs FLAGS to use.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1030 A prefix arg >8 (ex: \\[universal-argument] \\[universal-argument]),
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1031 prevents reuse of an existing *cvs* buffer.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1032 Optional argument NOSHOW if non-nil means not to display the buffer."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1033 (interactive (list (cvs-query-directory "CVS Examine (directory): ")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1034 (cvs-flags-query 'cvs-update-flags "cvs -n update flags")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1035 (when (eq flags t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1036 (setf flags (cvs-flags-query 'cvs-update-flags nil 'noquery)))
50651
7b04c2825a38 (cvs-examine): Respect `find-file-visit-truename'.
Sam Steingold <sds@gnu.org>
parents: 50202
diff changeset
1037 (when find-file-visit-truename (setq directory (file-truename directory)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1038 (cvs-cmd-do "update" directory flags nil
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1039 (> (prefix-numeric-value current-prefix-arg) 8)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1040 :cvsargs '("-n")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1041 :noshow noshow
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1042 :dont-change-disc t))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1043
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1044
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1045 ;;;###autoload
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1046 (defun cvs-update (directory flags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1047 "Run a `cvs update' in the current working DIRECTORY.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1048 Feed the output to a *cvs* buffer and run `cvs-mode' on it.
47729
8dcdf2a8c1f8 (cvs-mode-find-file): Look up font-lock-face so it also
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47470
diff changeset
1049 With a \\[universal-argument] prefix argument, prompt for a directory to use.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1050 A prefix arg >8 (ex: \\[universal-argument] \\[universal-argument]),
47729
8dcdf2a8c1f8 (cvs-mode-find-file): Look up font-lock-face so it also
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47470
diff changeset
1051 prevents reuse of an existing *cvs* buffer.
8dcdf2a8c1f8 (cvs-mode-find-file): Look up font-lock-face so it also
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47470
diff changeset
1052 The prefix is also passed to `cvs-flags-query' to select the FLAGS
8dcdf2a8c1f8 (cvs-mode-find-file): Look up font-lock-face so it also
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47470
diff changeset
1053 passed to cvs."
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1054 (interactive (list (cvs-query-directory "CVS Update (directory): ")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1055 (cvs-flags-query 'cvs-update-flags "cvs update flags")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1056 (when (eq flags t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1057 (setf flags (cvs-flags-query 'cvs-update-flags nil 'noquery)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1058 (cvs-cmd-do "update" directory flags nil
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1059 (> (prefix-numeric-value current-prefix-arg) 8)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1060
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1061
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1062 ;;;###autoload
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1063 (defun cvs-status (directory flags &optional noshow)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1064 "Run a `cvs status' in the current working DIRECTORY.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1065 Feed the output to a *cvs* buffer and run `cvs-mode' on it.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1066 With a prefix argument, prompt for a directory and cvs FLAGS to use.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1067 A prefix arg >8 (ex: \\[universal-argument] \\[universal-argument]),
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1068 prevents reuse of an existing *cvs* buffer.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1069 Optional argument NOSHOW if non-nil means not to display the buffer."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1070 (interactive (list (cvs-query-directory "CVS Status (directory): ")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1071 (cvs-flags-query 'cvs-status-flags "cvs status flags")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1072 (when (eq flags t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1073 (setf flags (cvs-flags-query 'cvs-status-flags nil 'noquery)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1074 (cvs-cmd-do "status" directory flags nil
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1075 (> (prefix-numeric-value current-prefix-arg) 8)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1076 :noshow noshow :dont-change-disc t))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1077
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1078 (defun cvs-update-filter (proc string)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1079 "Filter function for pcl-cvs.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1080 This function gets the output that CVS sends to stdout. It inserts
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1081 the STRING into (process-buffer PROC) but it also checks if CVS is waiting
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1082 for a lock file. If so, it inserts a message cookie in the *cvs* buffer."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1083 (save-match-data
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1084 (with-current-buffer (process-buffer proc)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1085 (let ((inhibit-read-only t))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1086 (save-excursion
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1087 ;; Insert the text, moving the process-marker.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1088 (goto-char (process-mark proc))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1089 (insert string)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1090 (set-marker (process-mark proc) (point))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1091 ;; FIXME: Delete any old lock message
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1092 ;;(if (tin-nth cookies 1)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1093 ;; (tin-delete cookies
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1094 ;; (tin-nth cookies 1)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1095 ;; Check if CVS is waiting for a lock.
33234
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1096 (beginning-of-line 0) ;Move to beginning of last complete line.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1097 (when (looking-at "^[ a-z]+: \\(.*waiting for .*lock in \\(.*\\)\\)$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1098 (let ((msg (match-string 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1099 (lock (match-string 2)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1100 (with-current-buffer cvs-buffer
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1101 (set (make-local-variable 'cvs-lock-file) lock)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1102 ;; display the lock situation in the *cvs* buffer:
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1103 (ewoc-enter-last
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1104 cvs-cookies
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1105 (cvs-create-fileinfo
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1106 'MESSAGE "" " "
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1107 (concat msg
37339
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1108 (when (file-exists-p lock)
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1109 (substitute-command-keys
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1110 "\n\t(type \\[cvs-mode-delete-lock] to delete it)")))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1111 :subtype 'TEMP))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1112 (pop-to-buffer (current-buffer))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1113 (goto-char (point-max))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1114 (beep)))))))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1115
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1116
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1117 ;;;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1118 ;;;; The cvs-mode and its associated commands.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1119 ;;;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1120
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1121 (cvs-prefix-define cvs-force-command "" "" '("/F") cvs-qtypedesc-string1)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1122 (defun-cvs-mode cvs-mode-force-command (arg)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1123 "Force the next cvs command to operate on all the selected files.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1124 By default, cvs commands only operate on files on which the command
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1125 \"makes sense\". This overrides the safety feature on the next cvs command.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1126 It actually behaves as a toggle. If prefixed by \\[universal-argument] \\[universal-argument],
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1127 the override will persist until the next toggle."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1128 (interactive "P")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1129 (cvs-prefix-set 'cvs-force-command arg))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1130
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1131 (put 'cvs-mode 'mode-class 'special)
50965
c1e6923f4f9b (cvs-make-cvs-buffer): Add the tag info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50958
diff changeset
1132 (define-derived-mode cvs-mode nil "CVS"
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1133 "Mode used for PCL-CVS, a frontend to CVS.
28256
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
1134 Full documentation is in the Texinfo file."
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1135 (setq mode-line-process
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1136 '("" cvs-force-command cvs-ignore-marks-modif
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1137 ":" (cvs-branch-prefix
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1138 ("" cvs-branch-prefix (cvs-secondary-branch-prefix
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1139 ("->" cvs-secondary-branch-prefix))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1140 " " cvs-mode-line-process))
50965
c1e6923f4f9b (cvs-make-cvs-buffer): Add the tag info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50958
diff changeset
1141 (if buffer-file-name
63421
8d79f84e54e8 (cvs-mode): Follow error conventions.
Juanma Barranquero <lekktu@gmail.com>
parents: 63210
diff changeset
1142 (error "Use M-x cvs-quickdir to get a *cvs* buffer"))
47211
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1143 (buffer-disable-undo)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1144 ;;(set (make-local-variable 'goal-column) cvs-cursor-column)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1145 (set (make-local-variable 'revert-buffer-function) 'cvs-mode-revert-buffer)
28256
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
1146 (setq truncate-lines t)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1147 (cvs-prefix-make-local 'cvs-branch-prefix)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1148 (cvs-prefix-make-local 'cvs-secondary-branch-prefix)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1149 (cvs-prefix-make-local 'cvs-force-command)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1150 (cvs-prefix-make-local 'cvs-ignore-marks-modif)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1151 (make-local-variable 'cvs-mode-line-process)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1152 (make-local-variable 'cvs-temp-buffers))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1153
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1154
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1155 (defun cvs-buffer-p (&optional buffer)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1156 "Return whether the (by default current) BUFFER is a `cvs-mode' buffer."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1157 (save-excursion
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1158 (if buffer (set-buffer buffer))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1159 (and (eq major-mode 'cvs-mode))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1160
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1161 (defun cvs-buffer-check ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1162 "Check that the current buffer follows cvs-buffer's conventions."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1163 (let ((buf (current-buffer))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1164 (check 'none))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1165 (or (and (setq check 'collection)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1166 (eq (ewoc-buffer cvs-cookies) buf)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1167 (setq check 'cvs-temp-buffer)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1168 (or (null cvs-temp-buffer)
61205
7178fdb70eff (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60602
diff changeset
1169 (null (buffer-live-p cvs-temp-buffer))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1170 (and (eq (with-current-buffer cvs-temp-buffer cvs-buffer) buf)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1171 (equal (with-current-buffer cvs-temp-buffer
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1172 default-directory)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1173 default-directory)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1174 t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1175 (error "Inconsistent %s in buffer %s" check (buffer-name buf)))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1176
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1177
34376
25976c39c41e * pcvs.el (cvs-menu): Use `cvs-menu' rather than `cvs-menu-map'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34304
diff changeset
1178 (defun cvs-mode-quit ()
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1179 "Quit PCL-CVS, killing the *cvs* buffer."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1180 (interactive)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1181 (and (y-or-n-p "Quit pcl-cvs? ") (kill-buffer (current-buffer))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1182
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1183 ;; Give help....
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1184
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1185 (defun cvs-help ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1186 "Display help for various PCL-CVS commands."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1187 (interactive)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1188 (if (eq last-command 'cvs-help)
34408
0f95f2e53b1f Update references to CVS-Edit (now Log-Edit).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34376
diff changeset
1189 (describe-function 'cvs-mode) ; would need minor-mode for log-edit-mode
65582
4d1085b02d64 Message format spec fixes (1)
Deepak Goel <deego@gnufans.org>
parents: 64762
diff changeset
1190 (message "%s"
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1191 (substitute-command-keys
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1192 "`\\[cvs-help]':help `\\[cvs-mode-add]':add `\\[cvs-mode-commit]':commit \
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1193 `\\[cvs-mode-diff-map]':diff* `\\[cvs-mode-log]':log \
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1194 `\\[cvs-mode-remove]':remove `\\[cvs-mode-status]':status \
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1195 `\\[cvs-mode-undo]':undo"))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1196
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1197 ;; Move around in the buffer
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1198
46002
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
1199 (defun cvs-move-to-goal-column ()
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
1200 (let* ((eol (line-end-position))
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
1201 (fpos (next-single-property-change (point) 'cvs-goal-column nil eol)))
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
1202 (when (< fpos eol)
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
1203 (goto-char fpos))))
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
1204
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1205 (defun-cvs-mode cvs-mode-previous-line (arg)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1206 "Go to the previous line.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1207 If a prefix argument is given, move by that many lines."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1208 (interactive "p")
44384
3626a12fe452 * pcvs.el (cvs-mode-previous-line, cvs-mode-next-line): Move to
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42966
diff changeset
1209 (ewoc-goto-prev cvs-cookies arg)
46002
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
1210 (cvs-move-to-goal-column))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1211
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1212 (defun-cvs-mode cvs-mode-next-line (arg)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1213 "Go to the next line.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1214 If a prefix argument is given, move by that many lines."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1215 (interactive "p")
44384
3626a12fe452 * pcvs.el (cvs-mode-previous-line, cvs-mode-next-line): Move to
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42966
diff changeset
1216 (ewoc-goto-next cvs-cookies arg)
46002
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
1217 (cvs-move-to-goal-column))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1218
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
1219 ;;;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1220 ;;;; Mark handling
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
1221 ;;;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1222
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1223 (defun-cvs-mode cvs-mode-mark (&optional arg)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1224 "Mark the fileinfo on the current line.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1225 If the fileinfo is a directory, all the contents of that directory are
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1226 marked instead. A directory can never be marked."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1227 (interactive)
30879
3a1ff1caafe2 * emacs-lisp/ewoc.el (ewoc-locate): Default POS to (point).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30717
diff changeset
1228 (let* ((tin (ewoc-locate cvs-cookies))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1229 (fi (ewoc-data tin)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1230 (if (eq (cvs-fileinfo->type fi) 'DIRCHANGE)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1231 ;; it's a directory: let's mark all files inside
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1232 (ewoc-map
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1233 (lambda (f dir)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1234 (when (cvs-dir-member-p f dir)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1235 (setf (cvs-fileinfo->marked f)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1236 (not (if (eq arg 'toggle) (cvs-fileinfo->marked f) arg)))
33234
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1237 t)) ;Tell cookie to redisplay this cookie.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1238 cvs-cookies
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1239 (cvs-fileinfo->dir fi))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1240 ;; not a directory: just do the obvious
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1241 (setf (cvs-fileinfo->marked fi)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1242 (not (if (eq arg 'toggle) (cvs-fileinfo->marked fi) arg)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1243 (ewoc-invalidate cvs-cookies tin)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1244 (cvs-mode-next-line 1))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1245
54870
3b1741ff0676 (cvs-mode-toggle-mark): Rename from cvs-mouse-toggle-mark.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54619
diff changeset
1246 (defalias 'cvs-mouse-toggle-mark 'cvs-mode-toggle-mark)
3b1741ff0676 (cvs-mode-toggle-mark): Rename from cvs-mouse-toggle-mark.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54619
diff changeset
1247 (defun cvs-mode-toggle-mark (e)
3b1741ff0676 (cvs-mode-toggle-mark): Rename from cvs-mouse-toggle-mark.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54619
diff changeset
1248 "Toggle the mark of the entry at point."
3b1741ff0676 (cvs-mode-toggle-mark): Rename from cvs-mouse-toggle-mark.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54619
diff changeset
1249 (interactive (list last-input-event))
30879
3a1ff1caafe2 * emacs-lisp/ewoc.el (ewoc-locate): Default POS to (point).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30717
diff changeset
1250 (save-excursion
54870
3b1741ff0676 (cvs-mode-toggle-mark): Rename from cvs-mouse-toggle-mark.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54619
diff changeset
1251 (posn-set-point (event-end e))
30879
3a1ff1caafe2 * emacs-lisp/ewoc.el (ewoc-locate): Default POS to (point).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30717
diff changeset
1252 (cvs-mode-mark 'toggle)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1253
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1254 (defun-cvs-mode cvs-mode-unmark ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1255 "Unmark the fileinfo on the current line."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1256 (interactive)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1257 (cvs-mode-mark t))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1258
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1259 (defun-cvs-mode cvs-mode-mark-all-files ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1260 "Mark all files."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1261 (interactive)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1262 (ewoc-map (lambda (cookie)
33234
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1263 (unless (eq (cvs-fileinfo->type cookie) 'DIRCHANGE)
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1264 (setf (cvs-fileinfo->marked cookie) t)))
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1265 cvs-cookies))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1266
37339
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1267 (defun-cvs-mode (cvs-mode-mark-on-state . SIMPLE) (state)
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1268 "Mark all files in state STATE."
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1269 (interactive
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1270 (list
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1271 (let ((default
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1272 (condition-case nil
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1273 (downcase
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1274 (symbol-name
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1275 (cvs-fileinfo->type
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1276 (cvs-mode-marked nil nil :read-only t :one t :noquery t))))
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1277 (error nil))))
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1278 (intern
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1279 (upcase
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1280 (completing-read
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1281 (concat
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1282 "Mark files in state" (if default (concat " [" default "]")) ": ")
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1283 (mapcar (lambda (x)
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1284 (list (downcase (symbol-name (car x)))))
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1285 cvs-states)
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1286 nil t nil nil default))))))
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1287 (ewoc-map (lambda (fi)
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1288 (when (eq (cvs-fileinfo->type fi) state)
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1289 (setf (cvs-fileinfo->marked fi) t)))
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1290 cvs-cookies))
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1291
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1292 (defun-cvs-mode cvs-mode-mark-matching-files (regex)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1293 "Mark all files matching REGEX."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1294 (interactive "sMark files matching: ")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1295 (ewoc-map (lambda (cookie)
33234
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1296 (when (and (not (eq (cvs-fileinfo->type cookie) 'DIRCHANGE))
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1297 (string-match regex (cvs-fileinfo->file cookie)))
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1298 (setf (cvs-fileinfo->marked cookie) t)))
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1299 cvs-cookies))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1300
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1301 (defun-cvs-mode cvs-mode-unmark-all-files ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1302 "Unmark all files.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1303 Directories are also unmarked, but that doesn't matter, since
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1304 they should always be unmarked."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1305 (interactive)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1306 (ewoc-map (lambda (cookie)
33234
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1307 (setf (cvs-fileinfo->marked cookie) nil)
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1308 t)
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1309 cvs-cookies))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1310
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1311 (defun-cvs-mode cvs-mode-unmark-up ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1312 "Unmark the file on the previous line."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1313 (interactive)
30879
3a1ff1caafe2 * emacs-lisp/ewoc.el (ewoc-locate): Default POS to (point).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30717
diff changeset
1314 (let ((tin (ewoc-goto-prev cvs-cookies 1)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1315 (when tin
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1316 (setf (cvs-fileinfo->marked (ewoc-data tin)) nil)
52669
2db8fbd2339c (cvs-mode-unmark-up): Move to goal column when done.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52552
diff changeset
1317 (ewoc-invalidate cvs-cookies tin)))
2db8fbd2339c (cvs-mode-unmark-up): Move to goal column when done.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52552
diff changeset
1318 (cvs-move-to-goal-column))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1319
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1320 (defconst cvs-ignore-marks-alternatives
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1321 '(("toggle-marks" . "/TM")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1322 ("force-marks" . "/FM")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1323 ("ignore-marks" . "/IM")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1324
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1325 (cvs-prefix-define cvs-ignore-marks-modif
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1326 "Prefix to decide whether to ignore marks or not."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1327 "active"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1328 (mapcar 'cdr cvs-ignore-marks-alternatives)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1329 (cvs-qtypedesc-create
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1330 (lambda (str) (cdr (assoc str cvs-ignore-marks-alternatives)))
36615
c3af189df631 (cvs-ignore-marks-modif): Use `rassoc' rather than `member*'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35707
diff changeset
1331 (lambda (obj) (car (rassoc obj cvs-ignore-marks-alternatives)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1332 (lambda () cvs-ignore-marks-alternatives)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1333 nil t))
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
1334
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1335 (defun-cvs-mode cvs-mode-toggle-marks (arg)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1336 "Toggle whether the next CVS command uses marks.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1337 See `cvs-prefix-set' for further description of the behavior.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1338 \\[universal-argument] 1 selects `force-marks',
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1339 \\[universal-argument] 2 selects `ignore-marks',
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1340 \\[universal-argument] 3 selects `toggle-marks'."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1341 (interactive "P")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1342 (cvs-prefix-set 'cvs-ignore-marks-modif arg))
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
1343
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1344 (defun cvs-ignore-marks-p (cmd &optional read-only)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1345 (let ((default (if (member cmd cvs-invert-ignore-marks)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1346 (not cvs-default-ignore-marks)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1347 cvs-default-ignore-marks))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1348 (modif (cvs-prefix-get 'cvs-ignore-marks-modif read-only)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1349 (cond
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1350 ((equal modif "/IM") t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1351 ((equal modif "/TM") (not default))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1352 ((equal modif "/FM") nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1353 (t default))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1354
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1355 (defun cvs-mode-mark-get-modif (cmd)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1356 (if (cvs-ignore-marks-p cmd 'read-only) "/IM" "/FM"))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1357
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1358 (defun cvs-get-marked (&optional ignore-marks ignore-contents)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1359 "Return a list of all selected fileinfos.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1360 If there are any marked tins, and IGNORE-MARKS is nil, return them.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1361 Otherwise, if the cursor selects a directory, and IGNORE-CONTENTS is
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1362 nil, return all files in it, else return just the directory.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1363 Otherwise return (a list containing) the file the cursor points to, or
55458
f673d8bf105a (cvs-mode-run, cvs-is-within-p): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 54870
diff changeset
1364 an empty list if it doesn't point to a file at all."
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1365 (let ((fis nil))
30717
e6e5480e5b25 (cvs-menu): Don't move point. Use popup-menu.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30618
diff changeset
1366 (dolist (fi (if (and (boundp 'cvs-minor-current-files)
e6e5480e5b25 (cvs-menu): Don't move point. Use popup-menu.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30618
diff changeset
1367 (consp cvs-minor-current-files))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1368 (mapcar
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1369 (lambda (f)
30717
e6e5480e5b25 (cvs-menu): Don't move point. Use popup-menu.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30618
diff changeset
1370 (if (cvs-fileinfo-p f) f
e6e5480e5b25 (cvs-menu): Don't move point. Use popup-menu.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30618
diff changeset
1371 (let ((f (file-relative-name f)))
e6e5480e5b25 (cvs-menu): Don't move point. Use popup-menu.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30618
diff changeset
1372 (if (file-directory-p f)
e6e5480e5b25 (cvs-menu): Don't move point. Use popup-menu.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30618
diff changeset
1373 (cvs-create-fileinfo
e6e5480e5b25 (cvs-menu): Don't move point. Use popup-menu.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30618
diff changeset
1374 'DIRCHANGE (file-name-as-directory f) "." "")
e6e5480e5b25 (cvs-menu): Don't move point. Use popup-menu.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30618
diff changeset
1375 (let ((dir (file-name-directory f))
e6e5480e5b25 (cvs-menu): Don't move point. Use popup-menu.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30618
diff changeset
1376 (file (file-name-nondirectory f)))
e6e5480e5b25 (cvs-menu): Don't move point. Use popup-menu.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30618
diff changeset
1377 (cvs-create-fileinfo
e6e5480e5b25 (cvs-menu): Don't move point. Use popup-menu.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30618
diff changeset
1378 'UNKNOWN (or dir "") file ""))))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1379 cvs-minor-current-files)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1380 (or (and (not ignore-marks)
33234
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1381 (ewoc-collect cvs-cookies 'cvs-fileinfo->marked))
30879
3a1ff1caafe2 * emacs-lisp/ewoc.el (ewoc-locate): Default POS to (point).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30717
diff changeset
1382 (list (ewoc-data (ewoc-locate cvs-cookies))))))
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
1383
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1384 (if (or ignore-contents (not (eq (cvs-fileinfo->type fi) 'DIRCHANGE)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1385 (push fi fis)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1386 ;; If a directory is selected, return members, if any.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1387 (setq fis
34412
da1ec51d3da7 (cvs-mode-marked): Set up the default for CMD manually.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34408
diff changeset
1388 (append (ewoc-collect
da1ec51d3da7 (cvs-mode-marked): Set up the default for CMD manually.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34408
diff changeset
1389 cvs-cookies 'cvs-dir-member-p (cvs-fileinfo->dir fi))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1390 fis))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1391 (nreverse fis)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1392
34412
da1ec51d3da7 (cvs-mode-marked): Set up the default for CMD manually.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34408
diff changeset
1393 (defun* cvs-mode-marked (filter &optional cmd
33234
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1394 &key read-only one file noquery)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1395 "Get the list of marked FIS.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1396 CMD is used to determine whether to use the marks or not.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1397 Only files for which FILTER is applicable are returned.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1398 If READ-ONLY is non-nil, the current toggling is left intact.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1399 If ONE is non-nil, marks are ignored and a single FI is returned.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1400 If FILE is non-nil, directory entries won't be selected."
34412
da1ec51d3da7 (cvs-mode-marked): Set up the default for CMD manually.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34408
diff changeset
1401 (unless cmd (setq cmd (symbol-name filter)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1402 (let* ((fis (cvs-get-marked (or one (cvs-ignore-marks-p cmd read-only))
33234
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1403 (and (not file)
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1404 (cvs-applicable-p 'DIRCHANGE filter))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1405 (force (cvs-prefix-get 'cvs-force-command))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1406 (fis (car (cvs-partition
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1407 (lambda (fi) (cvs-applicable-p fi (and (not force) filter)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1408 fis))))
33234
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1409 (when (and (or (null fis) (and one (cdr fis))) (not noquery))
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1410 (message (if (null fis)
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1411 "`%s' is not applicable to any of the selected files."
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1412 "`%s' is only applicable to a single file.") cmd)
34412
da1ec51d3da7 (cvs-mode-marked): Set up the default for CMD manually.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34408
diff changeset
1413 (sit-for 1)
33234
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1414 (setq fis (list (cvs-insert-file
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1415 (read-file-name (format "File to %s: " cmd))))))
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1416 (if one (car fis) fis)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1417
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1418 (defun cvs-enabledp (filter)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1419 "Determine whether FILTER applies to at least one of the selected files."
33359
5ef2137ce754 (cvs-enabledp): Ignore errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33339
diff changeset
1420 (ignore-errors (cvs-mode-marked filter nil :read-only t :noquery t)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1421
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1422 (defun cvs-mode-files (&rest -cvs-mode-files-args)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1423 (cvs-mode!
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1424 (lambda ()
61867
59330b4d0e5b Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61245
diff changeset
1425 (mapcar 'cvs-fileinfo->full-name
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1426 (apply 'cvs-mode-marked -cvs-mode-files-args)))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1427
37339
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1428 ;;
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1429 ;; Interface between Log-Edit and PCL-CVS
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1430 ;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1431
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1432 (defun cvs-mode-commit-setup ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1433 "Run `cvs-mode-commit' with setup."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1434 (interactive)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1435 (cvs-mode-commit 'force))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1436
40479
2930fd135efa (cvs-mode-commit-hook): New hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39392
diff changeset
1437 (defcustom cvs-mode-commit-hook nil
2930fd135efa (cvs-mode-commit-hook): New hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39392
diff changeset
1438 "Hook run after setting up the commit buffer."
2930fd135efa (cvs-mode-commit-hook): New hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39392
diff changeset
1439 :type 'hook
48445
86325beb168c (cvs-minor-mode, cvs-mode-commit-hook): Add group.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 48285
diff changeset
1440 :options '(cvs-mode-diff)
86325beb168c (cvs-minor-mode, cvs-mode-commit-hook): Add group.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 48285
diff changeset
1441 :group 'pcl-cvs)
40479
2930fd135efa (cvs-mode-commit-hook): New hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39392
diff changeset
1442
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1443 (defun cvs-mode-commit (setup)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1444 "Check in all marked files, or the current file.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1445 The user will be asked for a log message in a buffer.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1446 The buffer's mode and name is determined by the \"message\" setting
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1447 of `cvs-buffer-name-alist'.
34408
0f95f2e53b1f Update references to CVS-Edit (now Log-Edit).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34376
diff changeset
1448 The POSTPROC specified there (typically `log-edit') is then called,
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1449 passing it the SETUP argument."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1450 (interactive "P")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1451 ;; It seems that the save-excursion that happens if I use the better
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1452 ;; form of `(cvs-mode! (lambda ...))' screws up a couple things which
34408
0f95f2e53b1f Update references to CVS-Edit (now Log-Edit).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34376
diff changeset
1453 ;; end up being rather annoying (like log-edit-mode's message being
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1454 ;; displayed in the wrong minibuffer).
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1455 (cvs-mode!)
34408
0f95f2e53b1f Update references to CVS-Edit (now Log-Edit).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34376
diff changeset
1456 (let ((buf (cvs-temp-buffer "message" 'normal 'nosetup))
30618
9dd1a6504bdd Use `nth' instead of `first', `second', and `third'.
Gerd Moellmann <gerd@gnu.org>
parents: 30612
diff changeset
1457 (setupfun (or (nth 2 (cdr (assoc "message" cvs-buffer-name-alist)))
34408
0f95f2e53b1f Update references to CVS-Edit (now Log-Edit).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34376
diff changeset
1458 'log-edit)))
105196
d991506f9286 * menu-bar.el (list-buffers-directory): Add docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 104916
diff changeset
1459 (funcall setupfun 'cvs-do-commit setup
86945
7e4a56acd6da (cvs-mode-commit, cvs-mode-edit-log): Also pass a diff
Dan Nicolaescu <dann@ics.uci.edu>
parents: 86246
diff changeset
1460 '((log-edit-listfun . cvs-commit-filelist)
7e4a56acd6da (cvs-mode-commit, cvs-mode-edit-log): Also pass a diff
Dan Nicolaescu <dann@ics.uci.edu>
parents: 86246
diff changeset
1461 (log-edit-diff-function . cvs-mode-diff)) buf)
34408
0f95f2e53b1f Update references to CVS-Edit (now Log-Edit).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34376
diff changeset
1462 (set (make-local-variable 'cvs-minor-wrap-function) 'cvs-commit-minor-wrap)
40479
2930fd135efa (cvs-mode-commit-hook): New hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39392
diff changeset
1463 (run-hooks 'cvs-mode-commit-hook)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1464
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1465 (defun cvs-commit-minor-wrap (buf f)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1466 (let ((cvs-ignore-marks-modif (cvs-mode-mark-get-modif "commit")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1467 (funcall f)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1468
33359
5ef2137ce754 (cvs-enabledp): Ignore errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33339
diff changeset
1469 (defun cvs-commit-filelist ()
5ef2137ce754 (cvs-enabledp): Ignore errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33339
diff changeset
1470 (cvs-mode-files 'commit nil :read-only t :file t :noquery t))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1471
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1472 (defun cvs-do-commit (flags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1473 "Do the actual commit, using the current buffer as the log message."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1474 (interactive (list (cvs-flags-query 'cvs-commit-flags "cvs commit flags")))
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
1475 (let ((msg (buffer-substring-no-properties (point-min) (point-max))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1476 (cvs-mode!)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1477 ;;(pop-to-buffer cvs-buffer)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1478 (cvs-mode-do "commit" (list* "-m" msg flags) 'commit)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1479
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1480
47211
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1481 ;;;; Editing existing commit log messages.
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1482
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1483 (defun cvs-edit-log-text-at-point ()
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1484 (save-excursion
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1485 (end-of-line)
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1486 (when (re-search-backward "^revision " nil t)
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1487 (forward-line 1)
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1488 (if (looking-at "date:") (forward-line 1))
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1489 (if (looking-at "branches:") (forward-line 1))
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1490 (buffer-substring
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1491 (point)
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1492 (if (re-search-forward
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1493 "^\\(-\\{28\\}\\|=\\{77\\}\\|revision [.0-9]+\\)$"
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1494 nil t)
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1495 (match-beginning 0)
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1496 (point))))))
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1497
50958
d20464e3d617 (cvs-minor-current-files): Move before first use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50956
diff changeset
1498 (defvar cvs-edit-log-revision)
66096
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1499 (defvar cvs-edit-log-files) (put 'cvs-edit-log-files 'permanent-local t)
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1500 (defun cvs-mode-edit-log (file rev &optional text)
47211
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1501 "Edit the log message at point.
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1502 This is best called from a `log-view-mode' buffer."
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1503 (interactive
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1504 (list
66096
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1505 (or (cvs-mode! (lambda ()
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1506 (car (cvs-mode-files nil nil
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1507 :read-only t :file t :noquery t))))
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1508 (read-string "File name: "))
47211
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1509 (or (cvs-mode! (lambda () (cvs-prefix-get 'cvs-branch-prefix)))
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1510 (read-string "Revision to edit: "))
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1511 (cvs-edit-log-text-at-point)))
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1512 ;; It seems that the save-excursion that happens if I use the better
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1513 ;; form of `(cvs-mode! (lambda ...))' screws up a couple things which
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1514 ;; end up being rather annoying (like log-edit-mode's message being
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1515 ;; displayed in the wrong minibuffer).
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1516 (cvs-mode!)
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1517 (let ((buf (cvs-temp-buffer "message" 'normal 'nosetup))
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1518 (setupfun (or (nth 2 (cdr (assoc "message" cvs-buffer-name-alist)))
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1519 'log-edit)))
66096
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1520 (with-current-buffer buf
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1521 ;; Set the filename before, so log-edit can correctly setup its
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1522 ;; log-edit-initial-files variable.
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1523 (set (make-local-variable 'cvs-edit-log-files) (list file)))
105196
d991506f9286 * menu-bar.el (list-buffers-directory): Add docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 104916
diff changeset
1524 (funcall setupfun 'cvs-do-edit-log nil
86945
7e4a56acd6da (cvs-mode-commit, cvs-mode-edit-log): Also pass a diff
Dan Nicolaescu <dann@ics.uci.edu>
parents: 86246
diff changeset
1525 '((log-edit-listfun . cvs-edit-log-filelist)
7e4a56acd6da (cvs-mode-commit, cvs-mode-edit-log): Also pass a diff
Dan Nicolaescu <dann@ics.uci.edu>
parents: 86246
diff changeset
1526 (log-edit-diff-function . cvs-mode-diff))
7e4a56acd6da (cvs-mode-commit, cvs-mode-edit-log): Also pass a diff
Dan Nicolaescu <dann@ics.uci.edu>
parents: 86246
diff changeset
1527 buf)
47211
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1528 (when text (erase-buffer) (insert text))
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1529 (set (make-local-variable 'cvs-edit-log-revision) rev)
66096
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1530 (set (make-local-variable 'cvs-minor-wrap-function)
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1531 'cvs-edit-log-minor-wrap)
47211
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1532 ;; (run-hooks 'cvs-mode-commit-hook)
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1533 ))
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1534
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1535 (defun cvs-edit-log-minor-wrap (buf f)
66096
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1536 (let ((cvs-branch-prefix (with-current-buffer buf cvs-edit-log-revision))
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1537 (cvs-minor-current-files
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1538 (with-current-buffer buf cvs-edit-log-files))
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1539 ;; FIXME: I need to force because the fileinfos are UNKNOWN
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1540 (cvs-force-command "/F"))
47211
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1541 (funcall f)))
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1542
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1543 (defun cvs-edit-log-filelist ()
66096
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1544 (if cvs-minor-wrap-function
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1545 (cvs-mode-files nil nil :read-only t :file t :noquery t)
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1546 cvs-edit-log-files))
47211
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1547
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1548 (defun cvs-do-edit-log (rev)
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1549 "Do the actual commit, using the current buffer as the log message."
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1550 (interactive (list cvs-edit-log-revision))
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1551 (let ((msg (buffer-substring-no-properties (point-min) (point-max))))
66096
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1552 (cvs-mode!
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1553 (lambda ()
59b6016b2dc3 (cvs-edit-log-files): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 65874
diff changeset
1554 (cvs-mode-do "admin" (list (concat "-m" rev ":" msg)) nil)))))
47211
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1555
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
1556
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
1557 ;;;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1558 ;;;; CVS Mode commands
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
1559 ;;;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1560
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1561 (defun-cvs-mode (cvs-mode-insert . NOARGS) (file)
45325
8b7e7b9551fe (cvs-cmd-do): Accept non-CVS dirs with CVS-ctrl'd subdirs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44384
diff changeset
1562 "Insert an entry for a specific file into the current listing.
8b7e7b9551fe (cvs-cmd-do): Accept non-CVS dirs with CVS-ctrl'd subdirs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44384
diff changeset
1563 This is typically used if the file is up-to-date (or has been added
8b7e7b9551fe (cvs-cmd-do): Accept non-CVS dirs with CVS-ctrl'd subdirs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44384
diff changeset
1564 outside of PCL-CVS) and one wants to do some operation on it."
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1565 (interactive
37339
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1566 (list (read-file-name
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1567 "File to insert: "
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1568 ;; Can't use ignore-errors here because interactive
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1569 ;; specs aren't byte-compiled.
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1570 (condition-case nil
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1571 (file-name-as-directory
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1572 (expand-file-name
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1573 (cvs-fileinfo->dir
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1574 (cvs-mode-marked nil nil :read-only t :one t :noquery t))))
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1575 (error nil)))))
33234
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1576 (cvs-insert-file file))
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1577
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1578 (defun cvs-insert-file (file)
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1579 "Insert FILE (and its contents if it's a dir) and return its FI."
29577
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1580 (let ((file (file-relative-name (directory-file-name file))) last)
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1581 (dolist (fi (cvs-fileinfo-from-entries file))
32488
1fd2c9a94ec3 * pcvs.el (cvs-make-cvs-buffer, cvs-run-process):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32309
diff changeset
1582 (setq last (cvs-addto-collection cvs-cookies fi last)))
1fd2c9a94ec3 * pcvs.el (cvs-make-cvs-buffer, cvs-run-process):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32309
diff changeset
1583 ;; There should have been at least one entry.
33234
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1584 (goto-char (ewoc-location last))
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1585 (ewoc-data last)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1586
35707
1285b34a630d (cvs-mark-fis-dead): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35623
diff changeset
1587 (defun cvs-mark-fis-dead (fis)
1285b34a630d (cvs-mark-fis-dead): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35623
diff changeset
1588 ;; Helper function, introduced because of the need for macro-expansion.
1285b34a630d (cvs-mark-fis-dead): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35623
diff changeset
1589 (dolist (fi fis)
1285b34a630d (cvs-mark-fis-dead): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35623
diff changeset
1590 (setf (cvs-fileinfo->type fi) 'DEAD)))
1285b34a630d (cvs-mark-fis-dead): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35623
diff changeset
1591
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1592 (defun-cvs-mode (cvs-mode-add . SIMPLE) (flags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1593 "Add marked files to the cvs repository.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1594 With prefix argument, prompt for cvs flags."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1595 (interactive (list (cvs-flags-query 'cvs-add-flags "cvs add flags")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1596 (let ((fis (cvs-mode-marked 'add))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1597 (needdesc nil) (dirs nil))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1598 ;; find directories and look for fis needing a description
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1599 (dolist (fi fis)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1600 (cond
61867
59330b4d0e5b Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61245
diff changeset
1601 ((file-directory-p (cvs-fileinfo->full-name fi)) (push fi dirs))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1602 ((eq (cvs-fileinfo->type fi) 'UNKNOWN) (setq needdesc t))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1603 ;; prompt for description if necessary
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1604 (let* ((msg (if (and needdesc
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1605 (or current-prefix-arg (not cvs-add-default-message)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1606 (read-from-minibuffer "Enter description: ")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1607 (or cvs-add-default-message "")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1608 (flags (list* "-m" msg flags))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1609 (postproc
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1610 ;; setup postprocessing for the directory entries
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1611 (when dirs
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1612 `((cvs-run-process (list "-n" "update")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1613 ',dirs
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1614 '(cvs-parse-process t))
35707
1285b34a630d (cvs-mark-fis-dead): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 35623
diff changeset
1615 (cvs-mark-fis-dead ',dirs)))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1616 (cvs-mode-run "add" flags fis :postproc postproc))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1617
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1618 (defun-cvs-mode (cvs-mode-diff . DOUBLE) (flags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1619 "Diff the selected files against the repository.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1620 This command compares the files in your working area against the
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1621 revision which they are based upon."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1622 (interactive
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1623 (list (cvs-add-branch-prefix
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1624 (cvs-add-secondary-branch-prefix
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1625 (cvs-flags-query 'cvs-diff-flags "cvs diff flags")))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1626 (cvs-mode-do "diff" flags 'diff
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1627 :show t)) ;; :ignore-exit t
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1628
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1629 (defun-cvs-mode (cvs-mode-diff-head . SIMPLE) (flags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1630 "Diff the selected files against the head of the current branch.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1631 See ``cvs-mode-diff'' for more info."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1632 (interactive (list (cvs-flags-query 'cvs-diff-flags "cvs diff flags")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1633 (cvs-mode-diff-1 (cons "-rHEAD" flags)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1634
56314
6a5f26b68c3c (cvs-mode-diff-repository): New command.
Juri Linkov <juri@jurta.org>
parents: 56011
diff changeset
1635 (defun-cvs-mode (cvs-mode-diff-repository . SIMPLE) (flags)
6a5f26b68c3c (cvs-mode-diff-repository): New command.
Juri Linkov <juri@jurta.org>
parents: 56011
diff changeset
1636 "Diff the files for changes in the repository since last co/update/commit.
6a5f26b68c3c (cvs-mode-diff-repository): New command.
Juri Linkov <juri@jurta.org>
parents: 56011
diff changeset
1637 See ``cvs-mode-diff'' for more info."
6a5f26b68c3c (cvs-mode-diff-repository): New command.
Juri Linkov <juri@jurta.org>
parents: 56011
diff changeset
1638 (interactive (list (cvs-flags-query 'cvs-diff-flags "cvs diff flags")))
6a5f26b68c3c (cvs-mode-diff-repository): New command.
Juri Linkov <juri@jurta.org>
parents: 56011
diff changeset
1639 (cvs-mode-diff-1 (cons "-rBASE" (cons "-rHEAD" flags))))
6a5f26b68c3c (cvs-mode-diff-repository): New command.
Juri Linkov <juri@jurta.org>
parents: 56011
diff changeset
1640
56011
bf2ee754eeed (cvs-mode-diff-yesterday): New command.
Kim F. Storm <storm@cua.dk>
parents: 55695
diff changeset
1641 (defun-cvs-mode (cvs-mode-diff-yesterday . SIMPLE) (flags)
bf2ee754eeed (cvs-mode-diff-yesterday): New command.
Kim F. Storm <storm@cua.dk>
parents: 55695
diff changeset
1642 "Diff the selected files against yesterday's head of the current branch.
bf2ee754eeed (cvs-mode-diff-yesterday): New command.
Kim F. Storm <storm@cua.dk>
parents: 55695
diff changeset
1643 See ``cvs-mode-diff'' for more info."
bf2ee754eeed (cvs-mode-diff-yesterday): New command.
Kim F. Storm <storm@cua.dk>
parents: 55695
diff changeset
1644 (interactive (list (cvs-flags-query 'cvs-diff-flags "cvs diff flags")))
bf2ee754eeed (cvs-mode-diff-yesterday): New command.
Kim F. Storm <storm@cua.dk>
parents: 55695
diff changeset
1645 (cvs-mode-diff-1 (cons "-Dyesterday" flags)))
bf2ee754eeed (cvs-mode-diff-yesterday): New command.
Kim F. Storm <storm@cua.dk>
parents: 55695
diff changeset
1646
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1647 (defun-cvs-mode (cvs-mode-diff-vendor . SIMPLE) (flags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1648 "Diff the selected files against the head of the vendor branch.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1649 See ``cvs-mode-diff'' for more info."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1650 (interactive (list (cvs-flags-query 'cvs-diff-flags "cvs diff flags")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1651 (cvs-mode-diff-1 (cons (concat "-r" cvs-vendor-branch) flags)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1652
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1653 ;; sadly, this is not provided by cvs, so we have to roll our own
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1654 (defun-cvs-mode (cvs-mode-diff-backup . SIMPLE) (flags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1655 "Diff the files against the backup file.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1656 This command can be used on files that are marked with \"Merged\"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1657 or \"Conflict\" in the *cvs* buffer."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1658 (interactive (list (cvs-flags-query 'cvs-diff-flags "diff flags")))
38422
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 37339
diff changeset
1659 (unless (listp flags) (error "flags should be a list of strings"))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1660 (save-some-buffers)
50958
d20464e3d617 (cvs-minor-current-files): Move before first use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50956
diff changeset
1661 (let* ((marked (cvs-get-marked (cvs-ignore-marks-p "diff")))
33359
5ef2137ce754 (cvs-enabledp): Ignore errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33339
diff changeset
1662 (fis (car (cvs-partition 'cvs-fileinfo->backup-file marked))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1663 (unless (consp fis)
33234
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1664 (error "No files with a backup file selected!"))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1665 ;; let's extract some info into the environment for `buffer-name'
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1666 (let* ((dir (cvs-fileinfo->dir (car fis)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1667 (file (cvs-fileinfo->file (car fis))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1668 (set-buffer (cvs-temp-buffer "diff")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1669 (message "cvs diff backup...")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1670 (cvs-execute-single-file-list fis 'cvs-diff-backup-extractor
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1671 cvs-diff-program flags))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1672 (message "cvs diff backup... Done."))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1673
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1674 (defun cvs-diff-backup-extractor (fileinfo)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1675 "Return the filename and the name of the backup file as a list.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1676 Signal an error if there is no backup file."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1677 (let ((backup-file (cvs-fileinfo->backup-file fileinfo)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1678 (unless backup-file
61867
59330b4d0e5b Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61245
diff changeset
1679 (error "%s has no backup file" (cvs-fileinfo->full-name fileinfo)))
59330b4d0e5b Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61245
diff changeset
1680 (list backup-file (cvs-fileinfo->full-name fileinfo))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1681
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1682 ;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1683 ;; Emerge support
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1684 ;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1685 (defun cvs-emerge-diff (b1 b2) (emerge-buffers b1 b2 b1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1686 (defun cvs-emerge-merge (b1 b2 base out)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1687 (emerge-buffers-with-ancestor b1 b2 base (find-file-noselect out)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1688
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1689 ;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1690 ;; Ediff support
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
1691 ;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1692
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1693 (defvar ediff-after-quit-destination-buffer)
50958
d20464e3d617 (cvs-minor-current-files): Move before first use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50956
diff changeset
1694 (defvar ediff-after-quit-hook-internal)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1695 (defvar cvs-transient-buffers)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1696 (defun cvs-ediff-startup-hook ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1697 (add-hook 'ediff-after-quit-hook-internal
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1698 `(lambda ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1699 (cvs-ediff-exit-hook
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1700 ',ediff-after-quit-destination-buffer ',cvs-transient-buffers))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1701 nil 'local))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1702
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1703 (defun cvs-ediff-exit-hook (cvs-buf tmp-bufs)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1704 ;; kill the temp buffers (and their associated windows)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1705 (dolist (tb tmp-bufs)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1706 (when (and tb (buffer-live-p tb) (not (buffer-modified-p tb)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1707 (let ((win (get-buffer-window tb t)))
31977
2f79c1ebd1fe (cvs-ediff-exit-hook): Kill buffer before window.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30879
diff changeset
1708 (kill-buffer tb)
32187
418444640a1e (cvs-ediff-exit-hook): Expect delete-window to fail.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31977
diff changeset
1709 (when (window-live-p win) (ignore-errors (delete-window win))))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1710 ;; switch back to the *cvs* buffer
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1711 (when (and cvs-buf (buffer-live-p cvs-buf)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1712 (not (get-buffer-window cvs-buf t)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1713 (ignore-errors (switch-to-buffer cvs-buf))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1714
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1715 (defun cvs-ediff-diff (b1 b2)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1716 (let ((ediff-after-quit-destination-buffer (current-buffer))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1717 (startup-hook '(cvs-ediff-startup-hook)))
31977
2f79c1ebd1fe (cvs-ediff-exit-hook): Kill buffer before window.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30879
diff changeset
1718 (ediff-buffers b1 b2 startup-hook 'ediff-revision)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1719
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1720 (defun cvs-ediff-merge (b1 b2 base out)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1721 (let ((ediff-after-quit-destination-buffer (current-buffer))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1722 (startup-hook '(cvs-ediff-startup-hook)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1723 (ediff-merge-buffers-with-ancestor
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1724 b1 b2 base startup-hook
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1725 'ediff-merge-revisions-with-ancestor
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1726 out)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1727
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1728 ;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1729 ;; Interactive merge/diff support.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1730 ;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1731
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1732 (defun cvs-retrieve-revision (fileinfo rev)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1733 "Retrieve the given REVision of the file in FILEINFO into a new buffer."
61867
59330b4d0e5b Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61245
diff changeset
1734 (let* ((file (cvs-fileinfo->full-name fileinfo))
32187
418444640a1e (cvs-ediff-exit-hook): Expect delete-window to fail.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31977
diff changeset
1735 (buffile (concat file "." rev)))
418444640a1e (cvs-ediff-exit-hook): Expect delete-window to fail.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31977
diff changeset
1736 (or (find-buffer-visiting buffile)
418444640a1e (cvs-ediff-exit-hook): Expect delete-window to fail.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31977
diff changeset
1737 (with-current-buffer (create-file-buffer buffile)
418444640a1e (cvs-ediff-exit-hook): Expect delete-window to fail.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31977
diff changeset
1738 (message "Retrieving revision %s..." rev)
50143
93622ce43bdd (cvs-mode!): Remove unused argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49688
diff changeset
1739 ;; Discard stderr output to work around the CVS+SSH+libc
93622ce43bdd (cvs-mode!): Remove unused argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49688
diff changeset
1740 ;; problem when stdout and stderr are the same.
71346
1405144e8610 (cvs-retrieve-revision): Use decode-coding-inserted-region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 71007
diff changeset
1741 (let ((res
1405144e8610 (cvs-retrieve-revision): Use decode-coding-inserted-region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 71007
diff changeset
1742 (let ((coding-system-for-read 'binary))
84571
44b45775d250 (cvs-tags-list, cvs-retrieve-revision, cvs-find-modif)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84380
diff changeset
1743 (apply 'process-file cvs-program nil '(t nil) nil
71346
1405144e8610 (cvs-retrieve-revision): Use decode-coding-inserted-region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 71007
diff changeset
1744 "-q" "update" "-p"
1405144e8610 (cvs-retrieve-revision): Use decode-coding-inserted-region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 71007
diff changeset
1745 ;; If `rev' is HEAD, don't pass it at all:
1405144e8610 (cvs-retrieve-revision): Use decode-coding-inserted-region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 71007
diff changeset
1746 ;; the default behavior is to get the head
1405144e8610 (cvs-retrieve-revision): Use decode-coding-inserted-region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 71007
diff changeset
1747 ;; of the current branch whereas "-r HEAD"
1405144e8610 (cvs-retrieve-revision): Use decode-coding-inserted-region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 71007
diff changeset
1748 ;; stupidly gives you the head of the trunk.
1405144e8610 (cvs-retrieve-revision): Use decode-coding-inserted-region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 71007
diff changeset
1749 (append (unless (equal rev "HEAD") (list "-r" rev))
1405144e8610 (cvs-retrieve-revision): Use decode-coding-inserted-region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 71007
diff changeset
1750 (list file))))))
32187
418444640a1e (cvs-ediff-exit-hook): Expect delete-window to fail.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31977
diff changeset
1751 (when (and res (not (and (equal 0 res))))
418444640a1e (cvs-ediff-exit-hook): Expect delete-window to fail.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31977
diff changeset
1752 (error "Something went wrong retrieving revision %s: %s" rev res))
71346
1405144e8610 (cvs-retrieve-revision): Use decode-coding-inserted-region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 71007
diff changeset
1753 ;; Figure out the encoding used and decode the byte-sequence
1405144e8610 (cvs-retrieve-revision): Use decode-coding-inserted-region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 71007
diff changeset
1754 ;; into a sequence of chars.
1405144e8610 (cvs-retrieve-revision): Use decode-coding-inserted-region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 71007
diff changeset
1755 (decode-coding-inserted-region
1405144e8610 (cvs-retrieve-revision): Use decode-coding-inserted-region.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 71007
diff changeset
1756 (point-min) (point-max) file t nil nil t)
74028
82fde7e4c23b (cvs-retrieve-revision): Set buffer-file-coding-system.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73207
diff changeset
1757 ;; Set buffer-file-coding-system.
82fde7e4c23b (cvs-retrieve-revision): Set buffer-file-coding-system.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73207
diff changeset
1758 (after-insert-file-set-coding (buffer-size) t)
32187
418444640a1e (cvs-ediff-exit-hook): Expect delete-window to fail.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31977
diff changeset
1759 (set-buffer-modified-p nil)
418444640a1e (cvs-ediff-exit-hook): Expect delete-window to fail.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31977
diff changeset
1760 (let ((buffer-file-name (expand-file-name file)))
418444640a1e (cvs-ediff-exit-hook): Expect delete-window to fail.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31977
diff changeset
1761 (after-find-file))
418444640a1e (cvs-ediff-exit-hook): Expect delete-window to fail.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31977
diff changeset
1762 (toggle-read-only 1)
418444640a1e (cvs-ediff-exit-hook): Expect delete-window to fail.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31977
diff changeset
1763 (message "Retrieving revision %s... Done" rev)
418444640a1e (cvs-ediff-exit-hook): Expect delete-window to fail.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31977
diff changeset
1764 (current-buffer))))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1765
29577
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1766 ;; FIXME: The user should be able to specify ancestor/head/backup and we should
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1767 ;; provide sensible defaults when merge info is unavailable (rather than rely
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1768 ;; on smerge-ediff). Also provide sane defaults for need-merge files.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1769 (defun-cvs-mode cvs-mode-imerge ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1770 "Merge interactively appropriate revisions of the selected file."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1771 (interactive)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1772 (let ((fi (cvs-mode-marked 'merge nil :one t :file t)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1773 (let ((merge (cvs-fileinfo->merge fi))
61867
59330b4d0e5b Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61245
diff changeset
1774 (file (cvs-fileinfo->full-name fi))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1775 (backup-file (cvs-fileinfo->backup-file fi)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1776 (if (not (and merge backup-file))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1777 (let ((buf (find-file-noselect file)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1778 (message "Missing merge info or backup file, using VC.")
29577
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1779 (with-current-buffer buf
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
1780 (smerge-ediff)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1781 (let* ((ancestor-buf (cvs-retrieve-revision fi (car merge)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1782 (head-buf (cvs-retrieve-revision fi (cdr merge)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1783 (backup-buf (let ((auto-mode-alist nil))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1784 (find-file-noselect backup-file)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1785 ;; this binding is used by cvs-ediff-startup-hook
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1786 (cvs-transient-buffers (list ancestor-buf backup-buf head-buf)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1787 (with-current-buffer backup-buf
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1788 (let ((buffer-file-name (expand-file-name file)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1789 (after-find-file)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1790 (funcall (cdr cvs-idiff-imerge-handlers)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1791 backup-buf head-buf ancestor-buf file))))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1792
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1793 (cvs-flags-define cvs-idiff-version
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1794 (list "BASE" cvs-vendor-branch cvs-vendor-branch "BASE" "BASE")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1795 "version: " cvs-qtypedesc-tag)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1796
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1797 (defun-cvs-mode (cvs-mode-idiff . NOARGS) (&optional rev1 rev2)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1798 "Diff interactively current file to revisions."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1799 (interactive
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1800 (let* ((rev1 (cvs-prefix-get 'cvs-branch-prefix))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1801 (rev2 (and rev1 (cvs-prefix-get 'cvs-secondary-branch-prefix))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1802 (list (or rev1 (cvs-flags-query 'cvs-idiff-version))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1803 rev2)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1804 (let ((fi (cvs-mode-marked 'diff "idiff" :one t :file t)))
61867
59330b4d0e5b Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61245
diff changeset
1805 (let* ((file (cvs-fileinfo->full-name fi))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1806 (rev1-buf (cvs-retrieve-revision fi (or rev1 "BASE")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1807 (rev2-buf (if rev2 (cvs-retrieve-revision fi rev2)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1808 ;; this binding is used by cvs-ediff-startup-hook
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1809 (cvs-transient-buffers (list rev1-buf rev2-buf)))
33234
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1810 (funcall (car cvs-idiff-imerge-handlers)
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1811 rev1-buf (or rev2-buf (find-file-noselect file))))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1812
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1813 (defun-cvs-mode (cvs-mode-idiff-other . NOARGS) ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1814 "Diff interactively current file to revisions."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1815 (interactive)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1816 (let* ((rev1 (cvs-prefix-get 'cvs-branch-prefix))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1817 (rev2 (and rev1 (cvs-prefix-get 'cvs-secondary-branch-prefix)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1818 (fis (cvs-mode-marked 'diff "idiff" :file t)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1819 (when (> (length fis) 2)
38422
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 37339
diff changeset
1820 (error "idiff-other cannot be applied to more than 2 files at a time"))
30879
3a1ff1caafe2 * emacs-lisp/ewoc.el (ewoc-locate): Default POS to (point).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30717
diff changeset
1821 (let* ((fi1 (car fis))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1822 (rev1-buf (if rev1 (cvs-retrieve-revision fi1 rev1)
61867
59330b4d0e5b Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61245
diff changeset
1823 (find-file-noselect (cvs-fileinfo->full-name fi1))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1824 rev2-buf)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1825 (if (cdr fis)
30618
9dd1a6504bdd Use `nth' instead of `first', `second', and `third'.
Gerd Moellmann <gerd@gnu.org>
parents: 30612
diff changeset
1826 (let ((fi2 (nth 1 fis)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1827 (setq rev2-buf
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1828 (if rev2 (cvs-retrieve-revision fi2 rev2)
61867
59330b4d0e5b Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61245
diff changeset
1829 (find-file-noselect (cvs-fileinfo->full-name fi2)))))
38422
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 37339
diff changeset
1830 (error "idiff-other doesn't know what other file/buffer to use"))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1831 (let* (;; this binding is used by cvs-ediff-startup-hook
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1832 (cvs-transient-buffers (list rev1-buf rev2-buf)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1833 (funcall (car cvs-idiff-imerge-handlers)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1834 rev1-buf rev2-buf)))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1835
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1836
28256
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
1837 (defun cvs-is-within-p (fis dir)
55458
f673d8bf105a (cvs-mode-run, cvs-is-within-p): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 54870
diff changeset
1838 "Non-nil if buffer is inside one of FIS (in DIR)."
28256
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
1839 (when (stringp buffer-file-name)
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
1840 (setq buffer-file-name (expand-file-name buffer-file-name))
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
1841 (let (ret)
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
1842 (dolist (fi (or fis (list (cvs-create-fileinfo 'DIRCHANGE "" "." ""))))
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
1843 (when (cvs-string-prefix-p
61867
59330b4d0e5b Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61245
diff changeset
1844 (expand-file-name (cvs-fileinfo->full-name fi) dir)
28256
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
1845 buffer-file-name)
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
1846 (setq ret t)))
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
1847 ret)))
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
1848
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1849 (defun* cvs-mode-run (cmd flags fis
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1850 &key (buf (cvs-temp-buffer))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1851 dont-change-disc cvsargs postproc)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1852 "Generic cvs-mode-<foo> function.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1853 Executes `cvs CVSARGS CMD FLAGS FIS'.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1854 BUF is the buffer to be used for cvs' output.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1855 DONT-CHANGE-DISC non-nil indicates that the command will not change the
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1856 contents of files. This is only used by the parser.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1857 POSTPROC is a list of expressions to be evaluated at the very end (after
55458
f673d8bf105a (cvs-mode-run, cvs-is-within-p): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 54870
diff changeset
1858 parsing if applicable). It will be prepended with `progn' if necessary."
28256
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
1859 (let ((def-dir default-directory))
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
1860 ;; Save the relevant buffers
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
1861 (save-some-buffers nil (lambda () (cvs-is-within-p fis def-dir))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1862 (unless (listp flags) (error "flags should be a list of strings"))
48285
64107c7851aa (cvs-mode-run): Don't pass "." if not needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48003
diff changeset
1863 ;; Some w32 versions of CVS don't like an explicit . too much.
64107c7851aa (cvs-mode-run): Don't pass "." if not needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48003
diff changeset
1864 (when (and (car fis) (null (cdr fis))
64107c7851aa (cvs-mode-run): Don't pass "." if not needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48003
diff changeset
1865 (eq (cvs-fileinfo->type (car fis)) 'DIRCHANGE)
64107c7851aa (cvs-mode-run): Don't pass "." if not needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48003
diff changeset
1866 ;; (equal (cvs-fileinfo->file (car fis)) ".")
64107c7851aa (cvs-mode-run): Don't pass "." if not needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48003
diff changeset
1867 (equal (cvs-fileinfo->dir (car fis)) ""))
64107c7851aa (cvs-mode-run): Don't pass "." if not needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48003
diff changeset
1868 (setq fis nil))
50958
d20464e3d617 (cvs-minor-current-files): Move before first use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50956
diff changeset
1869 (let* ((single-dir (or (not (listp cvs-execute-single-dir))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1870 (member cmd cvs-execute-single-dir)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1871 (parse (member cmd cvs-parse-known-commands))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1872 (args (append cvsargs (list cmd) flags))
30618
9dd1a6504bdd Use `nth' instead of `first', `second', and `third'.
Gerd Moellmann <gerd@gnu.org>
parents: 30612
diff changeset
1873 (after-mode (nth 2 (cdr (assoc cmd cvs-buffer-name-alist)))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1874 (cvs-cleanup-collection cvs-cookies ;cleanup remaining messages
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1875 (eq cvs-auto-remove-handled 'delayed) nil t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1876 (when (fboundp after-mode)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1877 (setq postproc (append postproc `((,after-mode)))))
45999
6efc3066895b (cvs-fileinfo-kill): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45904
diff changeset
1878 (when parse
6efc3066895b (cvs-fileinfo-kill): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45904
diff changeset
1879 (let ((old-fis
6efc3066895b (cvs-fileinfo-kill): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45904
diff changeset
1880 (when (member cmd '("status" "update")) ;FIXME: Yuck!!
6efc3066895b (cvs-fileinfo-kill): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45904
diff changeset
1881 ;; absence of `cvs update' output has a specific meaning.
6efc3066895b (cvs-fileinfo-kill): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45904
diff changeset
1882 (or fis (list (cvs-create-fileinfo 'DIRCHANGE "" "." ""))))))
6efc3066895b (cvs-fileinfo-kill): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45904
diff changeset
1883 (push `(cvs-parse-process ',dont-change-disc nil ',old-fis) postproc)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1884 (setq postproc (if (cdr postproc) (cons 'progn postproc) (car postproc)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1885 (with-current-buffer buf
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1886 (let ((inhibit-read-only t)) (erase-buffer))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1887 (message "Running cvs %s ..." cmd)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1888 (cvs-run-process args fis postproc single-dir))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1889
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1890
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1891 (defun* cvs-mode-do (cmd flags filter
50958
d20464e3d617 (cvs-minor-current-files): Move before first use.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50956
diff changeset
1892 &key show dont-change-disc cvsargs postproc)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1893 "Generic cvs-mode-<foo> function.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1894 Executes `cvs CVSARGS CMD FLAGS' on the selected files.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1895 FILTER is passed to `cvs-applicable-p' to only apply the command to
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1896 files for which it makes sense.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1897 SHOW indicates that CMD should be not be run in the default temp buffer and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1898 should be shown to the user. The buffer and mode to be used is determined
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1899 by `cvs-buffer-name-alist'.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1900 DONT-CHANGE-DISC non-nil indicates that the command will not change the
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1901 contents of files. This is only used by the parser."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1902 (cvs-mode-run cmd flags (cvs-mode-marked filter cmd)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1903 :buf (cvs-temp-buffer (when show cmd))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1904 :dont-change-disc dont-change-disc
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1905 :cvsargs cvsargs
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1906 :postproc postproc))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1907
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1908 (defun-cvs-mode (cvs-mode-status . SIMPLE) (flags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1909 "Show cvs status for all marked files.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1910 With prefix argument, prompt for cvs flags."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1911 (interactive (list (cvs-flags-query 'cvs-status-flags "cvs status flags")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1912 (cvs-mode-do "status" flags nil :dont-change-disc t :show t
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1913 :postproc (when (eq cvs-auto-remove-handled 'status)
78639
0c7ac1e33f19 (cvs-mode-status): Fix long-standing typo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78535
diff changeset
1914 `((with-current-buffer ,(current-buffer)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1915 (cvs-mode-remove-handled))))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1916
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1917 (defun-cvs-mode (cvs-mode-tree . SIMPLE) (flags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1918 "Call cvstree using the file under the point as a keyfile."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1919 (interactive (list (cvs-flags-query 'cvs-status-flags "cvs status flags")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1920 (cvs-mode-run "status" (cons "-v" flags) (cvs-mode-marked nil "status")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1921 :buf (cvs-temp-buffer "tree")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1922 :dont-change-disc t
33234
39c359a5c419 (cvs-mode-marked): New arg `noquery'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33195
diff changeset
1923 :postproc '((cvs-status-cvstrees))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1924
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1925 ;; cvs log
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1926
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1927 (defun-cvs-mode (cvs-mode-log . NOARGS) (flags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1928 "Display the cvs log of all selected files.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1929 With prefix argument, prompt for cvs flags."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1930 (interactive (list (cvs-add-branch-prefix
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1931 (cvs-flags-query 'cvs-log-flags "cvs log flags"))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1932 (cvs-mode-do "log" flags nil :show t))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1933
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1934
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1935 (defun-cvs-mode (cvs-mode-update . NOARGS) (flags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1936 "Update all marked files.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1937 With a prefix argument, prompt for cvs flags."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1938 (interactive
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1939 (list (cvs-add-branch-prefix
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1940 (cvs-add-secondary-branch-prefix
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1941 (cvs-flags-query 'cvs-update-flags "cvs update flags")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1942 "-j") "-j")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1943 (cvs-mode-do "update" flags 'update))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1944
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1945
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1946 (defun-cvs-mode (cvs-mode-examine . NOARGS) (flags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1947 "Re-examine all marked files.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1948 With a prefix argument, prompt for cvs flags."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1949 (interactive
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1950 (list (cvs-add-branch-prefix
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1951 (cvs-add-secondary-branch-prefix
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1952 (cvs-flags-query 'cvs-update-flags "cvs -n update flags")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1953 "-j") "-j")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1954 (cvs-mode-do "update" flags nil :cvsargs '("-n") :dont-change-disc t))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1955
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1956
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1957 (defun-cvs-mode cvs-mode-ignore (&optional pattern)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1958 "Arrange so that CVS ignores the selected files.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1959 This command ignores files that are not flagged as `Unknown'."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1960 (interactive)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1961 (dolist (fi (cvs-mode-marked 'ignore))
50991
d79cc0e092b2 (cvs-append-to-ignore): New arg `old-dir'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50965
diff changeset
1962 (cvs-append-to-ignore (cvs-fileinfo->dir fi) (cvs-fileinfo->file fi)
d79cc0e092b2 (cvs-append-to-ignore): New arg `old-dir'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50965
diff changeset
1963 (eq (cvs-fileinfo->subtype fi) 'NEW-DIR))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1964 (setf (cvs-fileinfo->type fi) 'DEAD))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1965 (cvs-cleanup-collection cvs-cookies nil nil nil))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1966
86240
8cc694a9ff7e * progmodes/octave-mod.el (inferior-octave-send-list-and-digest):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 86094
diff changeset
1967 (declare-function vc-editable-p "vc" (file))
8cc694a9ff7e * progmodes/octave-mod.el (inferior-octave-send-list-and-digest):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 86094
diff changeset
1968 (declare-function vc-checkout "vc" (file &optional writable rev))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1969
50991
d79cc0e092b2 (cvs-append-to-ignore): New arg `old-dir'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50965
diff changeset
1970 (defun cvs-append-to-ignore (dir str &optional old-dir)
d79cc0e092b2 (cvs-append-to-ignore): New arg `old-dir'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50965
diff changeset
1971 "Add STR to the .cvsignore file in DIR.
d79cc0e092b2 (cvs-append-to-ignore): New arg `old-dir'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50965
diff changeset
1972 If OLD-DIR is non-nil, then this is a directory that we don't want
d79cc0e092b2 (cvs-append-to-ignore): New arg `old-dir'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50965
diff changeset
1973 to hear about anymore."
d79cc0e092b2 (cvs-append-to-ignore): New arg `old-dir'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50965
diff changeset
1974 (with-current-buffer
d79cc0e092b2 (cvs-append-to-ignore): New arg `old-dir'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50965
diff changeset
1975 (find-file-noselect (expand-file-name ".cvsignore" dir))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1976 (when (ignore-errors
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1977 (and buffer-read-only
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1978 (eq 'CVS (vc-backend buffer-file-name))
32309
bb96b2ece52b (cvs-append-to-ignore, cvs-vc-command-advice)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32187
diff changeset
1979 (not (vc-editable-p buffer-file-name))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1980 ;; CVSREAD=on special case
50991
d79cc0e092b2 (cvs-append-to-ignore): New arg `old-dir'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50965
diff changeset
1981 (vc-checkout buffer-file-name t))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1982 (goto-char (point-max))
50991
d79cc0e092b2 (cvs-append-to-ignore): New arg `old-dir'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50965
diff changeset
1983 (unless (bolp) (insert "\n"))
d79cc0e092b2 (cvs-append-to-ignore): New arg `old-dir'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50965
diff changeset
1984 (insert str (if old-dir "/\n" "\n"))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1985 (if cvs-sort-ignore-file (sort-lines nil (point-min) (point-max)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1986 (save-buffer)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1987
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1988
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1989 (defun cvs-mode-find-file-other-window (e)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1990 "Select a buffer containing the file in another window."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1991 (interactive (list last-input-event))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1992 (cvs-mode-find-file e t))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1993
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1994
37339
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1995 (defun cvs-mode-display-file (e)
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1996 "Show a buffer containing the file in another window."
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1997 (interactive (list last-input-event))
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1998 (cvs-mode-find-file e 'dont-select))
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
1999
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
2000
57505
78b87f4d875f (cvs-mode-view-file, cvs-mode-view-file-other-window): Add.
Kim F. Storm <storm@cua.dk>
parents: 56314
diff changeset
2001 (defun cvs-mode-view-file (e)
78b87f4d875f (cvs-mode-view-file, cvs-mode-view-file-other-window): Add.
Kim F. Storm <storm@cua.dk>
parents: 56314
diff changeset
2002 "View the file."
78b87f4d875f (cvs-mode-view-file, cvs-mode-view-file-other-window): Add.
Kim F. Storm <storm@cua.dk>
parents: 56314
diff changeset
2003 (interactive (list last-input-event))
78b87f4d875f (cvs-mode-view-file, cvs-mode-view-file-other-window): Add.
Kim F. Storm <storm@cua.dk>
parents: 56314
diff changeset
2004 (cvs-mode-find-file e nil t))
78b87f4d875f (cvs-mode-view-file, cvs-mode-view-file-other-window): Add.
Kim F. Storm <storm@cua.dk>
parents: 56314
diff changeset
2005
78b87f4d875f (cvs-mode-view-file, cvs-mode-view-file-other-window): Add.
Kim F. Storm <storm@cua.dk>
parents: 56314
diff changeset
2006
78b87f4d875f (cvs-mode-view-file, cvs-mode-view-file-other-window): Add.
Kim F. Storm <storm@cua.dk>
parents: 56314
diff changeset
2007 (defun cvs-mode-view-file-other-window (e)
78b87f4d875f (cvs-mode-view-file, cvs-mode-view-file-other-window): Add.
Kim F. Storm <storm@cua.dk>
parents: 56314
diff changeset
2008 "View the file."
78b87f4d875f (cvs-mode-view-file, cvs-mode-view-file-other-window): Add.
Kim F. Storm <storm@cua.dk>
parents: 56314
diff changeset
2009 (interactive (list last-input-event))
78b87f4d875f (cvs-mode-view-file, cvs-mode-view-file-other-window): Add.
Kim F. Storm <storm@cua.dk>
parents: 56314
diff changeset
2010 (cvs-mode-find-file e t t))
78b87f4d875f (cvs-mode-view-file, cvs-mode-view-file-other-window): Add.
Kim F. Storm <storm@cua.dk>
parents: 56314
diff changeset
2011
78b87f4d875f (cvs-mode-view-file, cvs-mode-view-file-other-window): Add.
Kim F. Storm <storm@cua.dk>
parents: 56314
diff changeset
2012
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2013 (defun cvs-find-modif (fi)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2014 (with-temp-buffer
84571
44b45775d250 (cvs-tags-list, cvs-retrieve-revision, cvs-find-modif)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84380
diff changeset
2015 (process-file cvs-program nil (current-buffer) nil
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2016 "-f" "diff" (cvs-fileinfo->file fi))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2017 (goto-char (point-min))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2018 (if (re-search-forward "^\\([0-9]+\\)" nil t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2019 (string-to-number (match-string 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2020 1)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2021
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2022
57505
78b87f4d875f (cvs-mode-view-file, cvs-mode-view-file-other-window): Add.
Kim F. Storm <storm@cua.dk>
parents: 56314
diff changeset
2023 (defun cvs-mode-find-file (e &optional other view)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2024 "Select a buffer containing the file.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2025 With a prefix, opens the buffer in an OTHER window."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2026 (interactive (list last-input-event current-prefix-arg))
50764
394622821e83 (cvs-mode-find-file): Don't complain if bound to a non-mouse event.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50651
diff changeset
2027 ;; If the event moves point, check that it moves it to a valid location.
54870
3b1741ff0676 (cvs-mode-toggle-mark): Rename from cvs-mouse-toggle-mark.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54619
diff changeset
2028 (when (and (/= (point) (progn (posn-set-point (event-end e)) (point)))
50925
2318a0020ca5 (cvs-mode-find-file): Fixed the last patch's logic.
Sam Steingold <sds@gnu.org>
parents: 50764
diff changeset
2029 (not (memq (get-text-property (1- (line-end-position))
2318a0020ca5 (cvs-mode-find-file): Fixed the last patch's logic.
Sam Steingold <sds@gnu.org>
parents: 50764
diff changeset
2030 'font-lock-face)
63210
2e115caaa7d2 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-380
Miles Bader <miles@gnu.org>
parents: 62138
diff changeset
2031 '(cvs-header cvs-filename))))
50764
394622821e83 (cvs-mode-find-file): Don't complain if bound to a non-mouse event.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50651
diff changeset
2032 (error "Not a file name"))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2033 (cvs-mode!
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2034 (lambda (&optional rev)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2035 (interactive (list (cvs-prefix-get 'cvs-branch-prefix)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2036 (let* ((cvs-buf (current-buffer))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2037 (fi (cvs-mode-marked nil nil :one t)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2038 (if (eq (cvs-fileinfo->type fi) 'DIRCHANGE)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2039 (let ((odir default-directory))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2040 (setq default-directory
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2041 (cvs-expand-dir-name (cvs-fileinfo->dir fi)))
37339
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
2042 (cond ((eq other 'dont-select)
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
2043 (display-buffer (find-file-noselect default-directory)))
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
2044 (other (dired-other-window default-directory))
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
2045 (t (dired default-directory)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2046 (set-buffer cvs-buf)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2047 (setq default-directory odir))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2048 (let ((buf (if rev (cvs-retrieve-revision fi rev)
61867
59330b4d0e5b Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61245
diff changeset
2049 (find-file-noselect (cvs-fileinfo->full-name fi)))))
37339
31271d7f21c9 (cvs-addto-collection): Don't merge MESSAGE fileinfos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36615
diff changeset
2050 (funcall (cond ((eq other 'dont-select) 'display-buffer)
57505
78b87f4d875f (cvs-mode-view-file, cvs-mode-view-file-other-window): Add.
Kim F. Storm <storm@cua.dk>
parents: 56314
diff changeset
2051 (other
78b87f4d875f (cvs-mode-view-file, cvs-mode-view-file-other-window): Add.
Kim F. Storm <storm@cua.dk>
parents: 56314
diff changeset
2052 (if view 'view-buffer-other-window
78b87f4d875f (cvs-mode-view-file, cvs-mode-view-file-other-window): Add.
Kim F. Storm <storm@cua.dk>
parents: 56314
diff changeset
2053 'switch-to-buffer-other-window))
78b87f4d875f (cvs-mode-view-file, cvs-mode-view-file-other-window): Add.
Kim F. Storm <storm@cua.dk>
parents: 56314
diff changeset
2054 (t (if view 'view-buffer 'switch-to-buffer)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2055 buf)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2056 (when (and cvs-find-file-and-jump (cvs-applicable-p fi 'diff-base))
104916
065958ebbf6d (cvs-mode-find-file): Use forward-line rather than goto-line.
Glenn Morris <rgm@gnu.org>
parents: 101635
diff changeset
2057 (save-restriction
065958ebbf6d (cvs-mode-find-file): Use forward-line rather than goto-line.
Glenn Morris <rgm@gnu.org>
parents: 101635
diff changeset
2058 (widen)
065958ebbf6d (cvs-mode-find-file): Use forward-line rather than goto-line.
Glenn Morris <rgm@gnu.org>
parents: 101635
diff changeset
2059 (goto-char (point-min))
065958ebbf6d (cvs-mode-find-file): Use forward-line rather than goto-line.
Glenn Morris <rgm@gnu.org>
parents: 101635
diff changeset
2060 (forward-line (1- (cvs-find-modif fi)))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2061 buf))))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2062
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2063
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2064 (defun-cvs-mode (cvs-mode-undo . SIMPLE) (flags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2065 "Undo local changes to all marked files.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2066 The file is removed and `cvs update FILE' is run."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2067 ;;"With prefix argument, prompt for cvs FLAGS."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2068 (interactive (list nil));; (cvs-flags-query 'cvs-undo-flags "undo flags")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2069 (if current-prefix-arg (call-interactively 'cvs-mode-revert-to-rev)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2070 (let* ((fis (cvs-do-removal 'undo "update" 'all))
47211
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
2071 (removedp (lambda (fi)
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
2072 (or (eq (cvs-fileinfo->type fi) 'REMOVED)
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
2073 (and (eq (cvs-fileinfo->type fi) 'CONFLICT)
3a7c7e0c12f7 (cvs-run-process): Use a pty rather than a pipe to work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46002
diff changeset
2074 (eq (cvs-fileinfo->subtype fi) 'REMOVED)))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2075 (fis-split (cvs-partition removedp fis))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2076 (fis-removed (car fis-split))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2077 (fis-other (cdr fis-split)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2078 (if (null fis-other)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2079 (when fis-removed (cvs-mode-run "add" nil fis-removed))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2080 (cvs-mode-run "update" flags fis-other
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2081 :postproc
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2082 (when fis-removed
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2083 `((with-current-buffer ,(current-buffer)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2084 (cvs-mode-run "add" nil ',fis-removed)))))))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2085
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2086
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2087 (defun-cvs-mode (cvs-mode-revert-to-rev . NOARGS) (rev)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2088 "Revert the selected files to an old revision."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2089 (interactive
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2090 (list (or (cvs-prefix-get 'cvs-branch-prefix)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2091 (let ((current-prefix-arg '(4)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2092 (cvs-flags-query 'cvs-idiff-version)))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2093 (let* ((fis (cvs-mode-marked 'revert "revert" :file t))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2094 (tag (concat "tmp_pcl_tag_" (make-temp-name "")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2095 (untag `((with-current-buffer ,(current-buffer)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2096 (cvs-mode-run "tag" (list "-d" ',tag) ',fis))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2097 (update `((with-current-buffer ,(current-buffer)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2098 (cvs-mode-run "update" (list "-j" ',tag "-j" ',rev) ',fis
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2099 :postproc ',untag)))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2100 (cvs-mode-run "tag" (list tag) fis :postproc update)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2101
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2102
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2103 (defun-cvs-mode cvs-mode-delete-lock ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2104 "Delete the lock file that CVS is waiting for.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2105 Note that this can be dangerous. You should only do this
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2106 if you are convinced that the process that created the lock is dead."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2107 (interactive)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2108 (let* ((default-directory (cvs-expand-dir-name cvs-lock-file))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2109 (locks (directory-files default-directory nil cvs-lock-file-regexp)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2110 (cond
38422
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 37339
diff changeset
2111 ((not locks) (error "No lock files found"))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2112 ((yes-or-no-p (concat "Really delete locks in " cvs-lock-file "? "))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2113 (dolist (lock locks)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2114 (cond ((file-directory-p lock) (delete-directory lock))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2115 ((file-exists-p lock) (delete-file lock))))))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2116
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2117
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2118 (defun-cvs-mode cvs-mode-remove-handled ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2119 "Remove all lines that are handled.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2120 Empty directories are removed."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2121 (interactive)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2122 (cvs-cleanup-collection cvs-cookies
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2123 t (or cvs-auto-remove-directories 'handled) t))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2124
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2125
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2126 (defun-cvs-mode cvs-mode-acknowledge ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2127 "Remove all marked files from the buffer."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2128 (interactive)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2129 (dolist (fi (cvs-get-marked (cvs-ignore-marks-p "acknowledge") t))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2130 (setf (cvs-fileinfo->type fi) 'DEAD))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2131 (cvs-cleanup-collection cvs-cookies nil nil nil))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2132
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2133 (defun cvs-do-removal (filter &optional cmd all)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2134 "Remove files.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2135 Returns a list of FIS that should be `cvs remove'd."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2136 (let* ((files (cvs-mode-marked filter cmd :file t :read-only t))
33359
5ef2137ce754 (cvs-enabledp): Ignore errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33339
diff changeset
2137 (fis (cdr (cvs-partition (lambda (fi)
5ef2137ce754 (cvs-enabledp): Ignore errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33339
diff changeset
2138 (eq (cvs-fileinfo->type fi) 'UNKNOWN))
5ef2137ce754 (cvs-enabledp): Ignore errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33339
diff changeset
2139 (cvs-mode-marked filter cmd))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2140 (silent (or (not cvs-confirm-removals)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2141 (cvs-every (lambda (fi)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2142 (or (not (file-exists-p
61867
59330b4d0e5b Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61245
diff changeset
2143 (cvs-fileinfo->full-name fi)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2144 (cvs-applicable-p fi 'safe-rm)))
33359
5ef2137ce754 (cvs-enabledp): Ignore errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33339
diff changeset
2145 files)))
5ef2137ce754 (cvs-enabledp): Ignore errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33339
diff changeset
2146 (tmpbuf (cvs-temp-buffer)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2147 (when (and (not silent) (equal cvs-confirm-removals 'list))
33359
5ef2137ce754 (cvs-enabledp): Ignore errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33339
diff changeset
2148 (with-current-buffer tmpbuf
47470
344fed0ec431 (cvs-do-removal): Bind inhibit-read-only while modifying the buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47468
diff changeset
2149 (let ((inhibit-read-only t))
61867
59330b4d0e5b Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61245
diff changeset
2150 (cvs-insert-strings (mapcar 'cvs-fileinfo->full-name fis))
47470
344fed0ec431 (cvs-do-removal): Bind inhibit-read-only while modifying the buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47468
diff changeset
2151 (cvs-pop-to-buffer-same-frame (current-buffer))
344fed0ec431 (cvs-do-removal): Bind inhibit-read-only while modifying the buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47468
diff changeset
2152 (shrink-window-if-larger-than-buffer))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2153 (if (not (or silent
33359
5ef2137ce754 (cvs-enabledp): Ignore errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33339
diff changeset
2154 (unwind-protect
52669
2db8fbd2339c (cvs-mode-unmark-up): Move to goal column when done.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52552
diff changeset
2155 (yes-or-no-p
52552
dab2424315f1 Change the prompt depending on `filter' value.
Masatake YAMATO <jet@gyve.org>
parents: 52401
diff changeset
2156 (let ((nfiles (length files))
dab2424315f1 Change the prompt depending on `filter' value.
Masatake YAMATO <jet@gyve.org>
parents: 52401
diff changeset
2157 (verb (if (eq filter 'undo) "Undo" "Delete")))
52388
b851ebbed6d8 * pcvs.el (cvs-do-removal): Use = instead of eq to check
Masatake YAMATO <jet@gyve.org>
parents: 52299
diff changeset
2158 (if (= 1 nfiles)
52669
2db8fbd2339c (cvs-mode-unmark-up): Move to goal column when done.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52552
diff changeset
2159 (format "%s file: \"%s\" ? "
52552
dab2424315f1 Change the prompt depending on `filter' value.
Masatake YAMATO <jet@gyve.org>
parents: 52401
diff changeset
2160 verb
52388
b851ebbed6d8 * pcvs.el (cvs-do-removal): Use = instead of eq to check
Masatake YAMATO <jet@gyve.org>
parents: 52299
diff changeset
2161 (cvs-fileinfo->file (car files)))
52669
2db8fbd2339c (cvs-mode-unmark-up): Move to goal column when done.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52552
diff changeset
2162 (format "%s %d files? "
52552
dab2424315f1 Change the prompt depending on `filter' value.
Masatake YAMATO <jet@gyve.org>
parents: 52401
diff changeset
2163 verb
dab2424315f1 Change the prompt depending on `filter' value.
Masatake YAMATO <jet@gyve.org>
parents: 52401
diff changeset
2164 nfiles))))
33359
5ef2137ce754 (cvs-enabledp): Ignore errors.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33339
diff changeset
2165 (cvs-bury-buffer tmpbuf cvs-buffer))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2166 (progn (message "Aborting") nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2167 (dolist (fi files)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2168 (let* ((type (cvs-fileinfo->type fi))
61867
59330b4d0e5b Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61245
diff changeset
2169 (file (cvs-fileinfo->full-name fi)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2170 (when (or all (eq type 'UNKNOWN))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2171 (when (file-exists-p file) (delete-file file))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2172 (unless all (setf (cvs-fileinfo->type fi) 'DEAD) t))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2173 fis)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2174
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2175 (defun-cvs-mode (cvs-mode-remove . SIMPLE) (flags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2176 "Remove all marked files.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2177 With prefix argument, prompt for cvs flags."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2178 (interactive (list (cvs-flags-query 'cvs-remove-flags "cvs remove flags")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2179 (let ((fis (cvs-do-removal 'remove)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2180 (if fis (cvs-mode-run "remove" (cons "-f" flags) fis)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2181 (cvs-cleanup-collection cvs-cookies nil nil nil))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2182
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2183
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2184 (defvar cvs-tag-name "")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2185 (defun-cvs-mode (cvs-mode-tag . SIMPLE) (tag &optional flags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2186 "Run `cvs tag TAG' on all selected files.
50202
dac1de705d35 (cvs-mode-tag): Docstring improvement.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50143
diff changeset
2187 With prefix argument, prompt for cvs flags.
dac1de705d35 (cvs-mode-tag): Docstring improvement.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50143
diff changeset
2188 By default this can only be used on directories.
dac1de705d35 (cvs-mode-tag): Docstring improvement.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50143
diff changeset
2189 Use \\[cvs-mode-force-command] or change `cvs-force-dir-tag' if you need
dac1de705d35 (cvs-mode-tag): Docstring improvement.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50143
diff changeset
2190 to use it on individual files."
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2191 (interactive
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2192 (list (setq cvs-tag-name
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2193 (cvs-query-read cvs-tag-name "Tag name: " cvs-qtypedesc-tag))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2194 (cvs-flags-query 'cvs-tag-flags "tag flags")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2195 (cvs-mode-do "tag" (append flags (list tag))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2196 (when cvs-force-dir-tag 'tag)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2197
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2198 (defun-cvs-mode (cvs-mode-untag . SIMPLE) (tag &optional flags)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2199 "Run `cvs tag -d TAG' on all selected files.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2200 With prefix argument, prompt for cvs flags."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2201 (interactive
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2202 (list (setq cvs-tag-name
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2203 (cvs-query-read cvs-tag-name "Tag to delete: " cvs-qtypedesc-tag))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2204 (cvs-flags-query 'cvs-tag-flags "tag flags")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2205 (cvs-mode-do "tag" (append '("-d") flags (list tag))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2206 (when cvs-force-dir-tag 'tag)))
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
2207
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2208
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2209 ;; Byte compile files.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2210
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2211 (defun-cvs-mode cvs-mode-byte-compile-files ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2212 "Run byte-compile-file on all selected files that end in '.el'."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2213 (interactive)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2214 (let ((marked (cvs-get-marked (cvs-ignore-marks-p "byte-compile"))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2215 (dolist (fi marked)
61867
59330b4d0e5b Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61245
diff changeset
2216 (let ((filename (cvs-fileinfo->full-name fi)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2217 (when (string-match "\\.el\\'" filename)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2218 (byte-compile-file filename))))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2219
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2220 ;; ChangeLog support.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2221
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2222 (defun-cvs-mode cvs-mode-add-change-log-entry-other-window ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2223 "Add a ChangeLog entry in the ChangeLog of the current directory."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2224 (interactive)
78753
cd3530596f8e (cvs-mode-add-change-log-entry-other-window): Use
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78654
diff changeset
2225 ;; Require `add-log' explicitly, because if it gets autoloaded when we call
cd3530596f8e (cvs-mode-add-change-log-entry-other-window): Use
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78654
diff changeset
2226 ;; add-change-log-entry-other-window below, the
cd3530596f8e (cvs-mode-add-change-log-entry-other-window): Use
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78654
diff changeset
2227 ;; add-log-buffer-file-name-function ends up unbound when we leave the `let'.
cd3530596f8e (cvs-mode-add-change-log-entry-other-window): Use
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78654
diff changeset
2228 (require 'add-log)
45325
8b7e7b9551fe (cvs-cmd-do): Accept non-CVS dirs with CVS-ctrl'd subdirs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44384
diff changeset
2229 (dolist (fi (cvs-mode-marked nil nil))
54376
43c8c6b5656b (cvs-mode-add-change-log-entry-other-window): Fix minor bug.
Richard M. Stallman <rms@gnu.org>
parents: 52669
diff changeset
2230 (let* ((default-directory (cvs-expand-dir-name (cvs-fileinfo->dir fi)))
78753
cd3530596f8e (cvs-mode-add-change-log-entry-other-window): Use
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78654
diff changeset
2231 (add-log-buffer-file-name-function
cd3530596f8e (cvs-mode-add-change-log-entry-other-window): Use
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78654
diff changeset
2232 (lambda ()
cd3530596f8e (cvs-mode-add-change-log-entry-other-window): Use
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78654
diff changeset
2233 (let ((file (expand-file-name (cvs-fileinfo->file fi))))
cd3530596f8e (cvs-mode-add-change-log-entry-other-window): Use
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78654
diff changeset
2234 (if (file-directory-p file)
cd3530596f8e (cvs-mode-add-change-log-entry-other-window): Use
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78654
diff changeset
2235 ;; Be careful to use a directory name, otherwise add-log
cd3530596f8e (cvs-mode-add-change-log-entry-other-window): Use
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78654
diff changeset
2236 ;; starts looking for a ChangeLog file in the
cd3530596f8e (cvs-mode-add-change-log-entry-other-window): Use
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78654
diff changeset
2237 ;; parent dir.
cd3530596f8e (cvs-mode-add-change-log-entry-other-window): Use
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78654
diff changeset
2238 (file-name-as-directory file)
cd3530596f8e (cvs-mode-add-change-log-entry-other-window): Use
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78654
diff changeset
2239 file)))))
45325
8b7e7b9551fe (cvs-cmd-do): Accept non-CVS dirs with CVS-ctrl'd subdirs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44384
diff changeset
2240 (kill-local-variable 'change-log-default-name)
8b7e7b9551fe (cvs-cmd-do): Accept non-CVS dirs with CVS-ctrl'd subdirs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44384
diff changeset
2241 (save-excursion (add-change-log-entry-other-window)))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2242
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2243 ;; interactive commands to set optional flags
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2244
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2245 (defun cvs-mode-set-flags (flag)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2246 "Ask for new setting of cvs-FLAG-flags."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2247 (interactive
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2248 (list (completing-read
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2249 "Which flag: "
45325
8b7e7b9551fe (cvs-cmd-do): Accept non-CVS dirs with CVS-ctrl'd subdirs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44384
diff changeset
2250 '("cvs" "diff" "update" "status" "log" "tag" ;"rtag"
8b7e7b9551fe (cvs-cmd-do): Accept non-CVS dirs with CVS-ctrl'd subdirs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44384
diff changeset
2251 "commit" "remove" "undo" "checkout")
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2252 nil t)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2253 (let* ((sym (intern (concat "cvs-" flag "-flags"))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2254 (let ((current-prefix-arg '(16)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2255 (cvs-flags-query sym (concat flag " flags")))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2256
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2257
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2258 ;;;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2259 ;;;; Utilities for the *cvs* buffer
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2260 ;;;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2261
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2262 (defun cvs-dir-member-p (fileinfo dir)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2263 "Return true if FILEINFO represents a file in directory DIR."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2264 (and (not (eq (cvs-fileinfo->type fileinfo) 'DIRCHANGE))
28862
d089f0a330a0 (cvs-cleanup-collection): Remove obsolete code for
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
2265 (cvs-string-prefix-p dir (cvs-fileinfo->dir fileinfo))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2266
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2267 (defun cvs-execute-single-file (fi extractor program constant-args)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2268 "Internal function for `cvs-execute-single-file-list'."
34653
433f1bff06f5 (cvs-diff-backup-extractor): Return full-path for file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34412
diff changeset
2269 (let* ((arg-list (funcall extractor fi))
433f1bff06f5 (cvs-diff-backup-extractor): Return full-path for file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34412
diff changeset
2270 (inhibit-read-only t))
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
2271
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2272 ;; Execute the command unless extractor returned t.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2273 (when (listp arg-list)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2274 (let* ((args (append constant-args arg-list)))
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
2275
34653
433f1bff06f5 (cvs-diff-backup-extractor): Return full-path for file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34412
diff changeset
2276 (insert (format "=== %s %s\n\n"
78535
651c50f01f5f (cvs-reread-cvsrc, cvs-checkout, cvs-mode-checkout)
Richard M. Stallman <rms@gnu.org>
parents: 78239
diff changeset
2277 program (split-string-and-unquote args)))
30569
f7a0912532da * pcvs.el (cvs-do-commit): Use `buffer-substring-no-properties'
Sam Steingold <sds@gnu.org>
parents: 29577
diff changeset
2278
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2279 ;; FIXME: return the exit status?
84571
44b45775d250 (cvs-tags-list, cvs-retrieve-revision, cvs-find-modif)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84380
diff changeset
2280 (apply 'process-file program nil t t args)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2281 (goto-char (point-max))))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2282
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2283 ;; FIXME: make this run in the background ala cvs-run-process...
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2284 (defun cvs-execute-single-file-list (fis extractor program constant-args)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2285 "Run PROGRAM on all elements on FIS.
34653
433f1bff06f5 (cvs-diff-backup-extractor): Return full-path for file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34412
diff changeset
2286 CONSTANT-ARGS is a list of strings to pass as arguments to PROGRAM.
433f1bff06f5 (cvs-diff-backup-extractor): Return full-path for file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34412
diff changeset
2287 The arguments given to the program will be CONSTANT-ARGS followed by
433f1bff06f5 (cvs-diff-backup-extractor): Return full-path for file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34412
diff changeset
2288 the list that EXTRACTOR returns.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2289
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2290 EXTRACTOR will be called once for each file on FIS. It is given
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2291 one argument, the cvs-fileinfo. It can return t, which means ignore
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2292 this file, or a list of arguments to send to the program."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2293 (dolist (fi fis)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2294 (cvs-execute-single-file fi extractor program constant-args)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2295
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2296
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2297 (defun cvs-revert-if-needed (fis)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2298 (dolist (fileinfo fis)
61867
59330b4d0e5b Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61245
diff changeset
2299 (let* ((file (cvs-fileinfo->full-name fileinfo))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2300 (buffer (find-buffer-visiting file)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2301 ;; For a revert to happen the user must be editing the file...
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2302 (unless (or (null buffer)
86246
a01176901861 (cvs-revert-if-needed): Fix copy&paste typo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 86240
diff changeset
2303 (memq (cvs-fileinfo->type fileinfo) '(MESSAGE UNKNOWN))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2304 ;; FIXME: check whether revert is really needed.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2305 ;; `(verify-visited-file-modtime buffer)' doesn't cut it
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2306 ;; because it only looks at the time stamp (it ignores
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2307 ;; read-write changes) which is not changed by `commit'.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2308 (buffer-modified-p buffer))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2309 (with-current-buffer buffer
31977
2f79c1ebd1fe (cvs-ediff-exit-hook): Kill buffer before window.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30879
diff changeset
2310 (ignore-errors
2f79c1ebd1fe (cvs-ediff-exit-hook): Kill buffer before window.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30879
diff changeset
2311 (revert-buffer 'ignore-auto 'dont-ask 'preserve-modes)
2f79c1ebd1fe (cvs-ediff-exit-hook): Kill buffer before window.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30879
diff changeset
2312 ;; `preserve-modes' avoids changing the (minor) modes. But we
2f79c1ebd1fe (cvs-ediff-exit-hook): Kill buffer before window.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30879
diff changeset
2313 ;; do want to reset the mode for VC, so we do it explicitly.
2f79c1ebd1fe (cvs-ediff-exit-hook): Kill buffer before window.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30879
diff changeset
2314 (vc-find-file-hook)
2f79c1ebd1fe (cvs-ediff-exit-hook): Kill buffer before window.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30879
diff changeset
2315 (when (eq (cvs-fileinfo->type fileinfo) 'CONFLICT)
87785
8f1628da223f * smerge-mode.el (smerge-start-session): Rename from smerge-auto.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87743
diff changeset
2316 (smerge-start-session))))))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2317
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2318
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2319 (defun cvs-change-cvsroot (newroot)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2320 "Change the cvsroot."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2321 (interactive "DNew repository: ")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2322 (if (or (file-directory-p (expand-file-name "CVSROOT" newroot))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2323 (y-or-n-p (concat "Warning: no CVSROOT found inside repository."
72386
2ce9bf47e864 * cus-theme.el (customize-create-theme)
Romain Francoise <romain@orebokech.com>
parents: 71346
diff changeset
2324 " Change cvs-cvsroot anyhow? ")))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2325 (setq cvs-cvsroot newroot)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2326
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2327 ;;;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2328 ;;;; useful global settings
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2329 ;;;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2330
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2331 ;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2332 ;; Hook to allow calling PCL-CVS by visiting the /CVS subdirectory
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2333 ;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2334
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2335 ;;;###autoload
32187
418444640a1e (cvs-ediff-exit-hook): Expect delete-window to fail.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31977
diff changeset
2336 (defcustom cvs-dired-action 'cvs-quickdir
29577
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
2337 "The action to be performed when opening a CVS directory.
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
2338 Sensible values are `cvs-examine', `cvs-status' and `cvs-quickdir'."
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
2339 :group 'pcl-cvs
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
2340 :type '(choice (const cvs-examine) (const cvs-status) (const cvs-quickdir)))
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
2341
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
2342 ;;;###autoload
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2343 (defcustom cvs-dired-use-hook '(4)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2344 "Whether or not opening a CVS directory should run PCL-CVS.
77713
e16960b7b99b (cvs-dired-use-hook): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 75347
diff changeset
2345 A value of nil means never do it.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2346 ALWAYS means to always do it unless a prefix argument is given to the
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2347 command that prompted the opening of the directory.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2348 Anything else means to do it only if the prefix arg is equal to this value."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2349 :group 'pcl-cvs
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2350 :type '(choice (const :tag "Never" nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2351 (const :tag "Always" always)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2352 (const :tag "Prefix" (4))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2353
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2354 ;;;###autoload
28862
d089f0a330a0 (cvs-cleanup-collection): Remove obsolete code for
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
2355 (progn (defun cvs-dired-noselect (dir)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2356 "Run `cvs-examine' if DIR is a CVS administrative directory.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2357 The exact behavior is determined also by `cvs-dired-use-hook'."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2358 (when (stringp dir)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2359 (setq dir (directory-file-name dir))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2360 (when (and (string= "CVS" (file-name-nondirectory dir))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2361 (file-readable-p (expand-file-name "Entries" dir))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2362 cvs-dired-use-hook
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2363 (if (eq cvs-dired-use-hook 'always)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2364 (not current-prefix-arg)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2365 (equal current-prefix-arg cvs-dired-use-hook)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2366 (save-excursion
29577
ce3a0229bee7 (cvs-parse-process): Don't blindly refresh all cookies.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28862
diff changeset
2367 (funcall cvs-dired-action (file-name-directory dir) t t))))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2368
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2369 ;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2370 ;; hook into VC
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2371 ;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2372
32309
bb96b2ece52b (cvs-append-to-ignore, cvs-vc-command-advice)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32187
diff changeset
2373 (add-hook 'vc-post-command-functions 'cvs-vc-command-advice)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2374
82222
c17afaa92484 (cvs-vc-command-advice): Handle the new fileset case.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78239
diff changeset
2375 (defun cvs-vc-command-advice (command files flags)
32309
bb96b2ece52b (cvs-append-to-ignore, cvs-vc-command-advice)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32187
diff changeset
2376 (when (and (equal command "cvs")
45904
4c3a4e9f96e7 (cvs-vc-command-advice): Handle the case where args
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45325
diff changeset
2377 (progn
4c3a4e9f96e7 (cvs-vc-command-advice): Handle the case where args
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45325
diff changeset
2378 (while (and (stringp (car flags))
4c3a4e9f96e7 (cvs-vc-command-advice): Handle the case where args
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45325
diff changeset
2379 (string-match "\\`-" (car flags)))
4c3a4e9f96e7 (cvs-vc-command-advice): Handle the case where args
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45325
diff changeset
2380 (pop flags))
4c3a4e9f96e7 (cvs-vc-command-advice): Handle the case where args
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45325
diff changeset
2381 ;; don't parse output we don't understand.
50764
394622821e83 (cvs-mode-find-file): Don't complain if bound to a non-mouse event.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50651
diff changeset
2382 (member (car flags) cvs-parse-known-commands))
394622821e83 (cvs-mode-find-file): Don't complain if bound to a non-mouse event.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50651
diff changeset
2383 ;; Don't parse "update -p" output.
394622821e83 (cvs-mode-find-file): Don't complain if bound to a non-mouse event.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50651
diff changeset
2384 (not (and (member (car flags) '("update" "checkout"))
394622821e83 (cvs-mode-find-file): Don't complain if bound to a non-mouse event.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50651
diff changeset
2385 (let ((found-p nil))
394622821e83 (cvs-mode-find-file): Don't complain if bound to a non-mouse event.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50651
diff changeset
2386 (dolist (flag flags found-p)
394622821e83 (cvs-mode-find-file): Don't complain if bound to a non-mouse event.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50651
diff changeset
2387 (if (equal flag "-p") (setq found-p t)))))))
46002
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
2388 (save-current-buffer
32309
bb96b2ece52b (cvs-append-to-ignore, cvs-vc-command-advice)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32187
diff changeset
2389 (let ((buffer (current-buffer))
bb96b2ece52b (cvs-append-to-ignore, cvs-vc-command-advice)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32187
diff changeset
2390 (dir default-directory)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2391 (cvs-from-vc t))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2392 (dolist (cvs-buf (buffer-list))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2393 (set-buffer cvs-buf)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2394 ;; look for a corresponding pcl-cvs buffer
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2395 (when (and (eq major-mode 'cvs-mode)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2396 (cvs-string-prefix-p default-directory dir))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2397 (let ((subdir (substring dir (length default-directory))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2398 (set-buffer buffer)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2399 (set (make-local-variable 'cvs-buffer) cvs-buf)
46002
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
2400 ;; `cvs -q add file' produces no useful output :-(
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
2401 (when (and (equal (car flags) "add")
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
2402 (goto-char (point-min))
6f298513c731 (cvs-parse-process): Don't save/restore point.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45999
diff changeset
2403 (looking-at ".*to add this file permanently\n\\'"))
82762
8ff02425f4db (cvs-vc-command-advice): Fix a typo in code (file->files).
Sam Steingold <sds@gnu.org>
parents: 82365
diff changeset
2404 (dolist (file (if (listp files) files (list files)))
82222
c17afaa92484 (cvs-vc-command-advice): Handle the new fileset case.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78239
diff changeset
2405 (insert "cvs add: scheduling file `"
c17afaa92484 (cvs-vc-command-advice): Handle the new fileset case.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78239
diff changeset
2406 (file-name-nondirectory file)
c17afaa92484 (cvs-vc-command-advice): Handle the new fileset case.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78239
diff changeset
2407 "' for addition\n")))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2408 ;; VC never (?) does `cvs -n update' so dcd=nil
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2409 ;; should probably always be the right choice.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2410 (cvs-parse-process nil subdir))))))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2411
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2412 ;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2413 ;; Hook into write-buffer
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2414 ;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2415
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2416 (defun cvs-mark-buffer-changed ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2417 (let* ((file (expand-file-name buffer-file-name))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2418 (version (and (fboundp 'vc-backend)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2419 (eq (vc-backend file) 'CVS)
85139
8ba0e30716a5 Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85114
diff changeset
2420 (vc-working-revision file))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2421 (when version
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2422 (save-excursion
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2423 (dolist (cvs-buf (buffer-list))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2424 (set-buffer cvs-buf)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2425 ;; look for a corresponding pcl-cvs buffer
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2426 (when (and (eq major-mode 'cvs-mode)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2427 (cvs-string-prefix-p default-directory file))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2428 (let* ((file (substring file (length default-directory)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2429 (fi (cvs-create-fileinfo
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2430 (if (string= "0" version)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2431 'ADDED 'MODIFIED)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2432 (or (file-name-directory file) "")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2433 (file-name-nondirectory file)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2434 "cvs-mark-buffer-changed")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2435 (cvs-addto-collection cvs-cookies fi))))))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2436
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2437 (add-hook 'after-save-hook 'cvs-mark-buffer-changed)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2438
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2439
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2440 (provide 'pcvs)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2441
58158
0d53729c8f7a (cvs-mode-checkout): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57505
diff changeset
2442 ;; arch-tag: 8e3a7494-0453-4389-9ab3-a557ce9fab61
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2443 ;;; pcvs.el ends here