annotate lisp/pcvs-info.el @ 76533:338aa54d148f

*** empty log message ***
author Nick Roberts <nickrob@snap.net.nz>
date Sun, 18 Mar 2007 04:54:51 +0000
parents e3694f1cb928
children 6ad309ee5f4e 95d0cdf160ea
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: 34652
diff changeset
1 ;;; pcvs-info.el --- internal representation of a fileinfo entry
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2
56955
53103758d397 (cvs-states): Allow `ignore' on NEED-UPDATE.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54871
diff changeset
3 ;; Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
75347
e3694f1cb928 Add 2007 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 74442
diff changeset
4 ;; 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
5
70292
2b77fa42947f Update my email address.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68651
diff changeset
6 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
28088
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
64091
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63209
diff changeset
23 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63209
diff changeset
24 ;; Boston, MA 02110-1301, USA.
28088
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
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
28 ;; The cvs-fileinfo data structure:
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
29 ;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
30 ;; When the `cvs update' is ready we parse the output. Every file
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
31 ;; that is affected in some way is added to the cookie collection as
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
32 ;; a "fileinfo" (as defined below in cvs-create-fileinfo).
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
33
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
34 ;;; Code:
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
35
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
36 (eval-when-compile (require 'cl))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
37 (require 'pcvs-util)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
38 ;;(require 'pcvs-defs)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
39
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
40 ;;;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
41 ;;;; config variables
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
42 ;;;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
43
61866
37400c7baa6c Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61394
diff changeset
44 (defcustom cvs-display-full-name t
37400c7baa6c Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61394
diff changeset
45 "*Specifies how the filenames should be displayed in the listing.
37400c7baa6c Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61394
diff changeset
46 If non-nil, their full filename name will be displayed, else only the
37400c7baa6c Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61394
diff changeset
47 non-directory part."
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
48 :group 'pcl-cvs
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
49 :type '(boolean))
61866
37400c7baa6c Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61394
diff changeset
50 (define-obsolete-variable-alias 'cvs-display-full-path 'cvs-display-full-name)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
51
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
52 (defcustom cvs-allow-dir-commit nil
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
53 "*Allow `cvs-mode-commit' on directories.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
54 If you commit without any marked file and with the cursor positioned
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
55 on a directory entry, cvs would commit the whole directory. This seems
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
56 to confuse some users sometimes."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
57 :group 'pcl-cvs
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
58 :type '(boolean))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
59
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
60 ;;;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
61 ;;;; Faces for fontification
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
62 ;;;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
63
63209
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
64 (defface cvs-header
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
65 '((((class color) (background dark))
42455
7662f312caf2 (various face definitions): Use :weight and :slant.
Richard M. Stallman <rms@gnu.org>
parents: 38422
diff changeset
66 (:foreground "lightyellow" :weight bold))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
67 (((class color) (background light))
42455
7662f312caf2 (various face definitions): Use :weight and :slant.
Richard M. Stallman <rms@gnu.org>
parents: 38422
diff changeset
68 (:foreground "blue4" :weight bold))
7662f312caf2 (various face definitions): Use :weight and :slant.
Richard M. Stallman <rms@gnu.org>
parents: 38422
diff changeset
69 (t (:weight bold)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
70 "PCL-CVS face used to highlight directory changes."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
71 :group 'pcl-cvs)
63209
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
72 ;; backward-compatibility alias
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
73 (put 'cvs-header-face 'face-alias 'cvs-header)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
74
63209
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
75 (defface cvs-filename
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
76 '((((class color) (background dark))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
77 (:foreground "lightblue"))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
78 (((class color) (background light))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
79 (:foreground "blue4"))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
80 (t ()))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
81 "PCL-CVS face used to highlight file names."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
82 :group 'pcl-cvs)
63209
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
83 ;; backward-compatibility alias
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
84 (put 'cvs-filename-face 'face-alias 'cvs-filename)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
85
63209
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
86 (defface cvs-unknown
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
87 '((((class color) (background dark))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
88 (:foreground "red"))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
89 (((class color) (background light))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
90 (:foreground "red"))
42455
7662f312caf2 (various face definitions): Use :weight and :slant.
Richard M. Stallman <rms@gnu.org>
parents: 38422
diff changeset
91 (t (:slant italic)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
92 "PCL-CVS face used to highlight unknown file status."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
93 :group 'pcl-cvs)
63209
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
94 ;; backward-compatibility alias
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
95 (put 'cvs-unknown-face 'face-alias 'cvs-unknown)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
96
63209
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
97 (defface cvs-handled
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
98 '((((class color) (background dark))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
99 (:foreground "pink"))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
100 (((class color) (background light))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
101 (:foreground "pink"))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
102 (t ()))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
103 "PCL-CVS face used to highlight handled file status."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
104 :group 'pcl-cvs)
63209
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
105 ;; backward-compatibility alias
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
106 (put 'cvs-handled-face 'face-alias 'cvs-handled)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
107
63209
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
108 (defface cvs-need-action
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
109 '((((class color) (background dark))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
110 (:foreground "orange"))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
111 (((class color) (background light))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
112 (:foreground "orange"))
42455
7662f312caf2 (various face definitions): Use :weight and :slant.
Richard M. Stallman <rms@gnu.org>
parents: 38422
diff changeset
113 (t (:slant italic)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
114 "PCL-CVS face used to highlight status of files needing action."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
115 :group 'pcl-cvs)
63209
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
116 ;; backward-compatibility alias
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
117 (put 'cvs-need-action-face 'face-alias 'cvs-need-action)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
118
63209
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
119 (defface cvs-marked
61394
31aa9a390538 * mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents: 56955
diff changeset
120 '((((min-colors 88) (class color) (background dark))
31aa9a390538 * mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents: 56955
diff changeset
121 (:foreground "green1" :weight bold))
31aa9a390538 * mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents: 56955
diff changeset
122 (((class color) (background dark))
42455
7662f312caf2 (various face definitions): Use :weight and :slant.
Richard M. Stallman <rms@gnu.org>
parents: 38422
diff changeset
123 (:foreground "green" :weight bold))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
124 (((class color) (background light))
42455
7662f312caf2 (various face definitions): Use :weight and :slant.
Richard M. Stallman <rms@gnu.org>
parents: 38422
diff changeset
125 (:foreground "green3" :weight bold))
7662f312caf2 (various face definitions): Use :weight and :slant.
Richard M. Stallman <rms@gnu.org>
parents: 38422
diff changeset
126 (t (:weight bold)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
127 "PCL-CVS face used to highlight marked file indicator."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
128 :group 'pcl-cvs)
63209
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
129 ;; backward-compatibility alias
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
130 (put 'cvs-marked-face 'face-alias 'cvs-marked)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
131
63209
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
132 (defface cvs-msg
42455
7662f312caf2 (various face definitions): Use :weight and :slant.
Richard M. Stallman <rms@gnu.org>
parents: 38422
diff changeset
133 '((t (:slant italic)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
134 "PCL-CVS face used to highlight CVS messages."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
135 :group 'pcl-cvs)
63209
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
136 ;; backward-compatibility alias
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
137 (put 'cvs-msg-face 'face-alias 'cvs-msg)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
138
63209
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
139 (defvar cvs-fi-up-to-date-face 'cvs-handled)
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
140 (defvar cvs-fi-unknown-face 'cvs-unknown)
33431
5ca411467bf3 (cvs-fi-conflict-face): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29576
diff changeset
141 (defvar cvs-fi-conflict-face 'font-lock-warning-face)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
142
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
143 ;; There is normally no need to alter the following variable, but if
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
144 ;; your site has installed CVS in a non-standard way you might have
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
145 ;; to change it.
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 (defvar cvs-bakprefix ".#"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
148 "The prefix that CVS prepends to files when rcsmerge'ing.")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
149
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
150 (easy-mmode-defmap cvs-status-map
54871
22cdf6999b11 (cvs-status-map): Update binding name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54280
diff changeset
151 '(([(mouse-2)] . cvs-mode-toggle-mark))
29576
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
152 "Local keymap for text properties of status")
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
153
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
154 ;; Constructor:
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
155
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
156 (defstruct (cvs-fileinfo
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
157 (:constructor nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
158 (:copier nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
159 (:constructor -cvs-create-fileinfo (type dir file full-log
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
160 &key marked subtype
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
161 merge
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
162 base-rev
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
163 head-rev))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
164 (:conc-name cvs-fileinfo->))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
165 marked ;; t/nil.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
166 type ;; See below
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
167 subtype ;; See below
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
168 dir ;; Relative directory the file resides in.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
169 ;; (concat dir file) should give a valid path.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
170 file ;; The file name sans the directory.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
171 base-rev ;; During status: This is the revision that the
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
172 ;; working file is based on.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
173 head-rev ;; During status: This is the highest revision in
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
174 ;; the repository.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
175 merge ;; A cons cell containing the (ancestor . head) revisions
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
176 ;; of the merge that resulted in the current file.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
177 ;;removed ;; t if the file no longer exists.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
178 full-log ;; The output from cvs, unparsed.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
179 ;;mod-time ;; Not used.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
180
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
181 ;; In addition to the above, the following values can be extracted:
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
182
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
183 ;; handled ;; t if this file doesn't require further action.
61866
37400c7baa6c Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61394
diff changeset
184 ;; full-name ;; The complete relative filename.
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
185 ;; pp-name ;; The printed file name
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
186 ;; backup-file;; For MERGED and CONFLICT files after a \"cvs update\",
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
187 ;; this is a full path to the backup file where the
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
188 ;; untouched version resides.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
189
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
190 ;; The meaning of the type field:
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49237
diff changeset
191
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
192 ;; Value ---Used by--- Explanation
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
193 ;; update status
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
194 ;; NEED-UPDATE x file needs update
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
195 ;; MODIFIED x x modified by you, unchanged in repository
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
196 ;; MERGED x x successful merge
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
197 ;; ADDED x x added by you, not yet committed
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
198 ;; MISSING x rm'd, but not yet `cvs remove'd
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
199 ;; REMOVED x x removed by you, not yet committed
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
200 ;; NEED-MERGE x need merge
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
201 ;; CONFLICT x conflict when merging
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
202 ;; ;;MOD-CONFLICT x removed locally, changed in repository.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
203 ;; DIRCHANGE x x A change of directory.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
204 ;; UNKNOWN x An unknown file.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
205 ;; UP-TO-DATE x The file is up-to-date.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
206 ;; UPDATED x x file copied from repository
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
207 ;; PATCHED x x diff applied from repository
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
208 ;; COMMITTED x x cvs commit'd
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
209 ;; DEAD An entry that should be removed
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
210 ;; MESSAGE x x This is a special fileinfo that is used
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
211 ;; to display a text that should be in
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
212 ;; full-log."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
213 ;; TEMP A temporary message that should be removed
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
214 )
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
215 (defun cvs-create-fileinfo (type dir file msg &rest keys)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
216 (cvs-check-fileinfo (apply #'-cvs-create-fileinfo type dir file msg keys)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
217
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
218 ;; Fake selectors:
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
219
61866
37400c7baa6c Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61394
diff changeset
220 (defun cvs-fileinfo->full-name (fileinfo)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
221 "Return the full path for the file that is described in FILEINFO."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
222 (let ((dir (cvs-fileinfo->dir fileinfo)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
223 (if (eq (cvs-fileinfo->type fileinfo) 'DIRCHANGE)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
224 (if (string= dir "") "." (directory-file-name dir))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
225 ;; Here, I use `concat' rather than `expand-file-name' because I want
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
226 ;; the resulting path to stay relative if `dir' is relative.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
227 (concat dir (cvs-fileinfo->file fileinfo)))))
61866
37400c7baa6c Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61394
diff changeset
228 (define-obsolete-function-alias 'cvs-fileinfo->full-path 'cvs-fileinfo->full-name)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
229
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
230 (defun cvs-fileinfo->pp-name (fi)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
231 "Return the filename of FI as it should be displayed."
61866
37400c7baa6c Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61394
diff changeset
232 (if cvs-display-full-name
37400c7baa6c Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61394
diff changeset
233 (cvs-fileinfo->full-name fi)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
234 (cvs-fileinfo->file fi)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
235
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
236 (defun cvs-fileinfo->backup-file (fileinfo)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
237 "Construct the file name of the backup file for FILEINFO."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
238 (let* ((dir (cvs-fileinfo->dir fileinfo))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
239 (file (cvs-fileinfo->file fileinfo))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
240 (default-directory (file-name-as-directory (expand-file-name dir)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
241 (files (directory-files "." nil
54280
bfa320f698d6 (cvs-fileinfo->backup-file): Use a more constraining
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
242 (concat "\\`" (regexp-quote cvs-bakprefix)
bfa320f698d6 (cvs-fileinfo->backup-file): Use a more constraining
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
243 (regexp-quote file) "\\(\\.[0-9]+\\.[0-9]+\\)+\\'")))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
244 bf)
61866
37400c7baa6c Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61394
diff changeset
245 (dolist (f files)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
246 (when (and (file-readable-p f)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
247 (or (null bf) (file-newer-than-file-p f bf)))
61866
37400c7baa6c Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61394
diff changeset
248 (setq bf f)))
37400c7baa6c Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61394
diff changeset
249 (concat dir bf)))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
250
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
251 ;; (defun cvs-fileinfo->handled (fileinfo)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
252 ;; "Tell if this requires further action"
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
253 ;; (memq (cvs-fileinfo->type fileinfo) '(UP-TO-DATE DEAD)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
254
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
255
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
256 ;; Predicate:
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 (defun cvs-check-fileinfo (fi)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
259 "Check FI's conformance to some conventions."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
260 (let ((check 'none)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
261 (type (cvs-fileinfo->type fi))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
262 (subtype (cvs-fileinfo->subtype fi))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
263 (marked (cvs-fileinfo->marked fi))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
264 (dir (cvs-fileinfo->dir fi))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
265 (file (cvs-fileinfo->file fi))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
266 (base-rev (cvs-fileinfo->base-rev fi))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
267 (head-rev (cvs-fileinfo->head-rev fi))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
268 (full-log (cvs-fileinfo->full-log fi)))
47390
ff0e463ca59f (cvs-check-fileinfo): Don't use boolp.
Richard M. Stallman <rms@gnu.org>
parents: 45910
diff changeset
269 (if (and (setq check 'marked) (memq marked '(t nil))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
270 (setq check 'base-rev) (or (null base-rev) (stringp base-rev))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
271 (setq check 'head-rev) (or (null head-rev) (stringp head-rev))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
272 (setq check 'full-log) (stringp full-log)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
273 (setq check 'dir)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
274 (and (stringp dir)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
275 (not (file-name-absolute-p dir))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
276 (or (string= dir "")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
277 (string= dir (file-name-as-directory dir))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
278 (setq check 'file)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
279 (and (stringp file)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
280 (string= file (file-name-nondirectory file)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
281 (setq check 'type) (symbolp type)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
282 (setq check 'consistency)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
283 (case type
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
284 (DIRCHANGE (and (null subtype) (string= "." file)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
285 ((NEED-UPDATE ADDED MISSING DEAD MODIFIED MESSAGE UP-TO-DATE
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
286 REMOVED NEED-MERGE CONFLICT UNKNOWN MESSAGE)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
287 t)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
288 fi
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
289 (error "Invalid :%s in cvs-fileinfo %s" check fi))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
290
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
291
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49237
diff changeset
292 ;;;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
293 ;;;; State table to indicate what you can do when.
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49237
diff changeset
294 ;;;;
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
295
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
296 (defconst cvs-states
56955
53103758d397 (cvs-states): Allow `ignore' on NEED-UPDATE.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54871
diff changeset
297 `((NEED-UPDATE update diff ignore)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
298 (UP-TO-DATE update nil remove diff safe-rm revert)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
299 (MODIFIED update commit undo remove diff merge diff-base)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
300 (ADDED update commit remove)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
301 (MISSING remove undo update safe-rm revert)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
302 (REMOVED commit add undo safe-rm)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
303 (NEED-MERGE update undo diff diff-base)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
304 (CONFLICT merge remove undo commit diff diff-base)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
305 (DIRCHANGE remove update diff ,(if cvs-allow-dir-commit 'commit) tag)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
306 (UNKNOWN ignore add remove)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
307 (DEAD )
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
308 (MESSAGE))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
309 "Fileinfo state descriptions for pcl-cvs.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
310 This is an assoc list. Each element consists of (STATE . FUNS)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
311 - STATE (described in `cvs-create-fileinfo') is the key
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
312 - FUNS is the list of applicable operations.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
313 The first one (if any) should be the \"default\" action.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
314 Most of the actions have the obvious meaning.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
315 `safe-rm' indicates that the file can be removed without losing
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
316 any information.")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
317
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 ;;;; Utility functions
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
320 ;;;;
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
321
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
322 (defun cvs-applicable-p (fi-or-type func)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
323 "Check if FUNC is applicable to FI-OR-TYPE.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
324 If FUNC is nil, always return t.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
325 FI-OR-TYPE can either be a symbol (a fileinfo-type) or a fileinfo."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
326 (let ((type (if (symbolp fi-or-type) fi-or-type
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
327 (cvs-fileinfo->type fi-or-type))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
328 (and (not (eq type 'MESSAGE))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
329 (eq (car (memq func (cdr (assq type cvs-states)))) func))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
330
45903
bbb734dc35fd (cvs-add-face): Minor rewrite.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45841
diff changeset
331 (defun cvs-add-face (str face &optional keymap &rest props)
45910
32ed873c69a7 (cvs-add-face): Fix silly oversight.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45903
diff changeset
332 (when keymap
32ed873c69a7 (cvs-add-face): Fix silly oversight.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45903
diff changeset
333 (when (keymapp keymap)
32ed873c69a7 (cvs-add-face): Fix silly oversight.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45903
diff changeset
334 (setq props (list* 'keymap keymap props)))
32ed873c69a7 (cvs-add-face): Fix silly oversight.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45903
diff changeset
335 (setq props (list* 'mouse-face 'highlight props)))
32ed873c69a7 (cvs-add-face): Fix silly oversight.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45903
diff changeset
336 (add-text-properties 0 (length str) (list* 'font-lock-face face props) str)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
337 str)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
338
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
339 (defun cvs-fileinfo-pp (fileinfo)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
340 "Pretty print FILEINFO. Insert a printed representation in current buffer.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
341 For use by the cookie package."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
342 (cvs-check-fileinfo fileinfo)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
343 (let ((type (cvs-fileinfo->type fileinfo))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
344 (subtype (cvs-fileinfo->subtype fileinfo)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
345 (insert
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
346 (case type
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
347 (DIRCHANGE (concat "In directory "
61866
37400c7baa6c Rename "full-path" -> "full-name".
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 61394
diff changeset
348 (cvs-add-face (cvs-fileinfo->full-name fileinfo)
63209
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
349 'cvs-header t 'cvs-goal-column t)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
350 ":"))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
351 (MESSAGE
28256
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
352 (cvs-add-face (format "Message: %s" (cvs-fileinfo->full-log fileinfo))
63209
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
353 'cvs-msg))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
354 (t
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
355 (let* ((status (if (cvs-fileinfo->marked fileinfo)
63209
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
356 (cvs-add-face "*" 'cvs-marked)
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
357 " "))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
358 (file (cvs-add-face (cvs-fileinfo->pp-name fileinfo)
63209
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
359 'cvs-filename t 'cvs-goal-column t))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
360 (base (or (cvs-fileinfo->base-rev fileinfo) ""))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
361 (head (cvs-fileinfo->head-rev fileinfo))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
362 (type
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
363 (let ((str (case type
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
364 ;;(MOD-CONFLICT "Not Removed")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
365 (DEAD "")
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
366 (t (capitalize (symbol-name type)))))
29576
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
367 (face (let ((sym (intern
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
368 (concat "cvs-fi-"
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
369 (downcase (symbol-name type))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
370 "-face"))))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
371 (or (and (boundp sym) (symbol-value sym))
63209
24689001fa22 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-379
Miles Bader <miles@gnu.org>
parents: 61866
diff changeset
372 'cvs-need-action))))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
373 (cvs-add-face str face cvs-status-map)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
374 (side (or
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
375 ;; maybe a subtype
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
376 (when subtype (downcase (symbol-name subtype)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
377 ;; or the head-rev
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
378 (when (and head (not (string= head base))) head)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
379 ;; or nothing
28256
06cfa273543d * pcvs.el: Add a minimal leading commentary.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28088
diff changeset
380 "")))
44384
3626a12fe452 * pcvs.el (cvs-mode-previous-line, cvs-mode-next-line): Move to
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 42455
diff changeset
381 (format "%-11s %s %-11s %-11s %s"
70709
45029a5165ac (cvs-fileinfo-pp): Insert trailing newline.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 70292
diff changeset
382 side status type base file))))
45029a5165ac (cvs-fileinfo-pp): Insert trailing newline.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 70292
diff changeset
383 "\n")))
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
384
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
385
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
386 (defun cvs-fileinfo-update (fi fi-new)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
387 "Update FI with the information provided in FI-NEW."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
388 (let ((type (cvs-fileinfo->type fi-new))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
389 (merge (cvs-fileinfo->merge fi-new)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
390 (setf (cvs-fileinfo->type fi) type)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
391 (setf (cvs-fileinfo->subtype fi) (cvs-fileinfo->subtype fi-new))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
392 (setf (cvs-fileinfo->full-log fi) (cvs-fileinfo->full-log fi-new))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
393 (setf (cvs-fileinfo->base-rev fi) (cvs-fileinfo->base-rev fi-new))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
394 (setf (cvs-fileinfo->head-rev fi) (cvs-fileinfo->head-rev fi-new))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
395 (cond
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
396 (merge (setf (cvs-fileinfo->merge fi) merge))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
397 ((memq type '(UP-TO-DATE NEED-UPDATE))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
398 (setf (cvs-fileinfo->merge fi) nil)))))
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 (defun cvs-fileinfo< (a b)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
401 "Compare fileinfo A with fileinfo B and return t if A is `less'.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
402 The ordering defined by this function is such that directories are
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
403 sorted alphabetically, and inside every directory the DIRCHANGE
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
404 fileinfo will appear first, followed by all files (alphabetically)."
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
405 (let ((subtypea (cvs-fileinfo->subtype a))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
406 (subtypeb (cvs-fileinfo->subtype b)))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
407 (cond
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
408 ;; Sort according to directories.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
409 ((string< (cvs-fileinfo->dir a) (cvs-fileinfo->dir b)) t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
410 ((not (string= (cvs-fileinfo->dir a) (cvs-fileinfo->dir b))) nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
411
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
412 ;; The DIRCHANGE entry is always first within the directory.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
413 ((eq (cvs-fileinfo->type b) 'DIRCHANGE) nil)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
414 ((eq (cvs-fileinfo->type a) 'DIRCHANGE) t)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
415
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
416 ;; All files are sorted by file name.
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
417 ((string< (cvs-fileinfo->file a) (cvs-fileinfo->file b))))))
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
418
29576
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
419 ;;;
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
420 ;;; Look at CVS/Entries to quickly find a first approximation of the status
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
421 ;;;
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
422
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
423 (defun cvs-fileinfo-from-entries (dir &optional all)
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
424 "List of fileinfos for DIR, extracted from CVS/Entries.
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
425 Unless ALL is optional, returns only the files that are not up-to-date.
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
426 DIR can also be a file."
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
427 (let* ((singlefile
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
428 (cond
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
429 ((equal dir "") nil)
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
430 ((file-directory-p dir) (setq dir (file-name-as-directory dir)) nil)
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
431 (t (prog1 (file-name-nondirectory dir)
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
432 (setq dir (or (file-name-directory dir) ""))))))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
433 (file (expand-file-name "CVS/Entries" dir))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
434 (fis nil))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
435 (if (not (file-readable-p file))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
436 (push (cvs-create-fileinfo (if singlefile 'UNKNOWN 'DIRCHANGE)
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
437 dir (or singlefile ".") "") fis)
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
438 (with-temp-buffer
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
439 (insert-file-contents file)
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
440 (goto-char (point-min))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
441 ;; Select the single file entry in case we're only interested in a file.
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
442 (cond
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
443 ((not singlefile)
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
444 (push (cvs-create-fileinfo 'DIRCHANGE dir "." "") fis))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
445 ((re-search-forward
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
446 (concat "^[^/]*/" (regexp-quote singlefile) "/.*") nil t)
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
447 (setq all t)
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
448 (goto-char (match-beginning 0))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
449 (narrow-to-region (point) (match-end 0)))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
450 (t
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
451 (push (cvs-create-fileinfo 'UNKNOWN dir singlefile "") fis)
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
452 (narrow-to-region (point-min) (point-min))))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
453 (while (looking-at "\\([^/]*\\)/\\([^/]*\\)/\\([^/]*\\)/\\([^/]*\\)/")
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
454 (if (/= (match-beginning 1) (match-end 1))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
455 (setq fis (append (cvs-fileinfo-from-entries
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
456 (concat dir (file-name-as-directory
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
457 (match-string 2)))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
458 all)
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
459 fis))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
460 (let ((f (match-string 2))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
461 (rev (match-string 3))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
462 (date (match-string 4))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
463 timestamp
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
464 (type 'MODIFIED)
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
465 (subtype nil))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
466 (cond
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
467 ((equal (substring rev 0 1) "-")
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
468 (setq type 'REMOVED rev (substring rev 1)))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
469 ((not (file-exists-p (concat dir f))) (setq type 'MISSING))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
470 ((equal rev "0") (setq type 'ADDED rev nil))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
471 ((equal date "Result of merge") (setq subtype 'MERGED))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
472 ((let ((mtime (nth 5 (file-attributes (concat dir f))))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
473 (system-time-locale "C"))
49237
9a2cb7cc7942 (cvs-fileinfo-from-entries): Deal with Solaris'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47390
diff changeset
474 (setq timestamp (format-time-string "%c" mtime 'utc))
9a2cb7cc7942 (cvs-fileinfo-from-entries): Deal with Solaris'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47390
diff changeset
475 ;; Solaris sometimes uses "Wed Sep 05", not "Wed Sep 5".
9a2cb7cc7942 (cvs-fileinfo-from-entries): Deal with Solaris'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47390
diff changeset
476 ;; See "grep '[^a-z_]ctime' cvs/src/*.c" for reference.
9a2cb7cc7942 (cvs-fileinfo-from-entries): Deal with Solaris'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47390
diff changeset
477 (if (= (aref timestamp 8) ?0)
9a2cb7cc7942 (cvs-fileinfo-from-entries): Deal with Solaris'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47390
diff changeset
478 (setq timestamp (concat (substring timestamp 0 8)
9a2cb7cc7942 (cvs-fileinfo-from-entries): Deal with Solaris'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47390
diff changeset
479 " " (substring timestamp 9))))
9a2cb7cc7942 (cvs-fileinfo-from-entries): Deal with Solaris'
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47390
diff changeset
480 (equal timestamp date))
29576
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
481 (setq type (if all 'UP-TO-DATE)))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
482 ((equal date (concat "Result of merge+" timestamp))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
483 (setq type 'CONFLICT)))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
484 (when type
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
485 (push (cvs-create-fileinfo type dir f ""
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
486 :base-rev rev :subtype subtype)
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
487 fis))))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
488 (forward-line 1))))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
489 fis))
961f303cda37 (cvs-fi-up-to-date-face, cvs-fi-unknown-face): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 28256
diff changeset
490
28088
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
491 (provide 'pcvs-info)
b442dfc3cef0 *** empty log message ***
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
492
56955
53103758d397 (cvs-states): Allow `ignore' on NEED-UPDATE.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54871
diff changeset
493 ;; arch-tag: d85dde07-bdc2-400a-882f-92f398c7b0ba
38422
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 34652
diff changeset
494 ;;; pcvs-info.el ends here