29041
|
1 ;;; log-view.el --- Major mode for browsing RCS/CVS/SCCS log output
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
2
|
68651
|
3 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
75347
|
4 ;; 2006, 2007 Free Software Foundation, Inc.
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
5
|
70292
|
6 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
|
29041
|
7 ;; Keywords: rcs sccs cvs log version-control
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
8
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
9 ;; This file is part of GNU Emacs.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
10
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
12 ;; it under the terms of the GNU General Public License as published by
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
13 ;; the Free Software Foundation; either version 2, or (at your option)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
14 ;; any later version.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
15
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
16 ;; GNU Emacs is distributed in the hope that it will be useful,
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
19 ;; GNU General Public License for more details.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
20
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
21 ;; You should have received a copy of the GNU General Public License
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
|
64091
|
23 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
24 ;; Boston, MA 02110-1301, USA.
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
25
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
26 ;;; Commentary:
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
27
|
67709
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
28 ;; Major mode to browse revision log histories.
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
29 ;; Currently supports the format output by:
|
68098
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
30 ;; RCS, SCCS, CVS, Subversion, and DaRCS.
|
67709
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
31
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
32 ;; Examples of log output:
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
33
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
34 ;;;; RCS/CVS:
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
35
|
67709
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
36 ;; ----------------------------
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
37 ;; revision 1.35 locked by: turlutut
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
38 ;; date: 2005-03-22 18:48:38 +0000; author: monnier; state: Exp; lines: +6 -8
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
39 ;; (gnus-display-time-event-handler):
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
40 ;; Check display-time-timer at runtime rather than only at load time
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
41 ;; in case display-time-mode is turned off in the mean time.
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
42 ;; ----------------------------
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
43 ;; revision 1.34
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
44 ;; date: 2005-02-09 15:50:38 +0000; author: kfstorm; state: Exp; lines: +7 -7
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
45 ;; branches: 1.34.2;
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
46 ;; Change release version from 21.4 to 22.1 throughout.
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
47 ;; Change development version from 21.3.50 to 22.0.50.
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
48
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
49 ;;;; SCCS:
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
50
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
51 ;;;; Subversion:
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
52
|
68098
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
53 ;;;; Darcs:
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
54
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
55 ;; Changes to darcsum.el:
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
56 ;;
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
57 ;; Mon Nov 28 15:19:38 GMT 2005 Dave Love <fx@gnu.org>
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
58 ;; * Abstract process startup into darcsum-start-process. Use TERM=dumb.
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
59 ;; TERM=dumb avoids escape characters, at least, for any old darcs that
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
60 ;; doesn't understand DARCS_DONT_COLOR & al.
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
61 ;;
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
62 ;; Thu Nov 24 15:20:45 GMT 2005 Dave Love <fx@gnu.org>
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
63 ;; * darcsum-mode-related changes.
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
64 ;; Don't call font-lock-mode (unnecessary) or use-local-map (redundant).
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
65 ;; Use mode-class 'special. Add :group.
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
66 ;; Add trailing-whitespace option to mode hook and fix
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
67 ;; darcsum-display-changeset not to use trailing whitespace.
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
68
|
67709
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
69 ;;; Todo:
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
70
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
71 ;; - add ability to modify a log-entry (via cvs-mode-admin ;-)
|
29041
|
72 ;; - remove references to cvs-*
|
67709
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
73 ;; - make it easier to add support for new backends without changing the code.
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
74
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
75 ;;; Code:
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
76
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
77 (eval-when-compile (require 'cl))
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
78 (require 'pcvs-util)
|
67775
|
79 (autoload 'vc-find-version "vc")
|
40958
|
80 (autoload 'vc-version-diff "vc")
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
81
|
65293
|
82 (defvar cvs-minor-wrap-function)
|
|
83
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
84 (defgroup log-view nil
|
29041
|
85 "Major mode for browsing log output of RCS/CVS/SCCS."
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
86 :group 'pcl-cvs
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
87 :prefix "log-view-")
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
88
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
89 (easy-mmode-defmap log-view-mode-map
|
40958
|
90 '(("q" . quit-window)
|
|
91 ("z" . kill-this-buffer)
|
|
92 ("m" . set-mark-command)
|
49236
|
93 ;; ("e" . cvs-mode-edit-log)
|
40958
|
94 ("d" . log-view-diff)
|
41557
|
95 ("f" . log-view-find-version)
|
40958
|
96 ("n" . log-view-msg-next)
|
28251
|
97 ("p" . log-view-msg-prev)
|
|
98 ("N" . log-view-file-next)
|
|
99 ("P" . log-view-file-prev)
|
40450
|
100 ("\M-n" . log-view-file-next)
|
|
101 ("\M-p" . log-view-file-prev))
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
102 "Log-View's keymap."
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
103 :group 'log-view
|
29041
|
104 ;; Here I really need either buffer-local keymap-inheritance
|
|
105 ;; or a minor-mode-map with lower precedence than the local map.
|
|
106 :inherit (if (boundp 'cvs-mode-map) cvs-mode-map))
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
107
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
108 (defvar log-view-mode-hook nil
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
109 "Hook run at the end of `log-view-mode'.")
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
110
|
63203
|
111 (defface log-view-file
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
112 '((((class color) (background light))
|
42456
|
113 (:background "grey70" :weight bold))
|
|
114 (t (:weight bold)))
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
115 "Face for the file header line in `log-view-mode'."
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
116 :group 'log-view)
|
63203
|
117 ;; backward-compatibility alias
|
|
118 (put 'log-view-file-face 'face-alias 'log-view-file)
|
|
119 (defvar log-view-file-face 'log-view-file)
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
120
|
63203
|
121 (defface log-view-message
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
122 '((((class color) (background light))
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
123 (:background "grey85"))
|
42456
|
124 (t (:weight bold)))
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
125 "Face for the message header line in `log-view-mode'."
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
126 :group 'log-view)
|
63203
|
127 ;; backward-compatibility alias
|
|
128 (put 'log-view-message-face 'face-alias 'log-view-message)
|
|
129 (defvar log-view-message-face 'log-view-message)
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
130
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
131 (defconst log-view-file-re
|
67709
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
132 (concat "^\\(?:Working file: \\(.+\\)" ;RCS and CVS.
|
68098
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
133 "\\|\\(?:SCCS/s\\.\\|Changes to \\)\\(.+\\):" ;SCCS and Darcs.
|
67709
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
134 "\\)\n")) ;Include the \n for font-lock reasons.
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
135
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
136 (defconst log-view-message-re
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
137 (concat "^\\(?:revision \\([.0-9]+\\)\\(?:\t.*\\)?" ; RCS and CVS.
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
138 "\\|r\\([0-9]+\\) | .* | .*" ; Subversion.
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
139 "\\|D \\([.0-9]+\\) .*" ; SCCS.
|
68098
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
140 ;; Darcs doesn't have revision names. VC-darcs uses patch names
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
141 ;; instead. Darcs patch names are hashcodes, which do not appear
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
142 ;; in the log output :-(, but darcs accepts any prefix of the log
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
143 ;; message as a patch name, so we match the first line of the log
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
144 ;; message.
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
145 ;; First loosely match the date format.
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
146 (concat "\\|[^ \n].*[^0-9\n][0-9][0-9]:[0-9][0-9][^0-9\n].*[^ \n]"
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
147 ;;Email of user and finally Msg, used as revision name.
|
150225f41e97
(log-view-file-re, log-view-message-re): Add support for DaRCS output.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
148 " .*@.*\n\\(?: \\* \\(.*\\)\\)?")
|
67709
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
149 "\\)$"))
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
150
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
151 (defconst log-view-font-lock-keywords
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
152 `((,log-view-file-re
|
67709
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
153 (1 (if (boundp 'cvs-filename-face) cvs-filename-face) nil t)
|
29041
|
154 (2 (if (boundp 'cvs-filename-face) cvs-filename-face) nil t)
|
|
155 (0 log-view-file-face append))
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
156 (,log-view-message-re . log-view-message-face)))
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
157 (defconst log-view-font-lock-defaults
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
158 '(log-view-font-lock-keywords t nil nil nil))
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
159
|
40954
|
160 ;;;;
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
161 ;;;; Actual code
|
40954
|
162 ;;;;
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
163
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
164 ;;;###autoload
|
28251
|
165 (define-derived-mode log-view-mode fundamental-mode "Log-View"
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
166 "Major mode for browsing CVS log output."
|
40958
|
167 (setq buffer-read-only t)
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
168 (set (make-local-variable 'font-lock-defaults) log-view-font-lock-defaults)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
169 (set (make-local-variable 'cvs-minor-wrap-function) 'log-view-minor-wrap))
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
170
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
171 ;;;;
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
172 ;;;; Navigation
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
173 ;;;;
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
174
|
28251
|
175 ;; define log-view-{msg,file}-{next,prev}
|
|
176 (easy-mmode-define-navigation log-view-msg log-view-message-re "log message")
|
|
177 (easy-mmode-define-navigation log-view-file log-view-file-re "file")
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
178
|
28861
|
179 (defun log-view-goto-rev (rev)
|
|
180 (goto-char (point-min))
|
|
181 (ignore-errors
|
|
182 (while (not (equal rev (log-view-current-tag)))
|
|
183 (log-view-msg-next))
|
|
184 t))
|
|
185
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
186 ;;;;
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
187 ;;;; Linkage to PCL-CVS (mostly copied from cvs-status.el)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
188 ;;;;
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
189
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
190 (defconst log-view-dir-re "^cvs[.ex]* [a-z]+: Logging \\(.+\\)$")
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
191
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
192 (defun log-view-current-file ()
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
193 (save-excursion
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
194 (forward-line 1)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
195 (or (re-search-backward log-view-file-re nil t)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
196 (re-search-forward log-view-file-re))
|
67775
|
197 (let* ((file (or (match-string 1) (match-string 2)))
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
198 (cvsdir (and (re-search-backward log-view-dir-re nil t)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
199 (match-string 1)))
|
29041
|
200 (pcldir (and (boundp 'cvs-pcl-cvs-dirchange-re)
|
|
201 (re-search-backward cvs-pcl-cvs-dirchange-re nil t)
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
202 (match-string 1)))
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
203 (dir ""))
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
204 (let ((default-directory ""))
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
205 (when pcldir (setq dir (expand-file-name pcldir dir)))
|
40958
|
206 (when cvsdir (setq dir (expand-file-name cvsdir dir))))
|
|
207 (expand-file-name file dir))))
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
208
|
40958
|
209 (defun log-view-current-tag (&optional where)
|
28251
|
210 (save-excursion
|
40958
|
211 (when where (goto-char where))
|
28251
|
212 (forward-line 1)
|
|
213 (let ((pt (point)))
|
|
214 (when (re-search-backward log-view-message-re nil t)
|
67709
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
215 (let (rev)
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
216 ;; Find the subgroup that matched.
|
67775
|
217 (dotimes (i (/ (length (match-data 'integers)) 2))
|
67709
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
218 (setq rev (or rev (match-string (1+ i)))))
|
28251
|
219 (unless (re-search-forward log-view-file-re pt t)
|
|
220 rev))))))
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
221
|
67709
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
222 (defvar cvs-minor-current-files)
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
223 (defvar cvs-branch-prefix)
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
224 (defvar cvs-secondary-branch-prefix)
|
6f549652480e
(log-view-file-re, log-view-message-re): Use shy groups.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
225
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
226 (defun log-view-minor-wrap (buf f)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
227 (let ((data (with-current-buffer buf
|
68370
|
228 (let* ((beg (point))
|
|
229 (end (if mark-active (mark) (point)))
|
68221
4804f7b39bfe
(log-view-minor-wrap): Use the same logic to get revisions as `log-view-diff'.
Juri Linkov <juri@jurta.org>
diff
changeset
|
230 (fr (log-view-current-tag beg))
|
4804f7b39bfe
(log-view-minor-wrap): Use the same logic to get revisions as `log-view-diff'.
Juri Linkov <juri@jurta.org>
diff
changeset
|
231 (to (log-view-current-tag end)))
|
4804f7b39bfe
(log-view-minor-wrap): Use the same logic to get revisions as `log-view-diff'.
Juri Linkov <juri@jurta.org>
diff
changeset
|
232 (when (string-equal fr to)
|
4804f7b39bfe
(log-view-minor-wrap): Use the same logic to get revisions as `log-view-diff'.
Juri Linkov <juri@jurta.org>
diff
changeset
|
233 (save-excursion
|
4804f7b39bfe
(log-view-minor-wrap): Use the same logic to get revisions as `log-view-diff'.
Juri Linkov <juri@jurta.org>
diff
changeset
|
234 (goto-char end)
|
4804f7b39bfe
(log-view-minor-wrap): Use the same logic to get revisions as `log-view-diff'.
Juri Linkov <juri@jurta.org>
diff
changeset
|
235 (log-view-msg-next)
|
4804f7b39bfe
(log-view-minor-wrap): Use the same logic to get revisions as `log-view-diff'.
Juri Linkov <juri@jurta.org>
diff
changeset
|
236 (setq to (log-view-current-tag))))
|
4804f7b39bfe
(log-view-minor-wrap): Use the same logic to get revisions as `log-view-diff'.
Juri Linkov <juri@jurta.org>
diff
changeset
|
237 (cons
|
68370
|
238 ;; The first revision has to be the one at point, for
|
|
239 ;; operations that only take one revision
|
|
240 ;; (e.g. cvs-mode-edit).
|
|
241 (cons (log-view-current-file) fr)
|
|
242 (cons (log-view-current-file) to))))))
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
243 (let ((cvs-branch-prefix (cdar data))
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
244 (cvs-secondary-branch-prefix (and (cdar data) (cddr data)))
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
245 (cvs-minor-current-files
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
246 (cons (caar data)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
247 (when (and (cadr data) (not (equal (caar data) (cadr data))))
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
248 (list (cadr data)))))
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
249 ;; FIXME: I need to force because the fileinfos are UNKNOWN
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
250 (cvs-force-command "/F"))
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
251 (funcall f))))
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
252
|
41557
|
253 (defun log-view-find-version (pos)
|
|
254 "Visit the version at point."
|
|
255 (interactive "d")
|
|
256 (save-excursion
|
|
257 (goto-char pos)
|
49597
|
258 (switch-to-buffer (vc-find-version (log-view-current-file)
|
41557
|
259 (log-view-current-tag)))))
|
|
260
|
42074
|
261 ;;
|
|
262 ;; diff
|
|
263 ;;
|
40958
|
264
|
|
265 (defun log-view-diff (beg end)
|
67569
|
266 "Get the diff between two revisions.
|
|
267 If the mark is not active or the mark is on the revision at point,
|
|
268 get the diff between the revision at point and its previous revision.
|
|
269 Otherwise, get the diff between the revisions where the region starts
|
|
270 and ends."
|
55175
|
271 (interactive
|
|
272 (list (if mark-active (region-beginning) (point))
|
|
273 (if mark-active (region-end) (point))))
|
40958
|
274 (let ((fr (log-view-current-tag beg))
|
|
275 (to (log-view-current-tag end)))
|
|
276 (when (string-equal fr to)
|
|
277 (save-excursion
|
|
278 (goto-char end)
|
|
279 (log-view-msg-next)
|
|
280 (setq to (log-view-current-tag))))
|
|
281 (vc-version-diff (log-view-current-file) to fr)))
|
|
282
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
283 (provide 'log-view)
|
28251
|
284
|
60145
|
285 ;; arch-tag: 0d64220b-ce7e-4f62-9c2a-6b04c2f81f4f
|
28088
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
286 ;;; log-view.el ends here
|