annotate lisp/vc-cvs.el @ 56905:661d52db56de

(isearch-toggle-regexp): Set `isearch-success' and `isearch-adjusted' to `t'. (isearch-toggle-case-fold): Set `isearch-success' to `t'. (isearch-message-prefix): Add "pending" for isearch-adjusted. (isearch-other-meta-char): Restore isearch-point unconditionally. (isearch-query-replace): Add new arg `regexp-flag' and use it. Set point to start of match if region is not active in transient mark mode (to include the current match to region boundaries). Push the search string to `query-replace-from-history-variable'. Add prompt "Query replace regexp" for isearch-regexp. Add region beginning/end as last arguments of `perform-replace.' (isearch-query-replace-regexp): Replace code by the call to `isearch-query-replace' with arg `t'.
author Juri Linkov <juri@jurta.org>
date Fri, 03 Sep 2004 20:32:57 +0000
parents 2e4ddb8bfffd
children f5d7d9bbc021 108bb5537c12
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1 ;;; vc-cvs.el --- non-resident support for CVS version-control
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2
51733
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
3 ;; Copyright (C) 1995,98,99,2000,2001,02,2003 Free Software Foundation, Inc.
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
4
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
5 ;; Author: FSF (see vc.el for full credits)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
6 ;; Maintainer: Andre Spiegel <spiegel@gnu.org>
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
7
54465
2e4ddb8bfffd (vc-cvs-print-log, vc-cvs-diff): Add optional BUFFER argument.
André Spiegel <spiegel@gnu.org>
parents: 53631
diff changeset
8 ;; $Id: vc-cvs.el,v 1.67 2004/01/20 17:41:18 uid65624 Exp $
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
9
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
11
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
15 ;; any later version.
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
16
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
21
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
25 ;; Boston, MA 02111-1307, USA.
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
26
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
27 ;;; Commentary:
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
28
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
29 ;;; Code:
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
30
35702
395d188bb71d replaced require with autoloads
Sam Steingold <sds@gnu.org>
parents: 35584
diff changeset
31 (eval-when-compile
35839
7349d241e60b Remove autoloads. Require vc when compiling.
André Spiegel <spiegel@gnu.org>
parents: 35821
diff changeset
32 (require 'vc))
35584
498bcc1e7c00 require vc
Sam Steingold <sds@gnu.org>
parents: 35569
diff changeset
33
35569
5cd8ebba5a94 doc&comment fix
Sam Steingold <sds@gnu.org>
parents: 35177
diff changeset
34 ;;;
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
35 ;;; Customization options
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
36 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
37
44197
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
38 (defcustom vc-cvs-global-switches nil
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
39 "*Global switches to pass to any CVS command."
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
40 :type '(choice (const :tag "None" nil)
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
41 (string :tag "Argument String")
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
42 (repeat :tag "Argument List"
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
43 :value ("")
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
44 string))
45255
20c79f08a7da Change all post-21.1 :version attributes to 21.4.
Eli Zaretskii <eliz@gnu.org>
parents: 44462
diff changeset
45 :version "21.4"
44197
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
46 :group 'vc)
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
47
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
48 (defcustom vc-cvs-register-switches nil
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
49 "*Extra switches for registering a file into CVS.
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
50 A string or list of strings passed to the checkin program by
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
51 \\[vc-register]."
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
52 :type '(choice (const :tag "None" nil)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
53 (string :tag "Argument String")
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
54 (repeat :tag "Argument List"
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
55 :value ("")
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
56 string))
31475
b25e22223eb9 DOc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
57 :version "21.1"
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
58 :group 'vc)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
59
35821
6b1ff979e045 (vc-cvs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35702
diff changeset
60 (defcustom vc-cvs-diff-switches nil
6b1ff979e045 (vc-cvs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35702
diff changeset
61 "*A string or list of strings specifying extra switches for cvs diff under VC."
6b1ff979e045 (vc-cvs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35702
diff changeset
62 :type '(choice (const :tag "None" nil)
6b1ff979e045 (vc-cvs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35702
diff changeset
63 (string :tag "Argument String")
6b1ff979e045 (vc-cvs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35702
diff changeset
64 (repeat :tag "Argument List"
6b1ff979e045 (vc-cvs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35702
diff changeset
65 :value ("")
6b1ff979e045 (vc-cvs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35702
diff changeset
66 string))
6b1ff979e045 (vc-cvs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35702
diff changeset
67 :version "21.1"
6b1ff979e045 (vc-cvs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35702
diff changeset
68 :group 'vc)
6b1ff979e045 (vc-cvs-diff-switches): New customization option.
André Spiegel <spiegel@gnu.org>
parents: 35702
diff changeset
69
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
70 (defcustom vc-cvs-header (or (cdr (assoc 'CVS vc-header-alist)) '("\$Id\$"))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
71 "*Header keywords to be inserted by `vc-insert-headers'."
31475
b25e22223eb9 DOc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
72 :version "21.1"
35177
f7c511463b68 (vc-cvs-header): Fix :type.
Dave Love <fx@gnu.org>
parents: 35132
diff changeset
73 :type '(repeat string)
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
74 :group 'vc)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
75
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
76 (defcustom vc-cvs-use-edit t
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
77 "*Non-nil means to use `cvs edit' to \"check out\" a file.
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
78 This is only meaningful if you don't use the implicit checkout model
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
79 \(i.e. if you have $CVSREAD set)."
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
80 :type 'boolean
31475
b25e22223eb9 DOc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
81 :version "21.1"
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
82 :group 'vc)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
83
50671
0737c3a76291 (vc-cvs-stay-local): Keep the old default. Simplify doc string.
André Spiegel <spiegel@gnu.org>
parents: 50668
diff changeset
84 (defcustom vc-cvs-stay-local t
31475
b25e22223eb9 DOc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
85 "*Non-nil means use local operations when possible for remote repositories.
38288
6934c28c6bc5 (vc-cvs-stay-local): doc fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37358
diff changeset
86 This avoids slow queries over the network and instead uses heuristics
6934c28c6bc5 (vc-cvs-stay-local): doc fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37358
diff changeset
87 and past information to determine the current status of a file.
50671
0737c3a76291 (vc-cvs-stay-local): Keep the old default. Simplify doc string.
André Spiegel <spiegel@gnu.org>
parents: 50668
diff changeset
88
50668
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
89 The value can also be a regular expression or list of regular
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
90 expressions to match against the host name of a repository; then VC
50671
0737c3a76291 (vc-cvs-stay-local): Keep the old default. Simplify doc string.
André Spiegel <spiegel@gnu.org>
parents: 50668
diff changeset
91 only stays local for hosts that match it. Alternatively, the value
0737c3a76291 (vc-cvs-stay-local): Keep the old default. Simplify doc string.
André Spiegel <spiegel@gnu.org>
parents: 50668
diff changeset
92 can be a list of regular expressions where the first element is the
0737c3a76291 (vc-cvs-stay-local): Keep the old default. Simplify doc string.
André Spiegel <spiegel@gnu.org>
parents: 50668
diff changeset
93 symbol `except'; then VC always stays local except for hosts matched
0737c3a76291 (vc-cvs-stay-local): Keep the old default. Simplify doc string.
André Spiegel <spiegel@gnu.org>
parents: 50668
diff changeset
94 by these regular expressions."
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
95 :type '(choice (const :tag "Always stay local" t)
50668
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
96 (const :tag "Don't stay local" nil)
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
97 (list :format "\nExamine hostname and %v" :tag "Examine hostname ..."
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
98 (set :format "%v" :inline t (const :format "%t" :tag "don't" except))
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
99 (regexp :format " stay local,\n%t: %v" :tag "if it matches")
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
100 (repeat :format "%v%i\n" :inline t (regexp :tag "or"))))
31475
b25e22223eb9 DOc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
101 :version "21.1"
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
102 :group 'vc)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
103
43447
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
104 (defcustom vc-cvs-sticky-date-format-string "%c"
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
105 "*Format string for mode-line display of sticky date.
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
106 Format is according to `format-time-string'. Only used if
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
107 `vc-cvs-sticky-tag-display' is t."
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
108 :type '(string)
45255
20c79f08a7da Change all post-21.1 :version attributes to 21.4.
Eli Zaretskii <eliz@gnu.org>
parents: 44462
diff changeset
109 :version "21.4"
43447
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
110 :group 'vc)
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
111
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
112 (defcustom vc-cvs-sticky-tag-display t
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
113 "*Specify the mode-line display of sticky tags.
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
114 Value t means default display, nil means no display at all. If the
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
115 value is a function or macro, it is called with the sticky tag and
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
116 its' type as parameters, in that order. TYPE can have three different
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
117 values: `symbolic-name' (TAG is a string), `revision-number' (TAG is a
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
118 string) and `date' (TAG is a date as returned by `encode-time'). The
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
119 return value of the function or macro will be displayed as a string.
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
120
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
121 Here's an example that will display the formatted date for sticky
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
122 dates and the word \"Sticky\" for sticky tag names and revisions.
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
123
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
124 (lambda (tag type)
44436
f9db51bb423b (vc-cvs-checkin): Pass the required argument to `error'.
Sam Steingold <sds@gnu.org>
parents: 44197
diff changeset
125 (cond ((eq type 'date) (format-time-string
43447
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
126 vc-cvs-sticky-date-format-string tag))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
127 ((eq type 'revision-number) \"Sticky\")
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
128 ((eq type 'symbolic-name) \"Sticky\")))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
129
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
130 Here's an example that will abbreviate to the first character only,
47917
ca7641fe56ba (vc-cvs-sticky-tag-display): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 47840
diff changeset
131 any text before the first occurrence of `-' for sticky symbolic tags.
43447
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
132 If the sticky tag is a revision number, the word \"Sticky\" is
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
133 displayed. Date and time is displayed for sticky dates.
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
134
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
135 (lambda (tag type)
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
136 (cond ((eq type 'date) (format-time-string \"%Y%m%d %H:%M\" tag))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
137 ((eq type 'revision-number) \"Sticky\")
44436
f9db51bb423b (vc-cvs-checkin): Pass the required argument to `error'.
Sam Steingold <sds@gnu.org>
parents: 44197
diff changeset
138 ((eq type 'symbolic-name)
43447
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
139 (condition-case nil
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
140 (progn
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
141 (string-match \"\\\\([^-]*\\\\)\\\\(.*\\\\)\" tag)
44436
f9db51bb423b (vc-cvs-checkin): Pass the required argument to `error'.
Sam Steingold <sds@gnu.org>
parents: 44197
diff changeset
142 (concat (substring (match-string 1 tag) 0 1) \":\"
43447
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
143 (substring (match-string 2 tag) 1 nil)))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
144 (error tag))))) ; Fall-back to given tag name.
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
145
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
146 See also variable `vc-cvs-sticky-date-format-string'."
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
147 :type '(choice boolean function)
45255
20c79f08a7da Change all post-21.1 :version attributes to 21.4.
Eli Zaretskii <eliz@gnu.org>
parents: 44462
diff changeset
148 :version "21.4"
43447
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
149 :group 'vc)
35569
5cd8ebba5a94 doc&comment fix
Sam Steingold <sds@gnu.org>
parents: 35177
diff changeset
150
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
151 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
152 ;;; Internal variables
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
153 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
154
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
155 (defvar vc-cvs-local-month-numbers
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
156 '(("Jan" . 1) ("Feb" . 2) ("Mar" . 3) ("Apr" . 4)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
157 ("May" . 5) ("Jun" . 6) ("Jul" . 7) ("Aug" . 8)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
158 ("Sep" . 9) ("Oct" . 10) ("Nov" . 11) ("Dec" . 12))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
159 "Local association list of month numbers.")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
160
35569
5cd8ebba5a94 doc&comment fix
Sam Steingold <sds@gnu.org>
parents: 35177
diff changeset
161
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
162 ;;;
35569
5cd8ebba5a94 doc&comment fix
Sam Steingold <sds@gnu.org>
parents: 35177
diff changeset
163 ;;; State-querying functions
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
164 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
165
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
166 ;;;###autoload (defun vc-cvs-registered (f)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
167 ;;;###autoload (when (file-readable-p (expand-file-name
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
168 ;;;###autoload "CVS/Entries" (file-name-directory f)))
47811
8b1c72f30fea (vc-cvs-registered): In the autoload version use load instead of
Markus Rost <rost@math.uni-bielefeld.de>
parents: 47807
diff changeset
169 ;;;###autoload (load "vc-cvs")
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
170 ;;;###autoload (vc-cvs-registered f)))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
171
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
172 (defun vc-cvs-registered (file)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
173 "Check if FILE is CVS registered."
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
174 (let ((dirname (or (file-name-directory file) ""))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
175 (basename (file-name-nondirectory file))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
176 ;; make sure that the file name is searched case-sensitively
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
177 (case-fold-search nil))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
178 (if (file-readable-p (expand-file-name "CVS/Entries" dirname))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
179 (with-temp-buffer
50453
e499daf7fb22 (vc-cvs-get-entries): New function that uses the right coding system for
André Spiegel <spiegel@gnu.org>
parents: 50321
diff changeset
180 (vc-cvs-get-entries dirname)
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
181 (goto-char (point-min))
31475
b25e22223eb9 DOc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
182 (cond
b25e22223eb9 DOc fixes.
Dave Love <fx@gnu.org>
parents: 31404
diff changeset
183 ((re-search-forward
44104
985526b08270 (vc-cvs-registered, vc-cvs-dir-state-heuristic):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44005
diff changeset
184 ;; CVS-removed files are not taken under VC control.
985526b08270 (vc-cvs-registered, vc-cvs-dir-state-heuristic):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44005
diff changeset
185 (concat "^/" (regexp-quote basename) "/[^/-]") nil t)
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
186 (beginning-of-line)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
187 (vc-cvs-parse-entry file)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
188 t)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
189 (t nil)))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
190 nil)))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
191
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
192 (defun vc-cvs-state (file)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
193 "CVS-specific version of `vc-state'."
51733
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
194 (if (vc-stay-local-p file)
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
195 (let ((state (vc-file-getprop file 'vc-state)))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
196 ;; If we should stay local, use the heuristic but only if
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
197 ;; we don't have a more precise state already available.
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
198 (if (memq state '(up-to-date edited))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
199 (vc-cvs-state-heuristic file)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
200 state))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
201 (with-temp-buffer
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
202 (cd (file-name-directory file))
44197
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
203 (vc-cvs-command t 0 file "status")
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
204 (vc-cvs-parse-status t))))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
205
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
206 (defun vc-cvs-state-heuristic (file)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
207 "CVS-specific state heuristic."
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
208 ;; If the file has not changed since checkout, consider it `up-to-date'.
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
209 ;; Otherwise consider it `edited'.
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
210 (let ((checkout-time (vc-file-getprop file 'vc-checkout-time))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
211 (lastmod (nth 5 (file-attributes file))))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
212 (if (equal checkout-time lastmod)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
213 'up-to-date
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
214 'edited)))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
215
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
216 (defun vc-cvs-dir-state (dir)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
217 "Find the CVS state of all files in DIR."
50645
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
218 ;; if DIR is not under CVS control, don't do anything.
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
219 (when (file-readable-p (expand-file-name "CVS/Entries" dir))
51733
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
220 (if (vc-stay-local-p dir)
50645
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
221 (vc-cvs-dir-state-heuristic dir)
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
222 (let ((default-directory dir))
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
223 ;; Don't specify DIR in this command, the default-directory is
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
224 ;; enough. Otherwise it might fail with remote repositories.
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
225 (with-temp-buffer
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
226 (vc-cvs-command t 0 nil "status" "-l")
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
227 (goto-char (point-min))
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
228 (while (re-search-forward "^=+\n\\([^=\n].*\n\\|\n\\)+" nil t)
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
229 (narrow-to-region (match-beginning 0) (match-end 0))
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
230 (vc-cvs-parse-status)
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
231 (goto-char (point-max))
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
232 (widen)))))))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
233
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
234 (defun vc-cvs-workfile-version (file)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
235 "CVS-specific version of `vc-workfile-version'."
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
236 ;; There is no need to consult RCS headers under CVS, because we
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
237 ;; get the workfile version for free when we recognize that a file
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
238 ;; is registered in CVS.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
239 (vc-cvs-registered file)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
240 (vc-file-getprop file 'vc-workfile-version))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
241
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
242 (defun vc-cvs-checkout-model (file)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
243 "CVS-specific version of `vc-checkout-model'."
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
244 (if (or (getenv "CVSREAD")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
245 ;; If the file is not writable (despite CVSREAD being
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
246 ;; undefined), this is probably because the file is being
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
247 ;; "watched" by other developers.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
248 ;; (If vc-mistrust-permissions was t, we actually shouldn't
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
249 ;; trust this, but there is no other way to learn this from CVS
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
250 ;; at the moment (version 1.9).)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
251 (string-match "r-..-..-." (nth 8 (file-attributes file))))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
252 'announce
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
253 'implicit))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
254
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31384
diff changeset
255 (defun vc-cvs-mode-line-string (file)
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31384
diff changeset
256 "Return string for placement into the modeline for FILE.
43447
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
257 Compared to the default implementation, this function does two things:
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
258 Handle the special case of a CVS file that is added but not yet
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
259 committed and support display of sticky tags."
50923
3eab629b1239 (vc-cvs-mode-line-string): Use vc-default-mode-line-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50910
diff changeset
260 (let ((sticky-tag (vc-file-getprop file 'vc-cvs-sticky-tag))
3eab629b1239 (vc-cvs-mode-line-string): Use vc-default-mode-line-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50910
diff changeset
261 (string (if (string= (vc-workfile-version file) "0")
3eab629b1239 (vc-cvs-mode-line-string): Use vc-default-mode-line-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50910
diff changeset
262 ;; A file that is added but not yet committed.
3eab629b1239 (vc-cvs-mode-line-string): Use vc-default-mode-line-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50910
diff changeset
263 "CVS @@"
3eab629b1239 (vc-cvs-mode-line-string): Use vc-default-mode-line-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50910
diff changeset
264 (vc-default-mode-line-string 'CVS file))))
3eab629b1239 (vc-cvs-mode-line-string): Use vc-default-mode-line-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50910
diff changeset
265 (if (zerop (length sticky-tag))
3eab629b1239 (vc-cvs-mode-line-string): Use vc-default-mode-line-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50910
diff changeset
266 string
3eab629b1239 (vc-cvs-mode-line-string): Use vc-default-mode-line-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50910
diff changeset
267 (concat string "[" sticky-tag "]"))))
31404
f2ab9420390f 2000-09-05 Stefan Monnier <monnier@cs.yale.edu>
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31384
diff changeset
268
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
269 (defun vc-cvs-dired-state-info (file)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
270 "CVS-specific version of `vc-dired-state-info'."
50898
8806616471e2 (vc-cvs-dired-state-info): Use `added' for added files and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50671
diff changeset
271 (let ((cvs-state (vc-state file)))
8806616471e2 (vc-cvs-dired-state-info): Use `added' for added files and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50671
diff changeset
272 (cond ((eq cvs-state 'edited)
50909
e76d42ef20bd (vc-cvs-dired-state-info): Typo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50898
diff changeset
273 (if (equal (vc-workfile-version file) "0")
50898
8806616471e2 (vc-cvs-dired-state-info): Use `added' for added files and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50671
diff changeset
274 "(added)" "(modified)"))
8806616471e2 (vc-cvs-dired-state-info): Use `added' for added files and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50671
diff changeset
275 ((eq cvs-state 'needs-patch) "(patch)")
8806616471e2 (vc-cvs-dired-state-info): Use `added' for added files and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50671
diff changeset
276 ((eq cvs-state 'needs-merge) "(merge)"))))
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
277
35569
5cd8ebba5a94 doc&comment fix
Sam Steingold <sds@gnu.org>
parents: 35177
diff changeset
278
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
279 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
280 ;;; State-changing functions
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
281 ;;;
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
282
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
283 (defun vc-cvs-register (file &optional rev comment)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
284 "Register FILE into the CVS version-control system.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
285 COMMENT can be used to provide an initial description of FILE.
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
286
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
287 `vc-register-switches' and `vc-cvs-register-switches' are passed to
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
288 the CVS command (in that order)."
51733
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
289 (when (and (not (vc-cvs-responsible-p file))
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
290 (vc-cvs-could-register file))
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
291 ;; Register the directory if needed.
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
292 (vc-cvs-register (directory-file-name (file-name-directory file))))
50910
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
293 (apply 'vc-cvs-command nil 0 file
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
294 "add"
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
295 (and comment (string-match "[^\t\n ]" comment)
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
296 (concat "-m" comment))
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
297 (vc-switches 'CVS 'register)))
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
298
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
299 (defun vc-cvs-responsible-p (file)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
300 "Return non-nil if CVS thinks it is responsible for FILE."
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
301 (file-directory-p (expand-file-name "CVS"
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
302 (if (file-directory-p file)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
303 file
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
304 (file-name-directory file)))))
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
305
51733
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
306 (defun vc-cvs-could-register (file)
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
307 "Return non-nil if FILE could be registered in CVS.
51733
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
308 This is only possible if CVS is managing FILE's directory or one of
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
309 its parents."
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
310 (let ((dir file))
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
311 (while (and (stringp dir)
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
312 (not (equal dir (setq dir (file-name-directory dir))))
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
313 dir)
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
314 (setq dir (if (file-directory-p
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
315 (expand-file-name "CVS/Entries" dir))
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
316 t (directory-file-name dir))))
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
317 (eq dir t)))
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
318
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
319 (defun vc-cvs-checkin (file rev comment)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
320 "CVS-specific version of `vc-backend-checkin'."
50910
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
321 (unless (or (not rev) (vc-cvs-valid-version-number-p rev))
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
322 (if (not (vc-cvs-valid-symbolic-tag-name-p rev))
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
323 (error "%s is not a valid symbolic tag name" rev)
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
324 ;; If the input revison is a valid symbolic tag name, we create it
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
325 ;; as a branch, commit and switch to it.
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
326 (apply 'vc-cvs-command nil 0 file "tag" "-b" (list rev))
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
327 (apply 'vc-cvs-command nil 0 file "update" "-r" (list rev))
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
328 (vc-file-setprop file 'vc-cvs-sticky-tag rev)))
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
329 (let ((status (apply 'vc-cvs-command nil 1 file
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
330 "ci" (if rev (concat "-r" rev))
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
331 (concat "-m" comment)
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
332 (vc-switches 'CVS 'checkin))))
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
333 (set-buffer "*vc*")
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
334 (goto-char (point-min))
32948
3c95af2888f6 (vc-cvs-checkin): Check both status and error message after command.
André Spiegel <spiegel@gnu.org>
parents: 32747
diff changeset
335 (when (not (zerop status))
3c95af2888f6 (vc-cvs-checkin): Check both status and error message after command.
André Spiegel <spiegel@gnu.org>
parents: 32747
diff changeset
336 ;; Check checkin problem.
3c95af2888f6 (vc-cvs-checkin): Check both status and error message after command.
André Spiegel <spiegel@gnu.org>
parents: 32747
diff changeset
337 (cond
3c95af2888f6 (vc-cvs-checkin): Check both status and error message after command.
André Spiegel <spiegel@gnu.org>
parents: 32747
diff changeset
338 ((re-search-forward "Up-to-date check failed" nil t)
3c95af2888f6 (vc-cvs-checkin): Check both status and error message after command.
André Spiegel <spiegel@gnu.org>
parents: 32747
diff changeset
339 (vc-file-setprop file 'vc-state 'needs-merge)
3c95af2888f6 (vc-cvs-checkin): Check both status and error message after command.
André Spiegel <spiegel@gnu.org>
parents: 32747
diff changeset
340 (error (substitute-command-keys
3c95af2888f6 (vc-cvs-checkin): Check both status and error message after command.
André Spiegel <spiegel@gnu.org>
parents: 32747
diff changeset
341 (concat "Up-to-date check failed: "
3c95af2888f6 (vc-cvs-checkin): Check both status and error message after command.
André Spiegel <spiegel@gnu.org>
parents: 32747
diff changeset
342 "type \\[vc-next-action] to merge in changes"))))
3c95af2888f6 (vc-cvs-checkin): Check both status and error message after command.
André Spiegel <spiegel@gnu.org>
parents: 32747
diff changeset
343 (t
3c95af2888f6 (vc-cvs-checkin): Check both status and error message after command.
André Spiegel <spiegel@gnu.org>
parents: 32747
diff changeset
344 (pop-to-buffer (current-buffer))
3c95af2888f6 (vc-cvs-checkin): Check both status and error message after command.
André Spiegel <spiegel@gnu.org>
parents: 32747
diff changeset
345 (goto-char (point-min))
3c95af2888f6 (vc-cvs-checkin): Check both status and error message after command.
André Spiegel <spiegel@gnu.org>
parents: 32747
diff changeset
346 (shrink-window-if-larger-than-buffer)
3c95af2888f6 (vc-cvs-checkin): Check both status and error message after command.
André Spiegel <spiegel@gnu.org>
parents: 32747
diff changeset
347 (error "Check-in failed"))))
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
348 ;; Update file properties
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
349 (vc-file-setprop
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
350 file 'vc-workfile-version
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
351 (vc-parse-buffer "^\\(new\\|initial\\) revision: \\([0-9.]+\\)" 2))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
352 ;; Forget the checkout model of the file, because we might have
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
353 ;; guessed wrong when we found the file. After commit, we can
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
354 ;; tell it from the permissions of the file (see
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
355 ;; vc-cvs-checkout-model).
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
356 (vc-file-setprop file 'vc-checkout-model nil)
43447
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
357
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
358 ;; if this was an explicit check-in (does not include creation of
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
359 ;; a branch), remove the sticky tag.
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
360 (if (and rev (not (vc-cvs-valid-symbolic-tag-name-p rev)))
44197
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
361 (vc-cvs-command nil 0 file "update" "-A"))))
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
362
47799
0d2f83a91144 (vc-cvs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47758
diff changeset
363 (defun vc-cvs-find-version (file rev buffer)
0d2f83a91144 (vc-cvs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47758
diff changeset
364 (apply 'vc-cvs-command
0d2f83a91144 (vc-cvs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47758
diff changeset
365 buffer 0 file
0d2f83a91144 (vc-cvs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47758
diff changeset
366 "-Q" ; suppress diagnostic output
0d2f83a91144 (vc-cvs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47758
diff changeset
367 "update"
0d2f83a91144 (vc-cvs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47758
diff changeset
368 (and rev (not (string= rev ""))
0d2f83a91144 (vc-cvs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47758
diff changeset
369 (concat "-r" rev))
0d2f83a91144 (vc-cvs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47758
diff changeset
370 "-p"
50910
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
371 (vc-switches 'CVS 'checkout)))
47799
0d2f83a91144 (vc-cvs-find-version): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47758
diff changeset
372
35132
78bce41f17c5 (vc-cvs-latest-on-branch-p): Removed.
André Spiegel <spiegel@gnu.org>
parents: 33637
diff changeset
373 (defun vc-cvs-checkout (file &optional editable rev workfile)
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
374 "Retrieve a revision of FILE into a WORKFILE.
35132
78bce41f17c5 (vc-cvs-latest-on-branch-p): Removed.
André Spiegel <spiegel@gnu.org>
parents: 33637
diff changeset
375 EDITABLE non-nil means that the file should be writable.
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
376 REV is the revision to check out into WORKFILE."
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
377 (let ((filename (or workfile file))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
378 (file-buffer (get-file-buffer file))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
379 switches)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
380 (message "Checking out %s..." filename)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
381 (save-excursion
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
382 ;; Change buffers to get local value of vc-checkout-switches.
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
383 (if file-buffer (set-buffer file-buffer))
50910
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
384 (setq switches (vc-switches 'CVS 'checkout))
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
385 ;; Save this buffer's default-directory
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
386 ;; and use save-excursion to make sure it is restored
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
387 ;; in the same buffer it was saved in.
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
388 (let ((default-directory default-directory))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
389 (save-excursion
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
390 ;; Adjust the default-directory so that the check-out creates
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
391 ;; the file in the right place.
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
392 (setq default-directory (file-name-directory filename))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
393 (if workfile
35569
5cd8ebba5a94 doc&comment fix
Sam Steingold <sds@gnu.org>
parents: 35177
diff changeset
394 (let ((failed t)
33637
6cab2125de9c (vc-cvs-checkout): Fix bug that broke C-x v ~-style checkouts.
André Spiegel <spiegel@gnu.org>
parents: 33560
diff changeset
395 (backup-name (if (string= file workfile)
33549
8a998774febc (vc-cvs-revert): Use `cvs unedit' only if `vc-cvs-use-edit' is on.
André Spiegel <spiegel@gnu.org>
parents: 33545
diff changeset
396 (car (find-backup-file-name filename)))))
8a998774febc (vc-cvs-revert): Use `cvs unedit' only if `vc-cvs-use-edit' is on.
André Spiegel <spiegel@gnu.org>
parents: 33545
diff changeset
397 (when backup-name
35569
5cd8ebba5a94 doc&comment fix
Sam Steingold <sds@gnu.org>
parents: 35177
diff changeset
398 (copy-file filename backup-name
33549
8a998774febc (vc-cvs-revert): Use `cvs unedit' only if `vc-cvs-use-edit' is on.
André Spiegel <spiegel@gnu.org>
parents: 33545
diff changeset
399 'ok-if-already-exists 'keep-date)
8a998774febc (vc-cvs-revert): Use `cvs unedit' only if `vc-cvs-use-edit' is on.
André Spiegel <spiegel@gnu.org>
parents: 33545
diff changeset
400 (unless (file-writable-p filename)
8a998774febc (vc-cvs-revert): Use `cvs unedit' only if `vc-cvs-use-edit' is on.
André Spiegel <spiegel@gnu.org>
parents: 33545
diff changeset
401 (set-file-modes filename
8a998774febc (vc-cvs-revert): Use `cvs unedit' only if `vc-cvs-use-edit' is on.
André Spiegel <spiegel@gnu.org>
parents: 33545
diff changeset
402 (logior (file-modes filename) 128))))
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
403 (unwind-protect
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
404 (progn
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
405 (let ((coding-system-for-read 'no-conversion)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
406 (coding-system-for-write 'no-conversion))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
407 (with-temp-file filename
44197
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
408 (apply 'vc-cvs-command
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
409 (current-buffer) 0 file
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
410 "-Q" ; suppress diagnostic output
43727
1163adb21e5d (vc-cvs-diff-tree): Fix typo in parameter names.
André Spiegel <spiegel@gnu.org>
parents: 43533
diff changeset
411 "update"
48965
322a31d667aa (vc-cvs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 47917
diff changeset
412 (and (stringp rev)
322a31d667aa (vc-cvs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 47917
diff changeset
413 (not (string= rev ""))
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
414 (concat "-r" rev))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
415 "-p"
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
416 switches)))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
417 (setq failed nil))
35569
5cd8ebba5a94 doc&comment fix
Sam Steingold <sds@gnu.org>
parents: 35177
diff changeset
418 (if failed
33637
6cab2125de9c (vc-cvs-checkout): Fix bug that broke C-x v ~-style checkouts.
André Spiegel <spiegel@gnu.org>
parents: 33560
diff changeset
419 (if backup-name
35569
5cd8ebba5a94 doc&comment fix
Sam Steingold <sds@gnu.org>
parents: 35177
diff changeset
420 (rename-file backup-name filename
33637
6cab2125de9c (vc-cvs-checkout): Fix bug that broke C-x v ~-style checkouts.
André Spiegel <spiegel@gnu.org>
parents: 33560
diff changeset
421 'ok-if-already-exists)
6cab2125de9c (vc-cvs-checkout): Fix bug that broke C-x v ~-style checkouts.
André Spiegel <spiegel@gnu.org>
parents: 33560
diff changeset
422 (if (file-exists-p filename)
6cab2125de9c (vc-cvs-checkout): Fix bug that broke C-x v ~-style checkouts.
André Spiegel <spiegel@gnu.org>
parents: 33560
diff changeset
423 (delete-file filename)))
33549
8a998774febc (vc-cvs-revert): Use `cvs unedit' only if `vc-cvs-use-edit' is on.
André Spiegel <spiegel@gnu.org>
parents: 33545
diff changeset
424 (and backup-name
8a998774febc (vc-cvs-revert): Use `cvs unedit' only if `vc-cvs-use-edit' is on.
André Spiegel <spiegel@gnu.org>
parents: 33545
diff changeset
425 (not vc-make-backup-files)
8a998774febc (vc-cvs-revert): Use `cvs unedit' only if `vc-cvs-use-edit' is on.
André Spiegel <spiegel@gnu.org>
parents: 33545
diff changeset
426 (delete-file backup-name)))))
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
427 (if (and (file-exists-p file) (not rev))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
428 ;; If no revision was specified, just make the file writable
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
429 ;; if necessary (using `cvs-edit' if requested).
50910
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
430 (and editable (not (eq (vc-cvs-checkout-model file) 'implicit))
48965
322a31d667aa (vc-cvs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 47917
diff changeset
431 (if vc-cvs-use-edit
322a31d667aa (vc-cvs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 47917
diff changeset
432 (vc-cvs-command nil 0 file "edit")
322a31d667aa (vc-cvs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 47917
diff changeset
433 (set-file-modes file (logior (file-modes file) 128))
322a31d667aa (vc-cvs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 47917
diff changeset
434 (if file-buffer (toggle-read-only -1))))
322a31d667aa (vc-cvs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 47917
diff changeset
435 ;; Check out a particular version (or recreate the file).
322a31d667aa (vc-cvs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 47917
diff changeset
436 (vc-file-setprop file 'vc-workfile-version nil)
322a31d667aa (vc-cvs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 47917
diff changeset
437 (apply 'vc-cvs-command nil 0 file
322a31d667aa (vc-cvs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 47917
diff changeset
438 (and editable
322a31d667aa (vc-cvs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 47917
diff changeset
439 (or (not (file-exists-p file))
322a31d667aa (vc-cvs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 47917
diff changeset
440 (not (eq (vc-cvs-checkout-model file)
322a31d667aa (vc-cvs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 47917
diff changeset
441 'implicit)))
322a31d667aa (vc-cvs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 47917
diff changeset
442 "-w")
322a31d667aa (vc-cvs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 47917
diff changeset
443 "update"
51164
0b871f4efb59 (vc-cvs-checkout): Don't leave the branch when REV is t.
André Spiegel <spiegel@gnu.org>
parents: 50923
diff changeset
444 (when rev
0b871f4efb59 (vc-cvs-checkout): Don't leave the branch when REV is t.
André Spiegel <spiegel@gnu.org>
parents: 50923
diff changeset
445 (unless (eq rev t)
0b871f4efb59 (vc-cvs-checkout): Don't leave the branch when REV is t.
André Spiegel <spiegel@gnu.org>
parents: 50923
diff changeset
446 ;; default for verbose checkout: clear the
0b871f4efb59 (vc-cvs-checkout): Don't leave the branch when REV is t.
André Spiegel <spiegel@gnu.org>
parents: 50923
diff changeset
447 ;; sticky tag so that the actual update will
0b871f4efb59 (vc-cvs-checkout): Don't leave the branch when REV is t.
André Spiegel <spiegel@gnu.org>
parents: 50923
diff changeset
448 ;; get the head of the trunk
0b871f4efb59 (vc-cvs-checkout): Don't leave the branch when REV is t.
André Spiegel <spiegel@gnu.org>
parents: 50923
diff changeset
449 (if (string= rev "")
0b871f4efb59 (vc-cvs-checkout): Don't leave the branch when REV is t.
André Spiegel <spiegel@gnu.org>
parents: 50923
diff changeset
450 "-A"
0b871f4efb59 (vc-cvs-checkout): Don't leave the branch when REV is t.
André Spiegel <spiegel@gnu.org>
parents: 50923
diff changeset
451 (concat "-r" rev))))
48965
322a31d667aa (vc-cvs-checkout): Handle t argument for REV.
André Spiegel <spiegel@gnu.org>
parents: 47917
diff changeset
452 switches))))
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
453 (vc-mode-line file)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
454 (message "Checking out %s...done" filename)))))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
455
50923
3eab629b1239 (vc-cvs-mode-line-string): Use vc-default-mode-line-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50910
diff changeset
456 (defun vc-cvs-delete-file (file)
3eab629b1239 (vc-cvs-mode-line-string): Use vc-default-mode-line-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50910
diff changeset
457 (vc-cvs-command nil 0 file "remove" "-f"))
3eab629b1239 (vc-cvs-mode-line-string): Use vc-default-mode-line-string.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50910
diff changeset
458
39001
d13c2139752b (vc-*-revert-file): Handle new optional arg CONTENTS-DONE.
André Spiegel <spiegel@gnu.org>
parents: 38288
diff changeset
459 (defun vc-cvs-revert (file &optional contents-done)
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
460 "Revert FILE to the version it was based on."
39001
d13c2139752b (vc-*-revert-file): Handle new optional arg CONTENTS-DONE.
André Spiegel <spiegel@gnu.org>
parents: 38288
diff changeset
461 (unless contents-done
d13c2139752b (vc-*-revert-file): Handle new optional arg CONTENTS-DONE.
André Spiegel <spiegel@gnu.org>
parents: 38288
diff changeset
462 ;; Check out via standard output (caused by the final argument
d13c2139752b (vc-*-revert-file): Handle new optional arg CONTENTS-DONE.
André Spiegel <spiegel@gnu.org>
parents: 38288
diff changeset
463 ;; FILE below), so that no sticky tag is set.
50910
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
464 (vc-cvs-checkout file nil (vc-workfile-version file) file))
39001
d13c2139752b (vc-*-revert-file): Handle new optional arg CONTENTS-DONE.
André Spiegel <spiegel@gnu.org>
parents: 38288
diff changeset
465 (unless (eq (vc-checkout-model file) 'implicit)
d13c2139752b (vc-*-revert-file): Handle new optional arg CONTENTS-DONE.
André Spiegel <spiegel@gnu.org>
parents: 38288
diff changeset
466 (if vc-cvs-use-edit
44197
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
467 (vc-cvs-command nil 0 file "unedit")
39001
d13c2139752b (vc-*-revert-file): Handle new optional arg CONTENTS-DONE.
André Spiegel <spiegel@gnu.org>
parents: 38288
diff changeset
468 ;; Make the file read-only by switching off all w-bits
d13c2139752b (vc-*-revert-file): Handle new optional arg CONTENTS-DONE.
André Spiegel <spiegel@gnu.org>
parents: 38288
diff changeset
469 (set-file-modes file (logand (file-modes file) 3950)))))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
470
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
471 (defun vc-cvs-merge (file first-version &optional second-version)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
472 "Merge changes into current working copy of FILE.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
473 The changes are between FIRST-VERSION and SECOND-VERSION."
44197
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
474 (vc-cvs-command nil 0 file
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
475 "update" "-kk"
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
476 (concat "-j" first-version)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
477 (concat "-j" second-version))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
478 (vc-file-setprop file 'vc-state 'edited)
50645
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
479 (with-current-buffer (get-buffer "*vc*")
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
480 (goto-char (point-min))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
481 (if (re-search-forward "conflicts during merge" nil t)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
482 1 ; signal error
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
483 0))) ; signal success
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
484
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
485 (defun vc-cvs-merge-news (file)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
486 "Merge in any new changes made to FILE."
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
487 (message "Merging changes into %s..." file)
50645
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
488 ;; (vc-file-setprop file 'vc-workfile-version nil)
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
489 (vc-file-setprop file 'vc-checkout-time 0)
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
490 (vc-cvs-command nil 0 file "update")
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
491 ;; Analyze the merge result reported by CVS, and set
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
492 ;; file properties accordingly.
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
493 (with-current-buffer (get-buffer "*vc*")
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
494 (goto-char (point-min))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
495 ;; get new workfile version
50645
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
496 (if (re-search-forward
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
497 "^Merging differences between [0-9.]* and \\([0-9.]*\\) into" nil t)
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
498 (vc-file-setprop file 'vc-workfile-version (match-string 1))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
499 (vc-file-setprop file 'vc-workfile-version nil))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
500 ;; get file status
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
501 (prog1
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
502 (if (eq (buffer-size) 0)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
503 0 ;; there were no news; indicate success
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
504 (if (re-search-forward
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
505 (concat "^\\([CMUP] \\)?"
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
506 (regexp-quote (file-name-nondirectory file))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
507 "\\( already contains the differences between \\)?")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
508 nil t)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
509 (cond
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
510 ;; Merge successful, we are in sync with repository now
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
511 ((or (match-string 2)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
512 (string= (match-string 1) "U ")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
513 (string= (match-string 1) "P "))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
514 (vc-file-setprop file 'vc-state 'up-to-date)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
515 (vc-file-setprop file 'vc-checkout-time
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
516 (nth 5 (file-attributes file)))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
517 0);; indicate success to the caller
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
518 ;; Merge successful, but our own changes are still in the file
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
519 ((string= (match-string 1) "M ")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
520 (vc-file-setprop file 'vc-state 'edited)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
521 0);; indicate success to the caller
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
522 ;; Conflicts detected!
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
523 (t
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
524 (vc-file-setprop file 'vc-state 'edited)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
525 1);; signal the error to the caller
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
526 )
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
527 (pop-to-buffer "*vc*")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
528 (error "Couldn't analyze cvs update result")))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
529 (message "Merging changes into %s...done" file))))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
530
35569
5cd8ebba5a94 doc&comment fix
Sam Steingold <sds@gnu.org>
parents: 35177
diff changeset
531
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
532 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
533 ;;; History functions
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
534 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
535
54465
2e4ddb8bfffd (vc-cvs-print-log, vc-cvs-diff): Add optional BUFFER argument.
André Spiegel <spiegel@gnu.org>
parents: 53631
diff changeset
536 (defun vc-cvs-print-log (file &optional buffer)
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
537 "Get change log associated with FILE."
44197
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
538 (vc-cvs-command
54465
2e4ddb8bfffd (vc-cvs-print-log, vc-cvs-diff): Add optional BUFFER argument.
André Spiegel <spiegel@gnu.org>
parents: 53631
diff changeset
539 buffer
51733
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
540 (if (and (vc-stay-local-p file) (fboundp 'start-process)) 'async 0)
44197
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
541 file "log"))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
542
54465
2e4ddb8bfffd (vc-cvs-print-log, vc-cvs-diff): Add optional BUFFER argument.
André Spiegel <spiegel@gnu.org>
parents: 53631
diff changeset
543 (defun vc-cvs-diff (file &optional oldvers newvers buffer)
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
544 "Get a difference report using CVS between two versions of FILE."
50910
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
545 (if (string= (vc-workfile-version file) "0")
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
546 ;; This file is added but not yet committed; there is no master file.
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
547 (if (or oldvers newvers)
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
548 (error "No revisions of %s exist" file)
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
549 ;; We regard this as "changed".
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
550 ;; Diff it against /dev/null.
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
551 ;; Note: this is NOT a "cvs diff".
54465
2e4ddb8bfffd (vc-cvs-print-log, vc-cvs-diff): Add optional BUFFER argument.
André Spiegel <spiegel@gnu.org>
parents: 53631
diff changeset
552 (apply 'vc-do-command (or buffer "*vc-diff*")
50910
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
553 1 "diff" file
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
554 (append (vc-switches nil 'diff) '("/dev/null")))
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
555 ;; Even if it's empty, it's locally modified.
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
556 1)
51733
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
557 (let* ((async (and (vc-stay-local-p file) (fboundp 'start-process)))
54465
2e4ddb8bfffd (vc-cvs-print-log, vc-cvs-diff): Add optional BUFFER argument.
André Spiegel <spiegel@gnu.org>
parents: 53631
diff changeset
558 (status (apply 'vc-cvs-command (or buffer "*vc-diff*")
50910
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
559 (if async 'async 1)
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
560 file "diff"
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
561 (and oldvers (concat "-r" oldvers))
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
562 (and newvers (concat "-r" newvers))
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
563 (vc-switches 'CVS 'diff))))
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
564 (if async 1 status)))) ; async diff, pessimistic assumption
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
565
40125
b2e4b1a5315a (vc-cvs-diff-tree): New function.
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
566 (defun vc-cvs-diff-tree (dir &optional rev1 rev2)
b2e4b1a5315a (vc-cvs-diff-tree): New function.
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
567 "Diff all files at and below DIR."
b2e4b1a5315a (vc-cvs-diff-tree): New function.
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
568 (with-current-buffer "*vc-diff*"
b2e4b1a5315a (vc-cvs-diff-tree): New function.
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
569 (setq default-directory dir)
51733
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
570 (if (vc-stay-local-p dir)
40125
b2e4b1a5315a (vc-cvs-diff-tree): New function.
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
571 ;; local diff: do it filewise, and only for files that are modified
b2e4b1a5315a (vc-cvs-diff-tree): New function.
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
572 (vc-file-tree-walk
b2e4b1a5315a (vc-cvs-diff-tree): New function.
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
573 dir
b2e4b1a5315a (vc-cvs-diff-tree): New function.
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
574 (lambda (f)
b2e4b1a5315a (vc-cvs-diff-tree): New function.
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
575 (vc-exec-after
b2e4b1a5315a (vc-cvs-diff-tree): New function.
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
576 `(let ((coding-system-for-read (vc-coding-system-for-diff ',f)))
b2e4b1a5315a (vc-cvs-diff-tree): New function.
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
577 ;; possible optimization: fetch the state of all files
b2e4b1a5315a (vc-cvs-diff-tree): New function.
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
578 ;; in the tree via vc-cvs-dir-state-heuristic
b2e4b1a5315a (vc-cvs-diff-tree): New function.
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
579 (unless (vc-up-to-date-p ',f)
b2e4b1a5315a (vc-cvs-diff-tree): New function.
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
580 (message "Looking at %s" ',f)
43727
1163adb21e5d (vc-cvs-diff-tree): Fix typo in parameter names.
André Spiegel <spiegel@gnu.org>
parents: 43533
diff changeset
581 (vc-diff-internal ',f ',rev1 ',rev2))))))
40125
b2e4b1a5315a (vc-cvs-diff-tree): New function.
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
582 ;; cvs diff: use a single call for the entire tree
b2e4b1a5315a (vc-cvs-diff-tree): New function.
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
583 (let ((coding-system-for-read
b2e4b1a5315a (vc-cvs-diff-tree): New function.
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
584 (or coding-system-for-read 'undecided)))
44197
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
585 (apply 'vc-cvs-command "*vc-diff*" 1 nil "diff"
43727
1163adb21e5d (vc-cvs-diff-tree): Fix typo in parameter names.
André Spiegel <spiegel@gnu.org>
parents: 43533
diff changeset
586 (and rev1 (concat "-r" rev1))
1163adb21e5d (vc-cvs-diff-tree): Fix typo in parameter names.
André Spiegel <spiegel@gnu.org>
parents: 43533
diff changeset
587 (and rev2 (concat "-r" rev2))
50910
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
588 (vc-switches 'CVS 'diff))))))
40125
b2e4b1a5315a (vc-cvs-diff-tree): New function.
André Spiegel <spiegel@gnu.org>
parents: 39001
diff changeset
589
33545
5411250e7971 (vc-cvs-annotate-command): New optional arg VERSION. Use
André Spiegel <spiegel@gnu.org>
parents: 32959
diff changeset
590 (defun vc-cvs-annotate-command (file buffer &optional version)
5411250e7971 (vc-cvs-annotate-command): New optional arg VERSION. Use
André Spiegel <spiegel@gnu.org>
parents: 32959
diff changeset
591 "Execute \"cvs annotate\" on FILE, inserting the contents in BUFFER.
5411250e7971 (vc-cvs-annotate-command): New optional arg VERSION. Use
André Spiegel <spiegel@gnu.org>
parents: 32959
diff changeset
592 Optional arg VERSION is a version to annotate from."
50910
8c4130079acf (vc-cvs-register, vc-cvs-checkin, vc-cvs-find-version, vc-cvs-diff)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50909
diff changeset
593 (vc-cvs-command buffer 0 file "annotate" (if version (concat "-r" version))))
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
594
40171
91eda91380cb New scaling algorithm for vc-annotate.
André Spiegel <spiegel@gnu.org>
parents: 40125
diff changeset
595 (defun vc-cvs-annotate-current-time ()
91eda91380cb New scaling algorithm for vc-annotate.
André Spiegel <spiegel@gnu.org>
parents: 40125
diff changeset
596 "Return the current time, based at midnight of the current day, and
91eda91380cb New scaling algorithm for vc-annotate.
André Spiegel <spiegel@gnu.org>
parents: 40125
diff changeset
597 encoded as fractional days."
91eda91380cb New scaling algorithm for vc-annotate.
André Spiegel <spiegel@gnu.org>
parents: 40125
diff changeset
598 (vc-annotate-convert-time
91eda91380cb New scaling algorithm for vc-annotate.
André Spiegel <spiegel@gnu.org>
parents: 40125
diff changeset
599 (apply 'encode-time 0 0 0 (nthcdr 3 (decode-time (current-time))))))
91eda91380cb New scaling algorithm for vc-annotate.
André Spiegel <spiegel@gnu.org>
parents: 40125
diff changeset
600
91eda91380cb New scaling algorithm for vc-annotate.
André Spiegel <spiegel@gnu.org>
parents: 40125
diff changeset
601 (defun vc-cvs-annotate-time ()
91eda91380cb New scaling algorithm for vc-annotate.
André Spiegel <spiegel@gnu.org>
parents: 40125
diff changeset
602 "Return the time of the next annotation (as fraction of days)
42206
0f4506820432 Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 41707
diff changeset
603 systime, or nil if there is none."
44436
f9db51bb423b (vc-cvs-checkin): Pass the required argument to `error'.
Sam Steingold <sds@gnu.org>
parents: 44197
diff changeset
604 (let ((time-stamp
40171
91eda91380cb New scaling algorithm for vc-annotate.
André Spiegel <spiegel@gnu.org>
parents: 40125
diff changeset
605 "^\\S-+\\s-+\\S-+\\s-+\\([0-9]+\\)-\\(\\sw+\\)-\\([0-9]+\\)): "))
91eda91380cb New scaling algorithm for vc-annotate.
André Spiegel <spiegel@gnu.org>
parents: 40125
diff changeset
606 (if (looking-at time-stamp)
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
607 (progn
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
608 (let* ((day (string-to-number (match-string 1)))
44436
f9db51bb423b (vc-cvs-checkin): Pass the required argument to `error'.
Sam Steingold <sds@gnu.org>
parents: 44197
diff changeset
609 (month (cdr (assoc (match-string 2)
40171
91eda91380cb New scaling algorithm for vc-annotate.
André Spiegel <spiegel@gnu.org>
parents: 40125
diff changeset
610 vc-cvs-local-month-numbers)))
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
611 (year-tmp (string-to-number (match-string 3)))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
612 ;; Years 0..68 are 2000..2068.
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
613 ;; Years 69..99 are 1969..1999.
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
614 (year (+ (cond ((> 69 year-tmp) 2000)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
615 ((> 100 year-tmp) 1900)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
616 (t 0))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
617 year-tmp)))
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
618 (goto-char (match-end 0)) ; Position at end makes for nicer overlay result
40171
91eda91380cb New scaling algorithm for vc-annotate.
André Spiegel <spiegel@gnu.org>
parents: 40125
diff changeset
619 (vc-annotate-convert-time (encode-time 0 0 0 day month year))))
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
620 ;; If we did not look directly at an annotation, there might be
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
621 ;; some further down. This is the case if we are positioned at
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
622 ;; the very top of the buffer, for instance.
40171
91eda91380cb New scaling algorithm for vc-annotate.
André Spiegel <spiegel@gnu.org>
parents: 40125
diff changeset
623 (if (re-search-forward time-stamp nil t)
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
624 (progn
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
625 (beginning-of-line nil)
40171
91eda91380cb New scaling algorithm for vc-annotate.
André Spiegel <spiegel@gnu.org>
parents: 40125
diff changeset
626 (vc-cvs-annotate-time))))))
35569
5cd8ebba5a94 doc&comment fix
Sam Steingold <sds@gnu.org>
parents: 35177
diff changeset
627
53631
74e44ab76fa5 * vc-cvs.el (vc-cvs-annotate-extract-revision-at-line): New
André Spiegel <spiegel@gnu.org>
parents: 52717
diff changeset
628 (defun vc-cvs-annotate-extract-revision-at-line ()
74e44ab76fa5 * vc-cvs.el (vc-cvs-annotate-extract-revision-at-line): New
André Spiegel <spiegel@gnu.org>
parents: 52717
diff changeset
629 (save-excursion
74e44ab76fa5 * vc-cvs.el (vc-cvs-annotate-extract-revision-at-line): New
André Spiegel <spiegel@gnu.org>
parents: 52717
diff changeset
630 (beginning-of-line)
74e44ab76fa5 * vc-cvs.el (vc-cvs-annotate-extract-revision-at-line): New
André Spiegel <spiegel@gnu.org>
parents: 52717
diff changeset
631 (if (re-search-forward "^\\([0-9]+\\.[0-9]+\\(\\.[0-9]+\\)*\\) +("
74e44ab76fa5 * vc-cvs.el (vc-cvs-annotate-extract-revision-at-line): New
André Spiegel <spiegel@gnu.org>
parents: 52717
diff changeset
632 (line-end-position) t)
74e44ab76fa5 * vc-cvs.el (vc-cvs-annotate-extract-revision-at-line): New
André Spiegel <spiegel@gnu.org>
parents: 52717
diff changeset
633 (match-string-no-properties 1)
74e44ab76fa5 * vc-cvs.el (vc-cvs-annotate-extract-revision-at-line): New
André Spiegel <spiegel@gnu.org>
parents: 52717
diff changeset
634 nil)))
74e44ab76fa5 * vc-cvs.el (vc-cvs-annotate-extract-revision-at-line): New
André Spiegel <spiegel@gnu.org>
parents: 52717
diff changeset
635
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
636 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
637 ;;; Snapshot system
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
638 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
639
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
640 (defun vc-cvs-create-snapshot (dir name branchp)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
641 "Assign to DIR's current version a given NAME.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
642 If BRANCHP is non-nil, the name is created as a branch (and the current
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
643 workspace is immediately moved to that new branch)."
44197
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
644 (vc-cvs-command nil 0 dir "tag" "-c" (if branchp "-b") name)
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
645 (when branchp (vc-cvs-command nil 0 dir "update" "-r" name)))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
646
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
647 (defun vc-cvs-retrieve-snapshot (dir name update)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
648 "Retrieve a snapshot at and below DIR.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
649 NAME is the name of the snapshot; if it is empty, do a `cvs update'.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
650 If UPDATE is non-nil, then update (resynch) any affected buffers."
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
651 (with-current-buffer (get-buffer-create "*vc*")
43447
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
652 (let ((default-directory dir)
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
653 (sticky-tag))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
654 (erase-buffer)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
655 (if (or (not name) (string= name ""))
44197
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
656 (vc-cvs-command t 0 nil "update")
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
657 (vc-cvs-command t 0 nil "update" "-r" name)
43447
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
658 (setq sticky-tag name))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
659 (when update
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
660 (goto-char (point-min))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
661 (while (not (eobp))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
662 (if (looking-at "\\([CMUP]\\) \\(.*\\)")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
663 (let* ((file (expand-file-name (match-string 2) dir))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
664 (state (match-string 1))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
665 (buffer (find-buffer-visiting file)))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
666 (when buffer
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
667 (cond
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
668 ((or (string= state "U")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
669 (string= state "P"))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
670 (vc-file-setprop file 'vc-state 'up-to-date)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
671 (vc-file-setprop file 'vc-workfile-version nil)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
672 (vc-file-setprop file 'vc-checkout-time
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
673 (nth 5 (file-attributes file))))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
674 ((or (string= state "M")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
675 (string= state "C"))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
676 (vc-file-setprop file 'vc-state 'edited)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
677 (vc-file-setprop file 'vc-workfile-version nil)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
678 (vc-file-setprop file 'vc-checkout-time 0)))
43447
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
679 (vc-file-setprop file 'vc-cvs-sticky-tag sticky-tag)
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
680 (vc-resynch-buffer file t t))))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
681 (forward-line 1))))))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
682
35569
5cd8ebba5a94 doc&comment fix
Sam Steingold <sds@gnu.org>
parents: 35177
diff changeset
683
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
684 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
685 ;;; Miscellaneous
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
686 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
687
51733
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
688 (defalias 'vc-cvs-make-version-backups-p 'vc-stay-local-p
50645
4b6925d144de (vc-cvs-dir-state): Use vc-cvs-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50453
diff changeset
689 "Return non-nil if version backups should be made for FILE.")
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
690
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
691 (defun vc-cvs-check-headers ()
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
692 "Check if the current file has any headers in it."
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
693 (save-excursion
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
694 (goto-char (point-min))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
695 (re-search-forward "\\$[A-Za-z\300-\326\330-\366\370-\377]+\
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
696 \\(: [\t -#%-\176\240-\377]*\\)?\\$" nil t)))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
697
35569
5cd8ebba5a94 doc&comment fix
Sam Steingold <sds@gnu.org>
parents: 35177
diff changeset
698
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
699 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
700 ;;; Internal functions
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
701 ;;;
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
702
44197
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
703 (defun vc-cvs-command (buffer okstatus file &rest flags)
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
704 "A wrapper around `vc-do-command' for use in vc-cvs.el.
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
705 The difference to vc-do-command is that this function always invokes `cvs',
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
706 and that it passes `vc-cvs-global-switches' to it before FLAGS."
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
707 (apply 'vc-do-command buffer okstatus "cvs" file
44436
f9db51bb423b (vc-cvs-checkin): Pass the required argument to `error'.
Sam Steingold <sds@gnu.org>
parents: 44197
diff changeset
708 (if (stringp vc-cvs-global-switches)
44197
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
709 (cons vc-cvs-global-switches flags)
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
710 (append vc-cvs-global-switches
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
711 flags))))
e255f8fa4f62 (vc-cvs-global-switches): New user option.
André Spiegel <spiegel@gnu.org>
parents: 44104
diff changeset
712
51733
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
713 (defalias 'vc-cvs-stay-local-p 'vc-stay-local-p) ;Back-compatibility.
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
714
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
715 (defun vc-cvs-repository-hostname (dirname)
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
716 "Hostname of the CVS server associated to workarea DIRNAME."
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
717 (let ((rootname (expand-file-name "CVS/Root" dirname)))
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
718 (when (file-readable-p rootname)
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
719 (with-temp-buffer
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
720 (let ((coding-system-for-read
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
721 (or file-name-coding-system
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
722 default-file-name-coding-system)))
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
723 (vc-insert-file rootname))
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
724 (goto-char (point-min))
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
725 (nth 2 (vc-cvs-parse-root
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
726 (buffer-substring (point)
2b72fd42f02e (vc-cvs-repository-hostname): New operation.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51164
diff changeset
727 (line-end-position))))))))
50668
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
728
50898
8806616471e2 (vc-cvs-dired-state-info): Use `added' for added files and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50671
diff changeset
729 (defun vc-cvs-parse-root (root)
50668
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
730 "Split CVS ROOT specification string into a list of fields.
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
731 A CVS root specification of the form
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
732 [:METHOD:][[USER@]HOSTNAME:]/path/to/repository
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
733 is converted to a normalized record with the following structure:
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
734 \(METHOD USER HOSTNAME CVS-ROOT).
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
735 The default METHOD for a CVS root of the form
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
736 /path/to/repository
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
737 is `local'.
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
738 The default METHOD for a CVS root of the form
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
739 [USER@]HOSTNAME:/path/to/repository
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
740 is `ext'.
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
741 For an empty string, nil is returned (illegal CVS root)."
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
742 ;; Split CVS root into colon separated fields (0-4).
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
743 ;; The `x:' makes sure, that leading colons are not lost;
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
744 ;; `HOST:/PATH' is then different from `:METHOD:/PATH'.
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
745 (let* ((root-list (cdr (split-string (concat "x:" root) ":")))
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
746 (len (length root-list))
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
747 ;; All syntactic varieties will get a proper METHOD.
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
748 (root-list
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
749 (cond
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
750 ((= len 0)
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
751 ;; Invalid CVS root
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
752 nil)
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
753 ((= len 1)
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
754 ;; Simple PATH => method `local'
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
755 (cons "local"
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
756 (cons nil root-list)))
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
757 ((= len 2)
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
758 ;; [USER@]HOST:PATH => method `ext'
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
759 (and (not (equal (car root-list) ""))
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
760 (cons "ext" root-list)))
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
761 ((= len 3)
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
762 ;; :METHOD:PATH
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
763 (cons (cadr root-list)
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
764 (cons nil (cddr root-list))))
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
765 (t
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
766 ;; :METHOD:[USER@]HOST:PATH
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
767 (cdr root-list)))))
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
768 (if root-list
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
769 (let ((method (car root-list))
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
770 (uhost (or (cadr root-list) ""))
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
771 (root (nth 2 root-list))
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
772 user host)
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
773 ;; Split USER@HOST
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
774 (if (string-match "\\(.*\\)@\\(.*\\)" uhost)
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
775 (setq user (match-string 1 uhost)
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
776 host (match-string 2 uhost))
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
777 (setq host uhost))
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
778 ;; Remove empty HOST
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
779 (and (equal host "")
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
780 (setq host))
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
781 ;; Fix windows style CVS root `:local:C:\\project\\cvs\\some\\dir'
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
782 (and host
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
783 (equal method "local")
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
784 (setq root (concat host ":" root) host))
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
785 ;; Normalize CVS root record
01d84e9d30e0 Patch by Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
André Spiegel <spiegel@gnu.org>
parents: 50645
diff changeset
786 (list method user host root)))))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
787
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
788 (defun vc-cvs-parse-status (&optional full)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
789 "Parse output of \"cvs status\" command in the current buffer.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
790 Set file properties accordingly. Unless FULL is t, parse only
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
791 essential information."
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
792 (let (file status)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
793 (goto-char (point-min))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
794 (if (re-search-forward "^File: " nil t)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
795 (cond
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
796 ((looking-at "no file") nil)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
797 ((re-search-forward "\\=\\([^ \t]+\\)" nil t)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
798 (setq file (expand-file-name (match-string 1)))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
799 (vc-file-setprop file 'vc-backend 'CVS)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
800 (if (not (re-search-forward "\\=[ \t]+Status: \\(.*\\)" nil t))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
801 (setq status "Unknown")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
802 (setq status (match-string 1)))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
803 (if (and full
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
804 (re-search-forward
41707
94df6eb103b3 (vc-cvs-parse-status): Store file state in property, don't just return
André Spiegel <spiegel@gnu.org>
parents: 41520
diff changeset
805 "\\(RCS Version\\|RCS Revision\\|Repository revision\\):\
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
806 \[\t ]+\\([0-9.]+\\)"
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
807 nil t))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
808 (vc-file-setprop file 'vc-latest-version (match-string 2)))
44436
f9db51bb423b (vc-cvs-checkin): Pass the required argument to `error'.
Sam Steingold <sds@gnu.org>
parents: 44197
diff changeset
809 (vc-file-setprop
41707
94df6eb103b3 (vc-cvs-parse-status): Store file state in property, don't just return
André Spiegel <spiegel@gnu.org>
parents: 41520
diff changeset
810 file 'vc-state
94df6eb103b3 (vc-cvs-parse-status): Store file state in property, don't just return
André Spiegel <spiegel@gnu.org>
parents: 41520
diff changeset
811 (cond
94df6eb103b3 (vc-cvs-parse-status): Store file state in property, don't just return
André Spiegel <spiegel@gnu.org>
parents: 41520
diff changeset
812 ((string-match "Up-to-date" status)
94df6eb103b3 (vc-cvs-parse-status): Store file state in property, don't just return
André Spiegel <spiegel@gnu.org>
parents: 41520
diff changeset
813 (vc-file-setprop file 'vc-checkout-time
94df6eb103b3 (vc-cvs-parse-status): Store file state in property, don't just return
André Spiegel <spiegel@gnu.org>
parents: 41520
diff changeset
814 (nth 5 (file-attributes file)))
94df6eb103b3 (vc-cvs-parse-status): Store file state in property, don't just return
André Spiegel <spiegel@gnu.org>
parents: 41520
diff changeset
815 'up-to-date)
94df6eb103b3 (vc-cvs-parse-status): Store file state in property, don't just return
André Spiegel <spiegel@gnu.org>
parents: 41520
diff changeset
816 ((string-match "Locally Modified" status) 'edited)
94df6eb103b3 (vc-cvs-parse-status): Store file state in property, don't just return
André Spiegel <spiegel@gnu.org>
parents: 41520
diff changeset
817 ((string-match "Needs Merge" status) 'needs-merge)
94df6eb103b3 (vc-cvs-parse-status): Store file state in property, don't just return
André Spiegel <spiegel@gnu.org>
parents: 41520
diff changeset
818 ((string-match "Needs \\(Checkout\\|Patch\\)" status) 'needs-patch)
94df6eb103b3 (vc-cvs-parse-status): Store file state in property, don't just return
André Spiegel <spiegel@gnu.org>
parents: 41520
diff changeset
819 (t 'edited))))))))
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
820
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
821 (defun vc-cvs-dir-state-heuristic (dir)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
822 "Find the CVS state of all files in DIR, using only local information."
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
823 (with-temp-buffer
50453
e499daf7fb22 (vc-cvs-get-entries): New function that uses the right coding system for
André Spiegel <spiegel@gnu.org>
parents: 50321
diff changeset
824 (vc-cvs-get-entries dir)
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
825 (goto-char (point-min))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
826 (while (not (eobp))
44104
985526b08270 (vc-cvs-registered, vc-cvs-dir-state-heuristic):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44005
diff changeset
827 ;; CVS-removed files are not taken under VC control.
985526b08270 (vc-cvs-registered, vc-cvs-dir-state-heuristic):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44005
diff changeset
828 (when (looking-at "/\\([^/]*\\)/[^/-]")
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
829 (let ((file (expand-file-name (match-string 1) dir)))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
830 (unless (vc-file-getprop file 'vc-state)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
831 (vc-cvs-parse-entry file t))))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
832 (forward-line 1))))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
833
50453
e499daf7fb22 (vc-cvs-get-entries): New function that uses the right coding system for
André Spiegel <spiegel@gnu.org>
parents: 50321
diff changeset
834 (defun vc-cvs-get-entries (dir)
e499daf7fb22 (vc-cvs-get-entries): New function that uses the right coding system for
André Spiegel <spiegel@gnu.org>
parents: 50321
diff changeset
835 "Insert the CVS/Entries file from below DIR into the current buffer.
e499daf7fb22 (vc-cvs-get-entries): New function that uses the right coding system for
André Spiegel <spiegel@gnu.org>
parents: 50321
diff changeset
836 This function ensures that the correct coding system is used for that,
e499daf7fb22 (vc-cvs-get-entries): New function that uses the right coding system for
André Spiegel <spiegel@gnu.org>
parents: 50321
diff changeset
837 which may not be the one that is used for the files' contents.
e499daf7fb22 (vc-cvs-get-entries): New function that uses the right coding system for
André Spiegel <spiegel@gnu.org>
parents: 50321
diff changeset
838 CVS/Entries should only be accessed through this function."
e499daf7fb22 (vc-cvs-get-entries): New function that uses the right coding system for
André Spiegel <spiegel@gnu.org>
parents: 50321
diff changeset
839 (let ((coding-system-for-read (or file-name-coding-system
e499daf7fb22 (vc-cvs-get-entries): New function that uses the right coding system for
André Spiegel <spiegel@gnu.org>
parents: 50321
diff changeset
840 default-file-name-coding-system)))
e499daf7fb22 (vc-cvs-get-entries): New function that uses the right coding system for
André Spiegel <spiegel@gnu.org>
parents: 50321
diff changeset
841 (vc-insert-file (expand-file-name "CVS/Entries" dir))))
e499daf7fb22 (vc-cvs-get-entries): New function that uses the right coding system for
André Spiegel <spiegel@gnu.org>
parents: 50321
diff changeset
842
43447
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
843 (defun vc-cvs-valid-symbolic-tag-name-p (tag)
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
844 "Return non-nil if TAG is a valid symbolic tag name."
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
845 ;; According to the CVS manual, a valid symbolic tag must start with
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
846 ;; an uppercase or lowercase letter and can contain uppercase and
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
847 ;; lowercase letters, digits, `-', and `_'.
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
848 (and (string-match "^[a-zA-Z]" tag)
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
849 (not (string-match "[^a-z0-9A-Z-_]" tag))))
44436
f9db51bb423b (vc-cvs-checkin): Pass the required argument to `error'.
Sam Steingold <sds@gnu.org>
parents: 44197
diff changeset
850
44462
6eb10924e77f (vc-cvs-valid-version-number-p): New function.
Sam Steingold <sds@gnu.org>
parents: 44436
diff changeset
851 (defun vc-cvs-valid-version-number-p (tag)
6eb10924e77f (vc-cvs-valid-version-number-p): New function.
Sam Steingold <sds@gnu.org>
parents: 44436
diff changeset
852 "Return non-nil if TAG is a valid version number."
6eb10924e77f (vc-cvs-valid-version-number-p): New function.
Sam Steingold <sds@gnu.org>
parents: 44436
diff changeset
853 (and (string-match "^[0-9]" tag)
6eb10924e77f (vc-cvs-valid-version-number-p): New function.
Sam Steingold <sds@gnu.org>
parents: 44436
diff changeset
854 (not (string-match "[^0-9.]" tag))))
43447
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
855
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
856 (defun vc-cvs-parse-sticky-tag (match-type match-tag)
44436
f9db51bb423b (vc-cvs-checkin): Pass the required argument to `error'.
Sam Steingold <sds@gnu.org>
parents: 44197
diff changeset
857 "Parse and return the sticky tag as a string.
43447
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
858 `match-data' is protected."
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
859 (let ((data (match-data))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
860 (tag)
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
861 (type (cond ((string= match-type "D") 'date)
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
862 ((string= match-type "T")
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
863 (if (vc-cvs-valid-symbolic-tag-name-p match-tag)
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
864 'symbolic-name
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
865 'revision-number))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
866 (t nil))))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
867 (unwind-protect
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
868 (progn
44436
f9db51bb423b (vc-cvs-checkin): Pass the required argument to `error'.
Sam Steingold <sds@gnu.org>
parents: 44197
diff changeset
869 (cond
46163
426c8cf1a3df Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 45255
diff changeset
870 ;; Sticky Date tag. Convert to a proper date value (`encode-time')
43447
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
871 ((eq type 'date)
44436
f9db51bb423b (vc-cvs-checkin): Pass the required argument to `error'.
Sam Steingold <sds@gnu.org>
parents: 44197
diff changeset
872 (string-match
f9db51bb423b (vc-cvs-checkin): Pass the required argument to `error'.
Sam Steingold <sds@gnu.org>
parents: 44197
diff changeset
873 "\\([0-9]+\\)\\.\\([0-9]+\\)\\.\\([0-9]+\\)\\.\\([0-9]+\\)\\.\\([0-9]+\\)\\.\\([0-9]+\\)"
43447
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
874 match-tag)
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
875 (let* ((year-tmp (string-to-number (match-string 1 match-tag)))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
876 (month (string-to-number (match-string 2 match-tag)))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
877 (day (string-to-number (match-string 3 match-tag)))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
878 (hour (string-to-number (match-string 4 match-tag)))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
879 (min (string-to-number (match-string 5 match-tag)))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
880 (sec (string-to-number (match-string 6 match-tag)))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
881 ;; Years 0..68 are 2000..2068.
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
882 ;; Years 69..99 are 1969..1999.
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
883 (year (+ (cond ((> 69 year-tmp) 2000)
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
884 ((> 100 year-tmp) 1900)
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
885 (t 0))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
886 year-tmp)))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
887 (setq tag (encode-time sec min hour day month year))))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
888 ;; Sticky Tag name or revision number
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
889 ((eq type 'symbolic-name) (setq tag match-tag))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
890 ((eq type 'revision-number) (setq tag match-tag))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
891 ;; Default is no sticky tag at all
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
892 (t nil))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
893 (cond ((eq vc-cvs-sticky-tag-display nil) nil)
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
894 ((eq vc-cvs-sticky-tag-display t)
44436
f9db51bb423b (vc-cvs-checkin): Pass the required argument to `error'.
Sam Steingold <sds@gnu.org>
parents: 44197
diff changeset
895 (cond ((eq type 'date) (format-time-string
43447
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
896 vc-cvs-sticky-date-format-string
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
897 tag))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
898 ((eq type 'symbolic-name) tag)
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
899 ((eq type 'revision-number) tag)
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
900 (t nil)))
44436
f9db51bb423b (vc-cvs-checkin): Pass the required argument to `error'.
Sam Steingold <sds@gnu.org>
parents: 44197
diff changeset
901 ((functionp vc-cvs-sticky-tag-display)
43447
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
902 (funcall vc-cvs-sticky-tag-display tag type))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
903 (t nil)))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
904
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
905 (set-match-data data))))
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
906
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
907 (defun vc-cvs-parse-entry (file &optional set-state)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
908 "Parse a line from CVS/Entries.
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
909 Compare modification time to that of the FILE, set file properties
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
910 accordingly. However, `vc-state' is set only if optional arg SET-STATE
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
911 is non-nil."
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
912 (cond
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
913 ;; entry for a "locally added" file (not yet committed)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
914 ((looking-at "/[^/]+/0/")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
915 (vc-file-setprop file 'vc-checkout-time 0)
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
916 (vc-file-setprop file 'vc-workfile-version "0")
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
917 (if set-state (vc-file-setprop file 'vc-state 'edited)))
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
918 ;; normal entry
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
919 ((looking-at
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
920 (concat "/[^/]+"
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
921 ;; revision
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
922 "/\\([^/]*\\)"
50321
17ff9d10125f (vc-cvs-parse-entry): Make sure a file with conflicts
Andreas Schwab <schwab@suse.de>
parents: 49822
diff changeset
923 ;; timestamp and optional conflict field
17ff9d10125f (vc-cvs-parse-entry): Make sure a file with conflicts
Andreas Schwab <schwab@suse.de>
parents: 49822
diff changeset
924 "/\\([^/]*\\)/"
43447
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
925 ;; options
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
926 "\\([^/]*\\)/"
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
927 ;; sticky tag
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
928 "\\(.\\|\\)" ;Sticky tag type (date or tag name, could be empty)
79cf46e34420 Patch by Martin.Lorentzson@telia.com.
André Spiegel <spiegel@gnu.org>
parents: 42657
diff changeset
929 "\\(.*\\)")) ;Sticky tag
33560
da206bbad86b Functions reordered.
André Spiegel <spiegel@gnu.org>
parents: 33554
diff changeset
930 (vc-file-setprop file 'vc-workfile-version (match-string 1))
44104
985526b08270 (vc-cvs-registered, vc-cvs-dir-state-heuristic):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44005
diff changeset
931 (vc-file-setprop file 'vc-cvs-sticky-tag
52624
2b71ed49b8c6 (vc-cvs-parse-entry): Don't require parse-time, because it's
André Spiegel <spiegel@gnu.org>
parents: 52602
diff changeset
932 (vc-cvs-parse-sticky-tag (match-string 4)
2b71ed49b8c6 (vc-cvs-parse-entry): Don't require parse-time, because it's
André Spiegel <spiegel@gnu.org>
parents: 52602
diff changeset
933 (match-string 5)))
52602
04c9b596cce6 (vc-cvs-parse-entry): Restore the code to compare time stamps
André Spiegel <spiegel@gnu.org>
parents: 52401
diff changeset
934 ;; Compare checkout time and modification time.
04c9b596cce6 (vc-cvs-parse-entry): Restore the code to compare time stamps
André Spiegel <spiegel@gnu.org>
parents: 52401
diff changeset
935 ;; This is intentionally different from the algorithm that CVS uses
52624
2b71ed49b8c6 (vc-cvs-parse-entry): Don't require parse-time, because it's
André Spiegel <spiegel@gnu.org>
parents: 52602
diff changeset
936 ;; (which is based on textual comparison), because there can be problems
52602
04c9b596cce6 (vc-cvs-parse-entry): Restore the code to compare time stamps
André Spiegel <spiegel@gnu.org>
parents: 52401
diff changeset
937 ;; generating a time string that looks exactly like the one from CVS.
52717
9197177c5f99 (vc-cvs-parse-entry): Revert last change to allow
Dave Love <fx@gnu.org>
parents: 52624
diff changeset
938 (let ((mtime (nth 5 (file-attributes file))))
9197177c5f99 (vc-cvs-parse-entry): Revert last change to allow
Dave Love <fx@gnu.org>
parents: 52624
diff changeset
939 (require 'parse-time)
9197177c5f99 (vc-cvs-parse-entry): Revert last change to allow
Dave Love <fx@gnu.org>
parents: 52624
diff changeset
940 (let ((parsed-time
9197177c5f99 (vc-cvs-parse-entry): Revert last change to allow
Dave Love <fx@gnu.org>
parents: 52624
diff changeset
941 (parse-time-string (concat (match-string 2) " +0000"))))
9197177c5f99 (vc-cvs-parse-entry): Revert last change to allow
Dave Love <fx@gnu.org>
parents: 52624
diff changeset
942 (cond ((and (not (string-match "\\+" (match-string 2)))
9197177c5f99 (vc-cvs-parse-entry): Revert last change to allow
Dave Love <fx@gnu.org>
parents: 52624
diff changeset
943 (car parsed-time)
9197177c5f99 (vc-cvs-parse-entry): Revert last change to allow
Dave Love <fx@gnu.org>
parents: 52624
diff changeset
944 (equal mtime (apply 'encode-time parsed-time)))
9197177c5f99 (vc-cvs-parse-entry): Revert last change to allow
Dave Love <fx@gnu.org>
parents: 52624
diff changeset
945 (vc-file-setprop file 'vc-checkout-time mtime)
9197177c5f99 (vc-cvs-parse-entry): Revert last change to allow
Dave Love <fx@gnu.org>
parents: 52624
diff changeset
946 (if set-state (vc-file-setprop file 'vc-state 'up-to-date)))
9197177c5f99 (vc-cvs-parse-entry): Revert last change to allow
Dave Love <fx@gnu.org>
parents: 52624
diff changeset
947 (t
9197177c5f99 (vc-cvs-parse-entry): Revert last change to allow
Dave Love <fx@gnu.org>
parents: 52624
diff changeset
948 (vc-file-setprop file 'vc-checkout-time 0)
9197177c5f99 (vc-cvs-parse-entry): Revert last change to allow
Dave Love <fx@gnu.org>
parents: 52624
diff changeset
949 (if set-state (vc-file-setprop file 'vc-state 'edited)))))))))
44436
f9db51bb423b (vc-cvs-checkin): Pass the required argument to `error'.
Sam Steingold <sds@gnu.org>
parents: 44197
diff changeset
950
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
951 (provide 'vc-cvs)
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
952
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51733
diff changeset
953 ;;; arch-tag: 60e1402a-aa53-4607-927a-cf74f144b432
31384
f6cb7dfe5e7c (vc-cvs-show-log-entry): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
954 ;;; vc-cvs.el ends here