annotate lisp/pcvs-parse.el @ 55434:f88632e54afb

2004-05-08 John Wiegley <johnw@newartisans.com> * iswitchb.el (iswitchb-use-virtual-buffers): Added support for "virtual buffers" (off by default), which makes it possible to switch to the buffers of recently files. When a buffer name search fails, and this option is on, iswitchb will look at the list of recently visited files, and permit matching against those names. When the user hits RET on a match, it will revisit that file. (iswitchb-read-buffer): Added two optional arguments, which makes isearchb.el possible. (iswitchb-completions, iswitchb-set-matches, iswitchb-prev-match, iswitchb-next-match): Added support for virtual buffers.
author John Wiegley <johnw@newartisans.com>
date Sat, 08 May 2004 13:00:52 +0000
parents 695cf19ef79e
children fcf62a4ca08d 375f2633d815
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: 37337
diff changeset
1 ;;; pcvs-parse.el --- the CVS output parser
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2
50957
4f526428ef19 (cvs-parse-table): `New directory' messages include the full path.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50930
diff changeset
3 ;; Copyright (C) 1991,92,93,94,95,96,97,98,99,2000,02,2003
45998
124e2db60fc7 (cvs-parse-table): Handle `nothing known about' with more care.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43974
diff changeset
4 ;; 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: Stefan Monnier <monnier@cs.yale.edu>
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
7 ;; Keywords: pcl-cvs
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
8
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
10
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
14 ;; any later version.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
15
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
16 ;; 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
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
19 ;; GNU General Public License for more details.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
20
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
24 ;; Boston, MA 02111-1307, USA.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
25
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
26 ;;; Commentary:
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
27
36612
4d41a2e49d39 (cvs-parse-table): Add another ignored message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34652
diff changeset
28 ;;; Bugs:
4d41a2e49d39 (cvs-parse-table): Add another ignored message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34652
diff changeset
29
4d41a2e49d39 (cvs-parse-table): Add another ignored message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34652
diff changeset
30 ;; - when merging a modified file, if the merge says that the file already
4d41a2e49d39 (cvs-parse-table): Add another ignored message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34652
diff changeset
31 ;; contained in the changes, it marks the file as `up-to-date' although
4d41a2e49d39 (cvs-parse-table): Add another ignored message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34652
diff changeset
32 ;; it might still contain further changes.
4d41a2e49d39 (cvs-parse-table): Add another ignored message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34652
diff changeset
33 ;; Example: merging a zero-change commit.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
34
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
35 ;;; Code:
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
36
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
37 (eval-when-compile (require 'cl))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
38
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
39 (require 'pcvs-util)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
40 (require 'pcvs-info)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
41
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
42 ;; imported from pcvs.el
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
43 (defvar cvs-execute-single-dir)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
44
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
45 ;; parse vars
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
46
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
47 (defcustom cvs-update-prog-output-skip-regexp "$"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
48 "*A regexp that matches the end of the output from all cvs update programs.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
49 That is, output from any programs that are run by CVS (by the flag -u
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
50 in the `modules' file - see cvs(5)) when `cvs update' is performed should
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
51 terminate with a line that this regexp matches. It is enough that
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
52 some part of the line is matched.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
53
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
54 The default (a single $) fits programs without output."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
55 :group 'pcl-cvs
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
56 :type '(regexp :value "$"))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
57
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
58 (defcustom cvs-parse-ignored-messages
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
59 '("Executing ssh-askpass to query the password.*$"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
60 ".*Remote host denied X11 forwarding.*$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
61 "*A list of regexps matching messages that should be ignored by the parser.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
62 Each regexp should match a whole set of lines and should hence be terminated
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
63 by `$'."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
64 :group 'pcl-cvs
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
65 :type '(repeat regexp))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
66
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
67 ;; a few more defvars just to shut up the compiler
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
68 (defvar cvs-start)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
69 (defvar cvs-current-dir)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
70 (defvar cvs-current-subdir)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
71 (defvar dont-change-disc)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
72
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
73 ;;;; The parser
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
74
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
75 (defconst cvs-parse-known-commands
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
76 '("status" "add" "commit" "update" "remove" "checkout" "ci")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
77 "List of CVS commands whose output is understood by the parser.")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
78
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
79 (defun cvs-parse-buffer (parse-spec dont-change-disc &optional subdir)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
80 "Parse current buffer according to PARSE-SPEC.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
81 PARSE-SPEC is a function of no argument advancing the point and returning
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
82 either a fileinfo or t (if the matched text should be ignored) or
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
83 nil if it didn't match anything.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
84 DONT-CHANGE-DISC just indicates whether the command was changing the disc
37337
00d515266792 (cvs-parse-run-table): Remove misleading text.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36612
diff changeset
85 or not (useful to tell the difference between `cvs-examine' and `cvs-update'
00d515266792 (cvs-parse-run-table): Remove misleading text.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36612
diff changeset
86 output.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
87 The path names should be interpreted as relative to SUBDIR (defaults
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
88 to the `default-directory').
37337
00d515266792 (cvs-parse-run-table): Remove misleading text.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36612
diff changeset
89 Return a list of collected entries, or t if an error occurred."
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
90 (goto-char (point-min))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
91 (let ((fileinfos ())
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
92 (cvs-current-dir "")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
93 (case-fold-search nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
94 (cvs-current-subdir (or subdir "")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
95 (while (not (or (eobp) (eq fileinfos t)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
96 (let ((ret (cvs-parse-run-table parse-spec)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
97 (cond
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
98 ;; it matched a known information message
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
99 ((cvs-fileinfo-p ret) (push ret fileinfos))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
100 ;; it didn't match anything at all (impossible)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
101 ((and (consp ret) (cvs-fileinfo-p (car ret)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
102 (setq fileinfos (append ret fileinfos)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
103 ((null ret) (setq fileinfos t))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
104 ;; it matched something that should be ignored
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
105 (t nil))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
106 (nreverse fileinfos)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
107
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
108
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
109 ;; All those parsing macros/functions should return a success indicator
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
110 (defsubst cvs-parse-msg () (buffer-substring cvs-start (1- (point))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
111
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
112 ;;(defsubst COLLECT (exp) (push exp *result*))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
113 ;;(defsubst PROG (e) t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
114 ;;(defmacro SEQ (&rest seqs) (cons 'and seqs))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
115
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
116 (defmacro cvs-match (re &rest matches)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
117 "Try to match RE and extract submatches.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
118 If RE matches, advance the point until the line after the match and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
119 then assign the variables as specified in MATCHES (via `setq')."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
120 (cons 'cvs-do-match
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
121 (cons re (mapcar (lambda (match)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
122 `(cons ',(first match) ,(second match)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
123 matches))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
124
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
125 (defun cvs-do-match (re &rest matches)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
126 "Internal function for the `cvs-match' macro.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
127 Match RE and if successful, execute MATCHES."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
128 ;; Is it a match?
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
129 (when (looking-at re)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
130 (goto-char (match-end 0))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
131 ;; Skip the newline (unless we already are at the end of the buffer).
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
132 (when (and (eolp) (< (point) (point-max))) (forward-char))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
133 ;; assign the matches
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
134 (dolist (match matches t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
135 (let ((val (cdr match)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
136 (set (car match) (if (integerp val) (match-string val) val))))))
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 (defmacro cvs-or (&rest alts)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
139 "Try each one of the ALTS alternatives until one matches."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
140 `(let ((-cvs-parse-point (point)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
141 ,(cons 'or
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
142 (mapcar (lambda (es)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
143 `(or ,es (ignore (goto-char -cvs-parse-point))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
144 alts))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
145 (def-edebug-spec cvs-or t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
146
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
147 ;; This is how parser tables should be executed
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
148 (defun cvs-parse-run-table (parse-spec)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
149 "Run PARSE-SPEC and provide sensible default behavior."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
150 (unless (bolp) (forward-line 1)) ;this should never be needed
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
151 (let ((cvs-start (point)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
152 (cvs-or
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
153 (funcall parse-spec)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
154
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
155 (dolist (re cvs-parse-ignored-messages)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
156 (when (cvs-match re) (return t)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
157
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
158 ;; This is a parse error. Create a message-type fileinfo.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
159 (and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
160 (cvs-match ".*$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
161 (cvs-create-fileinfo 'MESSAGE cvs-current-dir " "
37337
00d515266792 (cvs-parse-run-table): Remove misleading text.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36612
diff changeset
162 ;; (concat " Unknown msg: '"
00d515266792 (cvs-parse-run-table): Remove misleading text.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36612
diff changeset
163 (cvs-parse-msg) ;; "'")
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
164 :subtype 'ERROR)))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
165
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
166
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
167 (defun cvs-parsed-fileinfo (type path &optional directory &rest keys)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
168 "Create a fileinfo.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
169 TYPE can either be a type symbol or a cons of the form (TYPE . SUBTYPE).
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
170 PATH is the filename.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
171 DIRECTORY influences the way PATH is interpreted:
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
172 - if it's a string, it denotes the directory in which PATH (which should then be
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
173 a plain file name with no directory component) resides.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
174 - if it's nil, the PATH should not be trusted: if it has a directory
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
175 component, use it, else, assume it is relative to the current directory.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
176 - else, the PATH should be trusted to be relative to the root
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
177 directory (i.e. if there is no directory component, it means the file
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
178 is inside the main directory).
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
179 The remaining KEYS are passed directly to `cvs-create-fileinfo'."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
180 (let ((dir directory)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
181 (file path))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
182 ;; only trust the directory if it's a string
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
183 (unless (stringp directory)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
184 ;; else, if the directory is true, the path should be trusted
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
185 (setq dir (or (file-name-directory path) (if directory "")))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
186 (setq file (file-name-nondirectory path)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
187
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
188 (let ((type (if (consp type) (car type) type))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
189 (subtype (if (consp type) (cdr type))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
190 (when dir (setq cvs-current-dir dir))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
191 (apply 'cvs-create-fileinfo type
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
192 (concat cvs-current-subdir (or dir cvs-current-dir))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
193 file (cvs-parse-msg) :subtype subtype keys))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
194
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
195 ;;;; CVS Process Parser Tables:
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 ;;;; The table for status and update could actually be merged since they
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
198 ;;;; don't conflict. But they don't overlap much either.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
199
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
200 (defun cvs-parse-table ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
201 "Table of message objects for `cvs-parse-process'."
50990
b51c3d855e30 (cvs-parse-table): Remove unused var `type'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50957
diff changeset
202 (let (c file dir path base-rev subtype)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
203 (cvs-or
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47210
diff changeset
204
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
205 (cvs-parse-status)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
206 (cvs-parse-merge)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
207 (cvs-parse-commit)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
208
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
209 ;; this is not necessary because the fileinfo merging will remove
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
210 ;; such duplicate info and luckily the second info is the one we want.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
211 ;; (and (cvs-match "M \\(.*\\)$" (path 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
212 ;; (cvs-parse-merge path))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47210
diff changeset
213
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
214 ;; Normal file state indicator.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
215 (and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
216 (cvs-match "\\([MARCUPNJ?]\\) \\(.*\\)$" (c 1) (path 2))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
217 ;; M: The file is modified by the user, and untouched in the repository.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
218 ;; A: The file is "cvs add"ed, but not "cvs ci"ed.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
219 ;; R: The file is "cvs remove"ed, but not "cvs ci"ed.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
220 ;; C: Conflict
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
221 ;; U: The file is copied from the repository.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
222 ;; P: The file was patched from the repository.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
223 ;; ?: Unknown file.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
224 (let ((code (aref c 0)))
29565
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
225 (cvs-parsed-fileinfo
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
226 (case code
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
227 (?M 'MODIFIED)
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
228 (?A 'ADDED)
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
229 (?R 'REMOVED)
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
230 (?? 'UNKNOWN)
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
231 (?C
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
232 (if (not dont-change-disc) 'CONFLICT
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
233 ;; This is ambiguous. We should look for conflict markers in the
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
234 ;; file to decide between CONFLICT and NEED-MERGE. With CVS-1.10
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
235 ;; servers, this should not be necessary, because they return
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
236 ;; a complete merge output.
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
237 (with-temp-buffer
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
238 (insert-file-contents path)
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
239 (goto-char (point-min))
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
240 (if (re-search-forward "^<<<<<<< " nil t)
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
241 'CONFLICT 'NEED-MERGE))))
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
242 (?J 'NEED-MERGE) ;not supported by standard CVS
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
243 ((?U ?P)
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
244 (if dont-change-disc 'NEED-UPDATE
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
245 (cons 'UP-TO-DATE (if (eq code ?U) 'UPDATED 'PATCHED)))))
a5845156564d (cvs-parse-table): Look for conflict markers in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
246 path 'trust)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
247
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
248 (and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
249 (cvs-match "pcl-cvs: descending directory \\(.*\\)$" (dir 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
250 (setq cvs-current-subdir dir))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
251
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
252 ;; A special cvs message
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
253 (and
43974
36f11755a3d6 (cvs-parse-table): Be a bit more lenient.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39419
diff changeset
254 (let ((case-fold-search t))
36f11755a3d6 (cvs-parse-table): Be a bit more lenient.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39419
diff changeset
255 (cvs-match "cvs[.a-z]* [a-z]+: "))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
256 (cvs-or
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
257
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
258 ;; CVS is descending a subdirectory
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
259 ;; (status says `examining' while update says `updating')
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
260 (and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
261 (cvs-match "\\(Examining\\|Updating\\) \\(.*\\)$" (dir 2))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
262 (let ((dir (if (string= "." dir) "" (file-name-as-directory dir))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
263 (cvs-parsed-fileinfo 'DIRCHANGE "." dir)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
264
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
265 ;; [-n update] A new (or pruned) directory appeared but isn't traversed
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
266 (and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
267 (cvs-match "New directory `\\(.*\\)' -- ignored$" (dir 1))
47210
47f646d9e151 (cvs-parse-table): Create a `need-update'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45998
diff changeset
268 ;; (cvs-parsed-fileinfo 'MESSAGE " " (file-name-as-directory dir))
50990
b51c3d855e30 (cvs-parse-table): Remove unused var `type'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50957
diff changeset
269 ;; These messages either correspond to a true new directory
b51c3d855e30 (cvs-parse-table): Remove unused var `type'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50957
diff changeset
270 ;; that an update will bring in, or to a directory that's empty
b51c3d855e30 (cvs-parse-table): Remove unused var `type'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50957
diff changeset
271 ;; on the current branch (either because it only exists in other
b51c3d855e30 (cvs-parse-table): Remove unused var `type'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50957
diff changeset
272 ;; branches, or because it's been removed).
b51c3d855e30 (cvs-parse-table): Remove unused var `type'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50957
diff changeset
273 (if (ignore-errors
b51c3d855e30 (cvs-parse-table): Remove unused var `type'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50957
diff changeset
274 (with-current-buffer
b51c3d855e30 (cvs-parse-table): Remove unused var `type'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50957
diff changeset
275 (find-file-noselect (expand-file-name
b51c3d855e30 (cvs-parse-table): Remove unused var `type'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50957
diff changeset
276 ".cvsignore" (file-name-directory dir)))
b51c3d855e30 (cvs-parse-table): Remove unused var `type'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50957
diff changeset
277 (goto-char (point-min))
b51c3d855e30 (cvs-parse-table): Remove unused var `type'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50957
diff changeset
278 (re-search-forward
b51c3d855e30 (cvs-parse-table): Remove unused var `type'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50957
diff changeset
279 (concat "^" (regexp-quote (file-name-nondirectory dir)) "/$")
b51c3d855e30 (cvs-parse-table): Remove unused var `type'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50957
diff changeset
280 nil t)))
b51c3d855e30 (cvs-parse-table): Remove unused var `type'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50957
diff changeset
281 t ;The user requested to ignore those messages.
b51c3d855e30 (cvs-parse-table): Remove unused var `type'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50957
diff changeset
282 (cvs-parsed-fileinfo '(NEED-UPDATE . NEW-DIR) dir t)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
283
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
284 ;; File removed, since it is removed (by third party) in repository.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
285 (and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
286 (cvs-or
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
287 (cvs-match "warning: \\(.*\\) is not (any longer) pertinent$" (file 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
288 (cvs-match "\\(.*\\) is no longer in the repository$" (file 1)))
49689
278d7d142185 (cvs-parse-table): "no longer in repo" does not
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49597
diff changeset
289 (cvs-parsed-fileinfo
278d7d142185 (cvs-parse-table): "no longer in repo" does not
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49597
diff changeset
290 (if dont-change-disc '(NEED-UPDATE . REMOVED) 'DEAD) file))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
291
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
292 ;; [add]
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
293 (and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
294 (cvs-or
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
295 (cvs-match "scheduling file `\\(.*\\)' for addition.*$" (path 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
296 (cvs-match "re-adding file \\(.*\\) (in place of .*)$" (path 1)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
297 (cvs-parsed-fileinfo 'ADDED path))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
298
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
299 ;; [add] this will also show up as a `U <file>'
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
300 (and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
301 (cvs-match "\\(.*\\), version \\(.*\\), resurrected$"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
302 (path 1) (base-rev 2))
47210
47f646d9e151 (cvs-parse-table): Create a `need-update'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45998
diff changeset
303 ;; FIXME: resurrection only brings back the original version,
47f646d9e151 (cvs-parse-table): Create a `need-update'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45998
diff changeset
304 ;; not the latest on the branch, so `up-to-date' is not always
47f646d9e151 (cvs-parse-table): Create a `need-update'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45998
diff changeset
305 ;; what we want.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
306 (cvs-parsed-fileinfo '(UP-TO-DATE . RESURRECTED) path nil
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
307 :base-rev base-rev))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
308
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
309 ;; [remove]
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
310 (and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
311 (cvs-match "removed `\\(.*\\)'$" (path 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
312 (cvs-parsed-fileinfo 'DEAD path))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
313
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
314 ;; [remove,merge]
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
315 (and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
316 (cvs-match "scheduling `\\(.*\\)' for removal$" (file 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
317 (cvs-parsed-fileinfo 'REMOVED file))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
318
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
319 ;; [update] File removed by you, but not cvs rm'd
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
320 (and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
321 (cvs-match "warning: \\(.*\\) was lost$" (path 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
322 (cvs-match (concat "U " (regexp-quote path) "$"))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
323 (cvs-parsed-fileinfo (if dont-change-disc
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
324 'MISSING
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
325 '(UP-TO-DATE . UPDATED))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
326 path))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47210
diff changeset
327
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
328 ;; Mode conflicts (rather than contents)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
329 (and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
330 (cvs-match "conflict: ")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
331 (cvs-or
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
332 (cvs-match "removed \\(.*\\) was modified by second party$"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
333 (path 1) (subtype 'REMOVED))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
334 (cvs-match "\\(.*\\) created independently by second party$"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
335 (path 1) (subtype 'ADDED))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
336 (cvs-match "\\(.*\\) is modified but no longer in the repository$"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
337 (path 1) (subtype 'MODIFIED)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
338 (cvs-match (concat "C " (regexp-quote path)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
339 (cvs-parsed-fileinfo (cons 'CONFLICT subtype) path))
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 ;; Messages that should be shown to the user
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
342 (and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
343 (cvs-or
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
344 (cvs-match "move away \\(.*\\); it is in the way$" (file 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
345 (cvs-match "warning: new-born \\(.*\\) has disappeared$" (file 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
346 (cvs-match "sticky tag .* for file `\\(.*\\)' is not a branch$"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
347 (file 1)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
348 (cvs-parsed-fileinfo 'MESSAGE file))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47210
diff changeset
349
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
350 ;; File unknown.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
351 (and (cvs-match "use `.+ add' to create an entry for \\(.*\\)$" (path 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
352 (cvs-parsed-fileinfo 'UNKNOWN path))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
353
28256
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
354 ;; [commit]
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
355 (and (cvs-match "Up-to-date check failed for `\\(.+\\)'$" (file 1))
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
356 (cvs-parsed-fileinfo 'NEED-MERGE file))
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
357
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
358 ;; We use cvs-execute-multi-dir but cvs can't handle it
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
359 ;; Probably because the cvs-client can but the cvs-server can't
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
360 (and (cvs-match ".* files with '?/'? in their name.*$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
361 (not cvs-execute-single-dir)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
362 (setq cvs-execute-single-dir t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
363 (cvs-create-fileinfo
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
364 'MESSAGE "" " "
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
365 "*** Add (setq cvs-execute-single-dir t) to your .emacs ***
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
366 See the FAQ file or the variable's documentation for more info."))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47210
diff changeset
367
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
368 ;; Cvs waits for a lock. Ignored: already handled by the process filter
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
369 (cvs-match "\\[..:..:..\\] \\(waiting for\\|obtained\\) .*lock in .*$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
370 ;; File you removed still exists. Ignore (will be noted as removed).
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
371 (cvs-match ".* should be removed and is still there$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
372 ;; just a note
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
373 (cvs-match "use '.+ commit' to \\sw+ th\\sw+ files? permanently$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
374 ;; [add,status] followed by a more complete status description anyway
45998
124e2db60fc7 (cvs-parse-table): Handle `nothing known about' with more care.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43974
diff changeset
375 (and (cvs-match "nothing known about \\(.*\\)$" (path 1))
124e2db60fc7 (cvs-parse-table): Handle `nothing known about' with more care.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43974
diff changeset
376 (cvs-parsed-fileinfo 'DEAD path 'trust))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
377 ;; [update] problem with patch
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
378 (cvs-match "checksum failure after patch to .*; will refetch$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
379 (cvs-match "refetching unpatchable files$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
380 ;; [commit]
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
381 (cvs-match "Rebuilding administrative file database$")
36612
4d41a2e49d39 (cvs-parse-table): Add another ignored message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34652
diff changeset
382 ;; ???
4d41a2e49d39 (cvs-parse-table): Add another ignored message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34652
diff changeset
383 (cvs-match "--> Using per-directory sticky tag `.*'")
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47210
diff changeset
384
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
385 ;; CVS is running a *info program.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
386 (and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
387 (cvs-match "Executing.*$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
388 ;; Skip by any output the program may generate to stdout.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
389 ;; Note that pcl-cvs will get seriously confused if the
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
390 ;; program prints anything to stderr.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
391 (re-search-forward cvs-update-prog-output-skip-regexp))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
392
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
393 (and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
394 (cvs-match "cvs[.ex]* \\[[a-z]+ aborted\\]:.*$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
395 (cvs-parsed-fileinfo 'MESSAGE ""))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47210
diff changeset
396
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
397 ;; sadly you can't do much with these since the path is in the repository
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
398 (cvs-match "Directory .* added to the repository$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
399 )))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
400
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
401
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
402 (defun cvs-parse-merge ()
50990
b51c3d855e30 (cvs-parse-table): Remove unused var `type'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50957
diff changeset
403 (let (path base-rev head-rev type)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
404 ;; A merge (maybe with a conflict).
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
405 (and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
406 (cvs-match "RCS file: .*$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
407 ;; Squirrel away info about the files that were retrieved for merging
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
408 (cvs-match "retrieving revision \\([0-9.]+\\)$" (base-rev 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
409 (cvs-match "retrieving revision \\([0-9.]+\\)$" (head-rev 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
410 (cvs-match "Merging differences between [0-9.]+ and [0-9.]+ into \\(.*\\)$"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
411 (path 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
412
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
413 ;; eat up potential conflict warnings
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
414 (cvs-or (cvs-match "\\(rcs\\)?merge:?\\( warning\\)?: \\(overlaps\\|conflicts\\) \\(or other problems \\)?during merge$" (type 'CONFLICT)) t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
415 (cvs-or
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
416 (and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
417 (cvs-match "cvs[.ex]* [a-z]+: ")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
418 (cvs-or
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
419 (cvs-match "conflicts found in \\(.*\\)$" (path 1) (type 'CONFLICT))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
420 (cvs-match "could not merge .*$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
421 (cvs-match "restoring \\(.*\\) from backup file .*$" (path 1))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
422 t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
423
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
424 ;; Is it a succesful merge?
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
425 ;; Figure out result of merging (ie, was there a conflict?)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
426 (let ((qfile (regexp-quote path)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
427 (cvs-or
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
428 ;; Conflict
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
429 (and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
430 (cvs-match (concat "C \\(.*" qfile "\\)$") (path 1) (type 'CONFLICT))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
431 ;; C might be followed by a "suprious" U for non-mergeable files
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
432 (cvs-or (cvs-match (concat "U \\(.*" qfile "\\)$")) t))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
433 ;; Successful merge
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
434 (cvs-match (concat "M \\(.*" qfile "\\)$") (path 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
435 ;; The file already contained the modifications
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
436 (cvs-match (concat "^\\(.*" qfile
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
437 "\\) already contains the differences between .*$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
438 (path 1) (type '(UP-TO-DATE . MERGED)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
439 t)
36612
4d41a2e49d39 (cvs-parse-table): Add another ignored message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34652
diff changeset
440 ;; FIXME: PATH might not be set yet. Sometimes the only path
4d41a2e49d39 (cvs-parse-table): Add another ignored message.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 34652
diff changeset
441 ;; information is in `RCS file: ...' (yuck!!).
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
442 (cvs-parsed-fileinfo (if dont-change-disc 'NEED-MERGE
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
443 (or type '(MODIFIED . MERGED))) path nil
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
444 :merge (cons base-rev head-rev))))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
445
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
446 (defun cvs-parse-status ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
447 (let (nofile path base-rev head-rev type)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
448 (and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
449 (cvs-match
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
450 "===================================================================$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
451 (cvs-match "File: \\(no file \\)?\\(.*[^ \t]\\)[ \t]+Status: "
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
452 (nofile 1) (path 2))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
453 (cvs-or
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
454 (cvs-match "Needs \\(Checkout\\|Patch\\)$"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
455 (type (if nofile 'MISSING 'NEED-UPDATE)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
456 (cvs-match "Up-to-date$"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
457 (type (if nofile '(UP-TO-DATE . REMOVED) 'UP-TO-DATE)))
43974
36f11755a3d6 (cvs-parse-table): Be a bit more lenient.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39419
diff changeset
458 (cvs-match "File had conflicts on merge$" (type 'MODIFIED))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
459 (cvs-match ".*[Cc]onflict.*$" (type 'CONFLICT))
51736
3c7354593959 (cvs-parse-status): Ignore extra fields from CVSNT.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50990
diff changeset
460 (cvs-match "Locally Added$" (type 'ADDED))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
461 (cvs-match "Locally Removed$" (type 'REMOVED))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
462 (cvs-match "Locally Modified$" (type 'MODIFIED))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
463 (cvs-match "Needs Merge$" (type 'NEED-MERGE))
47210
47f646d9e151 (cvs-parse-table): Create a `need-update'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45998
diff changeset
464 (cvs-match "Entry Invalid" (type '(NEED-MERGE . REMOVED)))
51736
3c7354593959 (cvs-parse-status): Ignore extra fields from CVSNT.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50990
diff changeset
465 (cvs-match ".*$" (type 'UNKNOWN)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
466 (cvs-match "$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
467 (cvs-or
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
468 (cvs-match " *Version:[ \t]*\\([0-9.]+\\).*$" (base-rev 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
469 ;; NOTE: there's no date on the end of the following for server mode...
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
470 (cvs-match " *Working revision:[ \t]*-?\\([0-9.]+\\).*$" (base-rev 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
471 ;; Let's not get all worked up if the format changes a bit
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
472 (cvs-match " *Working revision:.*$"))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
473 (cvs-or
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
474 (cvs-match " *RCS Version:[ \t]*\\([0-9.]+\\)[ \t]*.*$" (head-rev 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
475 (cvs-match " *Repository revision:[ \t]*\\([0-9.]+\\)[ \t]*\\(.*\\)$"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
476 (head-rev 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
477 (cvs-match " *Repository revision:.*"))
51736
3c7354593959 (cvs-parse-status): Ignore extra fields from CVSNT.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50990
diff changeset
478 (cvs-or (cvs-match " *Expansion option:.*") t) ;Optional CVSNT thingie.
3c7354593959 (cvs-parse-status): Ignore extra fields from CVSNT.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50990
diff changeset
479 (cvs-or (cvs-match " *Commit Identifier:.*") t) ;Optional CVSNT thingie.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
480 (cvs-or
51736
3c7354593959 (cvs-parse-status): Ignore extra fields from CVSNT.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50990
diff changeset
481 (and ;; Sometimes those fields are missing.
3c7354593959 (cvs-parse-status): Ignore extra fields from CVSNT.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50990
diff changeset
482 (cvs-match " *Sticky Tag:[ \t]*\\(.*\\)$") ; FIXME: use it.
3c7354593959 (cvs-parse-status): Ignore extra fields from CVSNT.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50990
diff changeset
483 (cvs-match " *Sticky Date:[ \t]*\\(.*\\)$") ; FIXME: use it.
3c7354593959 (cvs-parse-status): Ignore extra fields from CVSNT.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50990
diff changeset
484 (cvs-match " *Sticky Options:[ \t]*\\(.*\\)$")) ; FIXME: use it.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
485 t)
51736
3c7354593959 (cvs-parse-status): Ignore extra fields from CVSNT.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50990
diff changeset
486 (cvs-or (cvs-match " *Merge From:.*") t) ;Optional CVSNT thingie.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
487 (cvs-match "$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
488 ;; ignore the tags-listing in the case of `status -v'
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
489 (cvs-or (cvs-match " *Existing Tags:\n\\(\t.*\n\\)*$") t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
490 (cvs-parsed-fileinfo type path nil
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
491 :base-rev base-rev
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
492 :head-rev head-rev))))
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 (defun cvs-parse-commit ()
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
495 (let (path base-rev subtype)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
496 (cvs-or
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 (and
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
499 (cvs-match "\\(Checking in\\|Removing\\) \\(.*\\);$" (path 2))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
500 (cvs-match ".*,v <-- .*$")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
501 (cvs-or
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
502 ;; deletion
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
503 (cvs-match "new revision: delete; previous revision: \\([0-9.]*\\)$"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
504 (subtype 'REMOVED) (base-rev 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
505 ;; addition
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
506 (cvs-match "initial revision: \\([0-9.]*\\)$"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
507 (subtype 'ADDED) (base-rev 1))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
508 ;; update
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
509 (cvs-match "new revision: \\([0-9.]*\\); previous revision: .*$"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
510 (subtype 'COMMITTED) (base-rev 1)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
511 (cvs-match "done$")
39391
81cef0e070fa (cvs-parse-commit): Remove the temp files used by VC.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38422
diff changeset
512 (progn
81cef0e070fa (cvs-parse-commit): Remove the temp files used by VC.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38422
diff changeset
513 ;; Try to remove the temp files used by VC.
39419
0c69deb41e8a (cvs-parse-commit): Expand the file name before passing it to VC.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39391
diff changeset
514 (vc-delete-automatic-version-backups (expand-file-name path))
39391
81cef0e070fa (cvs-parse-commit): Remove the temp files used by VC.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38422
diff changeset
515 ;; it's important here not to rely on the default directory management
81cef0e070fa (cvs-parse-commit): Remove the temp files used by VC.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38422
diff changeset
516 ;; because `cvs commit' might begin by a series of Examining messages
81cef0e070fa (cvs-parse-commit): Remove the temp files used by VC.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38422
diff changeset
517 ;; so the processing of the actual checkin messages might begin with
81cef0e070fa (cvs-parse-commit): Remove the temp files used by VC.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38422
diff changeset
518 ;; a `current-dir' set to something different from ""
81cef0e070fa (cvs-parse-commit): Remove the temp files used by VC.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38422
diff changeset
519 (cvs-parsed-fileinfo (cons 'UP-TO-DATE subtype) path 'trust
81cef0e070fa (cvs-parse-commit): Remove the temp files used by VC.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38422
diff changeset
520 :base-rev base-rev)))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47210
diff changeset
521
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
522 ;; useless message added before the actual addition: ignored
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
523 (cvs-match "RCS file: .*\ndone$"))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
524
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
525
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
526 (provide 'pcvs-parse)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
527
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51736
diff changeset
528 ;;; arch-tag: 35418375-1a23-40a0-957d-96b0262f91d6
38422
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 37337
diff changeset
529 ;;; pcvs-parse.el ends here