annotate lisp/vc-svn.el @ 98182:19ec1646fe6c

The Rmail/mbox merge has been abandoned in favor of a restart using the current rmail.el file. A comprehensive list of changes will be supplied when pmail.el is morphed back into rmail.el The current status is that pmail.el supports basic Rmail navigation (no summary support) and shows the current message in a special buffer using buffer-swap-text. No decoding is done yet. That is the next step.
author Paul Reilly <pmr@pajato.com>
date Mon, 15 Sep 2008 20:56:53 +0000
parents 4a399b9bc4b9
children e8a025cdac4a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1 ;;; vc-svn.el --- non-resident support for Subversion version-control
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2
79721
73661ddc7ac7 Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78914
diff changeset
3 ;; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
4
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
5 ;; Author: FSF (see vc.el for full credits)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
6 ;; Maintainer: Stefan Monnier <monnier@gnu.org>
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
7
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
9
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94563
diff changeset
10 ;; GNU Emacs is free software: you can redistribute it and/or modify
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94563
diff changeset
12 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94563
diff changeset
13 ;; (at your option) any later version.
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
14
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
18 ;; GNU General Public License for more details.
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
19
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94563
diff changeset
21 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
22
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
23 ;;; Commentary:
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
24
85122
c2cc930bdd9e This is the actual fix....
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85114
diff changeset
25 ;; Sync'd with Subversion's vc-svn.el as of revision 5801. but this version
c2cc930bdd9e This is the actual fix....
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85114
diff changeset
26 ;; has been extensively modified since to handle filesets.
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
27
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
28 ;;; Code:
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
29
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
30 (eval-when-compile
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
31 (require 'vc))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
32
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
33 ;;;
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
34 ;;; Customization options
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
35 ;;;
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
36
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
37 (defcustom vc-svn-global-switches nil
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
38 "*Global switches to pass to any SVN command."
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
39 :type '(choice (const :tag "None" nil)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
40 (string :tag "Argument String")
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
41 (repeat :tag "Argument List"
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
42 :value ("")
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
43 string))
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59446
diff changeset
44 :version "22.1"
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
45 :group 'vc)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
46
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
47 (defcustom vc-svn-register-switches nil
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
48 "*Extra switches for registering a file into SVN.
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
49 A string or list of strings passed to the checkin program by
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
50 \\[vc-register]."
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
51 :type '(choice (const :tag "None" nil)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
52 (string :tag "Argument String")
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
53 (repeat :tag "Argument List"
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
54 :value ("")
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
55 string))
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59446
diff changeset
56 :version "22.1"
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
57 :group 'vc)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
58
52033
9b5f3940a1ef (vc-svn-diff-switches): Don't default to vc-diff-switches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51732
diff changeset
59 (defcustom vc-svn-diff-switches
9b5f3940a1ef (vc-svn-diff-switches): Don't default to vc-diff-switches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51732
diff changeset
60 t ;`svn' doesn't support common args like -c or -b.
9b5f3940a1ef (vc-svn-diff-switches): Don't default to vc-diff-switches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51732
diff changeset
61 "String or list of strings specifying extra switches for svn diff under VC.
9b5f3940a1ef (vc-svn-diff-switches): Don't default to vc-diff-switches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51732
diff changeset
62 If nil, use the value of `vc-diff-switches'.
9b5f3940a1ef (vc-svn-diff-switches): Don't default to vc-diff-switches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51732
diff changeset
63 If you want to force an empty list of arguments, use t."
9b5f3940a1ef (vc-svn-diff-switches): Don't default to vc-diff-switches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51732
diff changeset
64 :type '(choice (const :tag "Unspecified" nil)
9b5f3940a1ef (vc-svn-diff-switches): Don't default to vc-diff-switches.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51732
diff changeset
65 (const :tag "None" t)
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
66 (string :tag "Argument String")
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
67 (repeat :tag "Argument List"
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
68 :value ("")
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
69 string))
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59446
diff changeset
70 :version "22.1"
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
71 :group 'vc)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
72
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
73 (defcustom vc-svn-header (or (cdr (assoc 'SVN vc-header-alist)) '("\$Id\$"))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
74 "*Header keywords to be inserted by `vc-insert-headers'."
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59446
diff changeset
75 :version "22.1"
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
76 :type '(repeat string)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
77 :group 'vc)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
78
76025
a4103f62dec5 Remove the code inherited from CVSREAD and `cvs edit'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75719
diff changeset
79 ;; We want to autoload it for use by the autoloaded version of
a4103f62dec5 Remove the code inherited from CVSREAD and `cvs edit'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75719
diff changeset
80 ;; vc-svn-registered, but we want the value to be compiled at startup, not
a4103f62dec5 Remove the code inherited from CVSREAD and `cvs edit'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75719
diff changeset
81 ;; at dump time.
a4103f62dec5 Remove the code inherited from CVSREAD and `cvs edit'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75719
diff changeset
82 ;; ;;;###autoload
a4103f62dec5 Remove the code inherited from CVSREAD and `cvs edit'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75719
diff changeset
83 (defconst vc-svn-admin-directory
a4103f62dec5 Remove the code inherited from CVSREAD and `cvs edit'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75719
diff changeset
84 (cond ((and (memq system-type '(cygwin windows-nt ms-dos))
73848
299d3322c8be Fix typo in previous commit.
Chong Yidong <cyd@stupidchicken.com>
parents: 73847
diff changeset
85 (getenv "SVN_ASP_DOT_NET_HACK"))
299d3322c8be Fix typo in previous commit.
Chong Yidong <cyd@stupidchicken.com>
parents: 73847
diff changeset
86 "_svn")
299d3322c8be Fix typo in previous commit.
Chong Yidong <cyd@stupidchicken.com>
parents: 73847
diff changeset
87 (t ".svn"))
299d3322c8be Fix typo in previous commit.
Chong Yidong <cyd@stupidchicken.com>
parents: 73847
diff changeset
88 "The name of the \".svn\" subdirectory or its equivalent.")
299d3322c8be Fix typo in previous commit.
Chong Yidong <cyd@stupidchicken.com>
parents: 73847
diff changeset
89
81968
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
90 ;;; Properties of the backend
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
91
94563
a0bb8ca25a33 Clean up vc*-revision-granularity and vc*-checkout-model.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94521
diff changeset
92 (defun vc-svn-revision-granularity () 'repository)
a0bb8ca25a33 Clean up vc*-revision-granularity and vc*-checkout-model.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94521
diff changeset
93 (defun vc-svn-checkout-model (files) 'implicit)
a0bb8ca25a33 Clean up vc*-revision-granularity and vc*-checkout-model.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94521
diff changeset
94
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
95 ;;;
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
96 ;;; State-querying functions
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
97 ;;;
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
98
73848
299d3322c8be Fix typo in previous commit.
Chong Yidong <cyd@stupidchicken.com>
parents: 73847
diff changeset
99 ;;; vc-svn-admin-directory is generally not defined when the
299d3322c8be Fix typo in previous commit.
Chong Yidong <cyd@stupidchicken.com>
parents: 73847
diff changeset
100 ;;; autoloaded function is called.
299d3322c8be Fix typo in previous commit.
Chong Yidong <cyd@stupidchicken.com>
parents: 73847
diff changeset
101
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
102 ;;;###autoload (defun vc-svn-registered (f)
73848
299d3322c8be Fix typo in previous commit.
Chong Yidong <cyd@stupidchicken.com>
parents: 73847
diff changeset
103 ;;;###autoload (let ((admin-dir (cond ((and (eq system-type 'windows-nt)
76025
a4103f62dec5 Remove the code inherited from CVSREAD and `cvs edit'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75719
diff changeset
104 ;;;###autoload (getenv "SVN_ASP_DOT_NET_HACK"))
a4103f62dec5 Remove the code inherited from CVSREAD and `cvs edit'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75719
diff changeset
105 ;;;###autoload "_svn")
a4103f62dec5 Remove the code inherited from CVSREAD and `cvs edit'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75719
diff changeset
106 ;;;###autoload (t ".svn"))))
73848
299d3322c8be Fix typo in previous commit.
Chong Yidong <cyd@stupidchicken.com>
parents: 73847
diff changeset
107 ;;;###autoload (when (file-readable-p (expand-file-name
76025
a4103f62dec5 Remove the code inherited from CVSREAD and `cvs edit'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75719
diff changeset
108 ;;;###autoload (concat admin-dir "/entries")
a4103f62dec5 Remove the code inherited from CVSREAD and `cvs edit'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75719
diff changeset
109 ;;;###autoload (file-name-directory f)))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
110 ;;;###autoload (load "vc-svn")
73848
299d3322c8be Fix typo in previous commit.
Chong Yidong <cyd@stupidchicken.com>
parents: 73847
diff changeset
111 ;;;###autoload (vc-svn-registered f))))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
112
50999
c09edac18f97 (completion-ignored-extensions): Add .svn.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50927
diff changeset
113 ;;;###autoload
c09edac18f97 (completion-ignored-extensions): Add .svn.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50927
diff changeset
114 (add-to-list 'completion-ignored-extensions ".svn/")
c09edac18f97 (completion-ignored-extensions): Add .svn.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50927
diff changeset
115
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
116 (defun vc-svn-registered (file)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
117 "Check if FILE is SVN registered."
73848
299d3322c8be Fix typo in previous commit.
Chong Yidong <cyd@stupidchicken.com>
parents: 73847
diff changeset
118 (when (file-readable-p (expand-file-name (concat vc-svn-admin-directory
299d3322c8be Fix typo in previous commit.
Chong Yidong <cyd@stupidchicken.com>
parents: 73847
diff changeset
119 "/entries")
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
120 (file-name-directory file)))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
121 (with-temp-buffer
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
122 (cd (file-name-directory file))
68651
3bd95f4f2941 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 67553
diff changeset
123 (let ((status
67553
10707dfc70f3 (vc-svn-registered): Use it to avoid popping up a spurious
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67547
diff changeset
124 (condition-case nil
10707dfc70f3 (vc-svn-registered): Use it to avoid popping up a spurious
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67547
diff changeset
125 ;; Ignore all errors.
10707dfc70f3 (vc-svn-registered): Use it to avoid popping up a spurious
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67547
diff changeset
126 (vc-svn-command t t file "status" "-v")
10707dfc70f3 (vc-svn-registered): Use it to avoid popping up a spurious
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67547
diff changeset
127 ;; Some problem happened. E.g. We can't find an `svn'
10707dfc70f3 (vc-svn-registered): Use it to avoid popping up a spurious
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67547
diff changeset
128 ;; executable. We used to only catch `file-error' but when
10707dfc70f3 (vc-svn-registered): Use it to avoid popping up a spurious
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67547
diff changeset
129 ;; the process is run on a remote host via Tramp, the error
10707dfc70f3 (vc-svn-registered): Use it to avoid popping up a spurious
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67547
diff changeset
130 ;; is only reported via the exit status which is turned into
10707dfc70f3 (vc-svn-registered): Use it to avoid popping up a spurious
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67547
diff changeset
131 ;; an `error' by vc-do-command.
10707dfc70f3 (vc-svn-registered): Use it to avoid popping up a spurious
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67547
diff changeset
132 (error nil))))
10707dfc70f3 (vc-svn-registered): Use it to avoid popping up a spurious
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 67547
diff changeset
133 (when (eq 0 status)
87864
54863df609a3 (vc-svn-registered): Make it work for non-existent
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87853
diff changeset
134 (let ((parsed (vc-svn-parse-status file)))
54863df609a3 (vc-svn-registered): Make it work for non-existent
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87853
diff changeset
135 (and parsed (not (memq parsed '(ignored unregistered))))))))))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
136
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
137 (defun vc-svn-state (file &optional localp)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
138 "SVN-specific version of `vc-state'."
50927
6f478e2878c7 (vc-svn-rename-file): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50922
diff changeset
139 (setq localp (or localp (vc-stay-local-p file)))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
140 (with-temp-buffer
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
141 (cd (file-name-directory file))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
142 (vc-svn-command t 0 file "status" (if localp "-v" "-u"))
73444
ee7eeb5732b2 (vc-svn-parse-status): Remove unused arg `localp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68740
diff changeset
143 (vc-svn-parse-status file)))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
144
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
145 (defun vc-svn-state-heuristic (file)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
146 "SVN-specific state heuristic."
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
147 (vc-svn-state file 'local))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
148
94003
2ecb2ea8d5b5 Change `dir-status' to not take (and pass) status-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93956
diff changeset
149 (defun vc-svn-after-dir-status (callback)
87853
cec6a1fe32a4 * vc-svn.el (vc-svn-after-dir-status): New function.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87845
diff changeset
150 (let ((state-map '((?A . added)
94006
a4655455212b (vc-svn-after-dir-status): Complete last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94003
diff changeset
151 (?C . conflict)
a4655455212b (vc-svn-after-dir-status): Complete last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94003
diff changeset
152 (?D . removed)
a4655455212b (vc-svn-after-dir-status): Complete last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94003
diff changeset
153 (?I . ignored)
a4655455212b (vc-svn-after-dir-status): Complete last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94003
diff changeset
154 (?M . edited)
a4655455212b (vc-svn-after-dir-status): Complete last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94003
diff changeset
155 (?R . removed)
a4655455212b (vc-svn-after-dir-status): Complete last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94003
diff changeset
156 (?? . unregistered)
a4655455212b (vc-svn-after-dir-status): Complete last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94003
diff changeset
157 ;; This is what vc-svn-parse-status does.
a4655455212b (vc-svn-after-dir-status): Complete last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94003
diff changeset
158 (?~ . edited)))
87853
cec6a1fe32a4 * vc-svn.el (vc-svn-after-dir-status): New function.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87845
diff changeset
159 result)
cec6a1fe32a4 * vc-svn.el (vc-svn-after-dir-status): New function.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87845
diff changeset
160 (goto-char (point-min))
cec6a1fe32a4 * vc-svn.el (vc-svn-after-dir-status): New function.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87845
diff changeset
161 (while (re-search-forward "^\\(.\\)..... \\(.*\\)$" nil t)
cec6a1fe32a4 * vc-svn.el (vc-svn-after-dir-status): New function.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87845
diff changeset
162 (let ((state (cdr (assq (aref (match-string 1) 0) state-map)))
cec6a1fe32a4 * vc-svn.el (vc-svn-after-dir-status): New function.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87845
diff changeset
163 (filename (match-string 2)))
cec6a1fe32a4 * vc-svn.el (vc-svn-after-dir-status): New function.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87845
diff changeset
164 (when state
93461
3afeea9a48a3 * vc.el (vc-status-add-entry): Assume ENTRY is a list not a cons.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93382
diff changeset
165 (setq result (cons (list filename state) result)))))
94006
a4655455212b (vc-svn-after-dir-status): Complete last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94003
diff changeset
166 (funcall callback result)))
87853
cec6a1fe32a4 * vc-svn.el (vc-svn-after-dir-status): New function.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87845
diff changeset
167
94003
2ecb2ea8d5b5 Change `dir-status' to not take (and pass) status-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93956
diff changeset
168 (defun vc-svn-dir-status (dir callback)
87853
cec6a1fe32a4 * vc-svn.el (vc-svn-after-dir-status): New function.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87845
diff changeset
169 "Run 'svn status' for DIR and update BUFFER via CALLBACK.
cec6a1fe32a4 * vc-svn.el (vc-svn-after-dir-status): New function.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87845
diff changeset
170 CALLBACK is called as (CALLBACK RESULT BUFFER), where
cec6a1fe32a4 * vc-svn.el (vc-svn-after-dir-status): New function.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87845
diff changeset
171 RESULT is a list of conses (FILE . STATE) for directory DIR."
93382
8e46096e0cb3 * vc.el (vc-status-menu-map, vc-status-mode-map): Bind vc-revert.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93124
diff changeset
172 (vc-svn-command (current-buffer) 'async nil "status")
8e46096e0cb3 * vc.el (vc-status-menu-map, vc-status-mode-map): Bind vc-revert.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93124
diff changeset
173 (vc-exec-after
94003
2ecb2ea8d5b5 Change `dir-status' to not take (and pass) status-buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93956
diff changeset
174 `(vc-svn-after-dir-status (quote ,callback))))
87845
800f4ac6c848 * vc-svn.el (vc-svn-dir-status): New function.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87785
diff changeset
175
95048
883c17cb4544 Add extra-headers method for SVN.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 95020
diff changeset
176 (defun vc-svn-status-extra-headers (dir)
883c17cb4544 Add extra-headers method for SVN.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 95020
diff changeset
177 "Generate extra status headers for a Subversion working copy."
883c17cb4544 Add extra-headers method for SVN.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 95020
diff changeset
178 (vc-svn-command "*vc*" 0 nil "info")
883c17cb4544 Add extra-headers method for SVN.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 95020
diff changeset
179 (let ((repo
96003
243cf028ce86 (log-view-per-file-logs): Pacify byte compiler.
Juanma Barranquero <lekktu@gmail.com>
parents: 95966
diff changeset
180 (save-excursion
95048
883c17cb4544 Add extra-headers method for SVN.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 95020
diff changeset
181 (and (progn
883c17cb4544 Add extra-headers method for SVN.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 95020
diff changeset
182 (set-buffer "*vc*")
883c17cb4544 Add extra-headers method for SVN.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 95020
diff changeset
183 (goto-char (point-min))
883c17cb4544 Add extra-headers method for SVN.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 95020
diff changeset
184 (re-search-forward "Repository Root: *\\(.*\\)" nil t))
883c17cb4544 Add extra-headers method for SVN.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 95020
diff changeset
185 (match-string 1)))))
883c17cb4544 Add extra-headers method for SVN.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 95020
diff changeset
186 (concat
883c17cb4544 Add extra-headers method for SVN.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 95020
diff changeset
187 (cond (repo
883c17cb4544 Add extra-headers method for SVN.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 95020
diff changeset
188 (concat
883c17cb4544 Add extra-headers method for SVN.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 95020
diff changeset
189 (propertize "Repository : " 'face 'font-lock-type-face)
883c17cb4544 Add extra-headers method for SVN.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 95020
diff changeset
190 (propertize repo 'face 'font-lock-variable-name-face)))
883c17cb4544 Add extra-headers method for SVN.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 95020
diff changeset
191 (t "")))))
883c17cb4544 Add extra-headers method for SVN.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 95020
diff changeset
192
85139
8ba0e30716a5 Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85122
diff changeset
193 (defun vc-svn-working-revision (file)
8ba0e30716a5 Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85122
diff changeset
194 "SVN-specific version of `vc-working-revision'."
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
195 ;; There is no need to consult RCS headers under SVN, because we
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
196 ;; get the workfile version for free when we recognize that a file
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
197 ;; is registered in SVN.
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
198 (vc-svn-registered file)
85139
8ba0e30716a5 Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85122
diff changeset
199 (vc-file-getprop file 'vc-working-revision))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
200
51732
f43bd5204ab4 (vc-svn-use-edit): Make it into a const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50999
diff changeset
201 ;; vc-svn-mode-line-string doesn't exist because the default implementation
f43bd5204ab4 (vc-svn-use-edit): Make it into a const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50999
diff changeset
202 ;; works just fine.
f43bd5204ab4 (vc-svn-use-edit): Make it into a const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50999
diff changeset
203
85141
b16f7408cd3f Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85139
diff changeset
204 (defun vc-svn-previous-revision (file rev)
68653
61cc95860e05 (vc-svn-previous-version, vc-svn-next-version): New funcs.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68651
diff changeset
205 (let ((newrev (1- (string-to-number rev))))
61cc95860e05 (vc-svn-previous-version, vc-svn-next-version): New funcs.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68651
diff changeset
206 (when (< 0 newrev)
61cc95860e05 (vc-svn-previous-version, vc-svn-next-version): New funcs.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68651
diff changeset
207 (number-to-string newrev))))
61cc95860e05 (vc-svn-previous-version, vc-svn-next-version): New funcs.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68651
diff changeset
208
85141
b16f7408cd3f Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85139
diff changeset
209 (defun vc-svn-next-revision (file rev)
68653
61cc95860e05 (vc-svn-previous-version, vc-svn-next-version): New funcs.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68651
diff changeset
210 (let ((newrev (1+ (string-to-number rev))))
85141
b16f7408cd3f Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85139
diff changeset
211 ;; The "working revision" is an uneasy conceptual fit under Subversion;
68653
61cc95860e05 (vc-svn-previous-version, vc-svn-next-version): New funcs.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68651
diff changeset
212 ;; we use it as the upper bound until a better idea comes along. If the
61cc95860e05 (vc-svn-previous-version, vc-svn-next-version): New funcs.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68651
diff changeset
213 ;; workfile version W coincides with the tree's latest revision R, then
61cc95860e05 (vc-svn-previous-version, vc-svn-next-version): New funcs.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68651
diff changeset
214 ;; this check prevents a "no such revision: R+1" error. Otherwise, it
61cc95860e05 (vc-svn-previous-version, vc-svn-next-version): New funcs.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68651
diff changeset
215 ;; inhibits showing of W+1 through R, which could be considered anywhere
61cc95860e05 (vc-svn-previous-version, vc-svn-next-version): New funcs.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68651
diff changeset
216 ;; from gracious to impolite.
85139
8ba0e30716a5 Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85122
diff changeset
217 (unless (< (string-to-number (vc-file-getprop file 'vc-working-revision))
68653
61cc95860e05 (vc-svn-previous-version, vc-svn-next-version): New funcs.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68651
diff changeset
218 newrev)
61cc95860e05 (vc-svn-previous-version, vc-svn-next-version): New funcs.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68651
diff changeset
219 (number-to-string newrev))))
61cc95860e05 (vc-svn-previous-version, vc-svn-next-version): New funcs.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68651
diff changeset
220
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
221
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
222 ;;;
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
223 ;;; State-changing functions
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
224 ;;;
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
225
81968
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
226 (defun vc-svn-create-repo ()
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
227 "Create a new SVN repository."
94847
5e64dca662f0 Remove assumption about what nil means as a first arument to vc-do-command.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94806
diff changeset
228 (vc-do-command "*vc*" 0 "svnadmin" '("create" "SVN"))
5e64dca662f0 Remove assumption about what nil means as a first arument to vc-do-command.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94806
diff changeset
229 (vc-do-command "*vc*" 0 "svn" '(".")
81968
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
230 "checkout" (concat "file://" default-directory "SVN")))
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
231
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
232 (defun vc-svn-register (files &optional rev comment)
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
233 "Register FILES into the SVN version-control system.
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
234 The COMMENT argument is ignored This does an add but not a commit.
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
235
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
236 `vc-register-switches' and `vc-svn-register-switches' are passed to
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
237 the SVN command (in that order)."
81968
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
238 (apply 'vc-svn-command nil 0 files "add" (vc-switches 'SVN 'register)))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
239
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
240 (defun vc-svn-responsible-p (file)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
241 "Return non-nil if SVN thinks it is responsible for FILE."
73848
299d3322c8be Fix typo in previous commit.
Chong Yidong <cyd@stupidchicken.com>
parents: 73847
diff changeset
242 (file-directory-p (expand-file-name vc-svn-admin-directory
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
243 (if (file-directory-p file)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
244 file
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
245 (file-name-directory file)))))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
246
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
247 (defalias 'vc-svn-could-register 'vc-svn-responsible-p
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
248 "Return non-nil if FILE could be registered in SVN.
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
249 This is only possible if SVN is responsible for FILE's directory.")
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
250
81968
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
251 (defun vc-svn-checkin (files rev comment)
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
252 "SVN-specific version of `vc-backend-checkin'."
91989
582312e95923 (vc-svn-program): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 91979
diff changeset
253 (if rev (error "Committing to a specific revision is unsupported in SVN"))
55900
d8a2b8a11274 2004-06-03 Karl Fogel <kfogel@red-bean.com>
Karl Fogel <kfogel@red-bean.com>
parents: 55004
diff changeset
254 (let ((status (apply
81968
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
255 'vc-svn-command nil 1 files "ci"
55900
d8a2b8a11274 2004-06-03 Karl Fogel <kfogel@red-bean.com>
Karl Fogel <kfogel@red-bean.com>
parents: 55004
diff changeset
256 (nconc (list "-m" comment) (vc-switches 'SVN 'checkin)))))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
257 (set-buffer "*vc*")
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
258 (goto-char (point-min))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
259 (unless (equal status 0)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
260 ;; Check checkin problem.
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
261 (cond
50900
d853a98e1678 (vc-svn-dired-state-info): Use `added' for added files and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50823
diff changeset
262 ((search-forward "Transaction is out of date" nil t)
81968
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
263 (mapc (lambda (file) (vc-file-setprop file 'vc-state 'needs-merge))
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
264 files)
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
265 (error (substitute-command-keys
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
266 (concat "Up-to-date check failed: "
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
267 "type \\[vc-next-action] to merge in changes"))))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
268 (t
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
269 (pop-to-buffer (current-buffer))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
270 (goto-char (point-min))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
271 (shrink-window-if-larger-than-buffer)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
272 (error "Check-in failed"))))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
273 ;; Update file properties
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
274 ;; (vc-file-setprop
85139
8ba0e30716a5 Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85122
diff changeset
275 ;; file 'vc-working-revision
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
276 ;; (vc-parse-buffer "^\\(new\\|initial\\) revision: \\([0-9.]+\\)" 2))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
277 ))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
278
85139
8ba0e30716a5 Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85122
diff changeset
279 (defun vc-svn-find-revision (file rev buffer)
81968
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
280 "SVN-specific retrieval of a specified version into a buffer."
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
281 (apply 'vc-svn-command
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
282 buffer 0 file
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
283 "cat"
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
284 (and rev (not (string= rev ""))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
285 (concat "-r" rev))
50900
d853a98e1678 (vc-svn-dired-state-info): Use `added' for added files and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50823
diff changeset
286 (vc-switches 'SVN 'checkout)))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
287
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
288 (defun vc-svn-checkout (file &optional editable rev)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
289 (message "Checking out %s..." file)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
290 (with-current-buffer (or (get-file-buffer file) (current-buffer))
94805
89d37b54b964 * vc.el (vc-mark-resolved): Add `backend' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94729
diff changeset
291 (vc-svn-update file editable rev (vc-switches 'SVN 'checkout)))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
292 (vc-mode-line file)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
293 (message "Checking out %s...done" file))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
294
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
295 (defun vc-svn-update (file editable rev switches)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
296 (if (and (file-exists-p file) (not rev))
76025
a4103f62dec5 Remove the code inherited from CVSREAD and `cvs edit'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75719
diff changeset
297 ;; If no revision was specified, there's nothing to do.
a4103f62dec5 Remove the code inherited from CVSREAD and `cvs edit'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75719
diff changeset
298 nil
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
299 ;; Check out a particular version (or recreate the file).
85139
8ba0e30716a5 Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85122
diff changeset
300 (vc-file-setprop file 'vc-working-revision nil)
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
301 (apply 'vc-svn-command nil 0 file
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
302 "update"
51732
f43bd5204ab4 (vc-svn-use-edit): Make it into a const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50999
diff changeset
303 (cond
f43bd5204ab4 (vc-svn-use-edit): Make it into a const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50999
diff changeset
304 ((null rev) "-rBASE")
f43bd5204ab4 (vc-svn-use-edit): Make it into a const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50999
diff changeset
305 ((or (eq rev t) (equal rev "")) nil)
f43bd5204ab4 (vc-svn-use-edit): Make it into a const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50999
diff changeset
306 (t (concat "-r" rev)))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
307 switches)))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
308
50999
c09edac18f97 (completion-ignored-extensions): Add .svn.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50927
diff changeset
309 (defun vc-svn-delete-file (file)
c09edac18f97 (completion-ignored-extensions): Add .svn.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50927
diff changeset
310 (vc-svn-command nil 0 file "remove"))
c09edac18f97 (completion-ignored-extensions): Add .svn.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50927
diff changeset
311
50922
bdc62a6694f7 (vc-svn-rename-file): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50900
diff changeset
312 (defun vc-svn-rename-file (old new)
bdc62a6694f7 (vc-svn-rename-file): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50900
diff changeset
313 (vc-svn-command nil 0 new "move" (file-relative-name old)))
bdc62a6694f7 (vc-svn-rename-file): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50900
diff changeset
314
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
315 (defun vc-svn-revert (file &optional contents-done)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
316 "Revert FILE to the version it was based on."
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
317 (unless contents-done
76025
a4103f62dec5 Remove the code inherited from CVSREAD and `cvs edit'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75719
diff changeset
318 (vc-svn-command nil 0 file "revert")))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
319
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
320 (defun vc-svn-merge (file first-version &optional second-version)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
321 "Merge changes into current working copy of FILE.
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
322 The changes are between FIRST-VERSION and SECOND-VERSION."
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
323 (vc-svn-command nil 0 file
50822
0be6233722ec (vc-svn-merge): First attempt.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50821
diff changeset
324 "merge"
50823
83c8010f1eb2 (vc-svn-merge): Forgot quotes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50822
diff changeset
325 "-r" (if second-version
50822
0be6233722ec (vc-svn-merge): First attempt.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50821
diff changeset
326 (concat first-version ":" second-version)
0be6233722ec (vc-svn-merge): First attempt.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50821
diff changeset
327 first-version))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
328 (vc-file-setprop file 'vc-state 'edited)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
329 (with-current-buffer (get-buffer "*vc*")
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
330 (goto-char (point-min))
50822
0be6233722ec (vc-svn-merge): First attempt.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50821
diff changeset
331 (if (looking-at "C ")
0be6233722ec (vc-svn-merge): First attempt.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50821
diff changeset
332 1 ; signal conflict
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
333 0))) ; signal success
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
334
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
335 (defun vc-svn-merge-news (file)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
336 "Merge in any new changes made to FILE."
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
337 (message "Merging changes into %s..." file)
85139
8ba0e30716a5 Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85122
diff changeset
338 ;; (vc-file-setprop file 'vc-working-revision nil)
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
339 (vc-file-setprop file 'vc-checkout-time 0)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
340 (vc-svn-command nil 0 file "update")
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
341 ;; Analyze the merge result reported by SVN, and set
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
342 ;; file properties accordingly.
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
343 (with-current-buffer (get-buffer "*vc*")
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
344 (goto-char (point-min))
85141
b16f7408cd3f Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85139
diff changeset
345 ;; get new working revision
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
346 (if (re-search-forward
50821
33e415a24bb5 (vc-svn-merge-news): Adjust for subversion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50820
diff changeset
347 "^\\(Updated to\\|At\\) revision \\([0-9]+\\)" nil t)
85139
8ba0e30716a5 Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85122
diff changeset
348 (vc-file-setprop file 'vc-working-revision (match-string 2))
8ba0e30716a5 Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85122
diff changeset
349 (vc-file-setprop file 'vc-working-revision nil))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
350 ;; get file status
50821
33e415a24bb5 (vc-svn-merge-news): Adjust for subversion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50820
diff changeset
351 (goto-char (point-min))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
352 (prog1
50821
33e415a24bb5 (vc-svn-merge-news): Adjust for subversion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50820
diff changeset
353 (if (looking-at "At revision")
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
354 0 ;; there were no news; indicate success
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
355 (if (re-search-forward
75719
a8fd93a515a2 (vc-svn-merge-news): Understand the new format with two
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75233
diff changeset
356 ;; Newer SVN clients have 3 columns of chars (one for the
a8fd93a515a2 (vc-svn-merge-news): Understand the new format with two
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75233
diff changeset
357 ;; file's contents, then second for its properties, and the
a8fd93a515a2 (vc-svn-merge-news): Understand the new format with two
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75233
diff changeset
358 ;; third for lock-grabbing info), before the 2 spaces.
a8fd93a515a2 (vc-svn-merge-news): Understand the new format with two
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75233
diff changeset
359 ;; We also used to match the filename in column 0 without any
a8fd93a515a2 (vc-svn-merge-news): Understand the new format with two
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75233
diff changeset
360 ;; meta-info before it, but I believe this can never happen.
a8fd93a515a2 (vc-svn-merge-news): Understand the new format with two
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75233
diff changeset
361 (concat "^\\(\\([ACGDU]\\)\\(.[B ]\\)? \\)"
50821
33e415a24bb5 (vc-svn-merge-news): Adjust for subversion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50820
diff changeset
362 (regexp-quote (file-name-nondirectory file)))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
363 nil t)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
364 (cond
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
365 ;; Merge successful, we are in sync with repository now
75719
a8fd93a515a2 (vc-svn-merge-news): Understand the new format with two
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75233
diff changeset
366 ((string= (match-string 2) "U")
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
367 (vc-file-setprop file 'vc-state 'up-to-date)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
368 (vc-file-setprop file 'vc-checkout-time
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
369 (nth 5 (file-attributes file)))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
370 0);; indicate success to the caller
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
371 ;; Merge successful, but our own changes are still in the file
75719
a8fd93a515a2 (vc-svn-merge-news): Understand the new format with two
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75233
diff changeset
372 ((string= (match-string 2) "G")
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
373 (vc-file-setprop file 'vc-state 'edited)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
374 0);; indicate success to the caller
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
375 ;; Conflicts detected!
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
376 (t
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
377 (vc-file-setprop file 'vc-state 'edited)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
378 1);; signal the error to the caller
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
379 )
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
380 (pop-to-buffer "*vc*")
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
381 (error "Couldn't analyze svn update result")))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
382 (message "Merging changes into %s...done" file))))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
383
87518
78fc69cc7bef * vc-svn.el (vc-svn-modify-change comment): New function.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87514
diff changeset
384 (defun vc-svn-modify-change-comment (files rev comment)
78fc69cc7bef * vc-svn.el (vc-svn-modify-change comment): New function.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87514
diff changeset
385 "Modify the change comments for a specified REV.
78fc69cc7bef * vc-svn.el (vc-svn-modify-change comment): New function.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87514
diff changeset
386 You must have ssh access to the repository host, and the directory Emacs
93886
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
387 uses locally for temp files must also be writeable by you on that host.
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
388 This is only supported if the repository access method is either file://
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
389 or svn+ssh://."
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
390 (let (tempfile host remotefile directory fileurl-p)
87518
78fc69cc7bef * vc-svn.el (vc-svn-modify-change comment): New function.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87514
diff changeset
391 (with-temp-buffer
93886
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
392 (vc-do-command (current-buffer) 0 "svn" nil "info")
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
393 (goto-char (point-min))
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
394 (unless (re-search-forward "Repository Root: \\(file://\\(/.*\\)\\)\\|\\(svn\\+ssh://\\([^/]+\\)\\(/.*\\)\\)" nil t)
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
395 (error "Repository information is unavailable"))
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
396 (if (match-string 1)
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
397 (progn
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
398 (setq fileurl-p t)
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
399 (setq directory (match-string 2)))
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
400 (setq host (match-string 4))
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
401 (setq directory (match-string 5))
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
402 (setq remotefile (concat host ":" tempfile))))
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
403 (with-temp-file (setq tempfile (make-temp-file user-mail-address))
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
404 (insert comment))
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
405 (if fileurl-p
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
406 ;; Repository Root is a local file.
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
407 (progn
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
408 (unless (vc-do-command
94847
5e64dca662f0 Remove assumption about what nil means as a first arument to vc-do-command.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94806
diff changeset
409 "*vc*" 0 "svnadmin" nil
96003
243cf028ce86 (log-view-per-file-logs): Pacify byte compiler.
Juanma Barranquero <lekktu@gmail.com>
parents: 95966
diff changeset
410 "setlog" "--bypass-hooks" directory
93886
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
411 "-r" rev (format "%s" tempfile))
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
412 (error "Log edit failed"))
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
413 (delete-file tempfile))
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
414
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
415 ;; Remote repository, using svn+ssh.
94847
5e64dca662f0 Remove assumption about what nil means as a first arument to vc-do-command.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94806
diff changeset
416 (unless (vc-do-command "*vc*" 0 "scp" nil "-q" tempfile remotefile)
93886
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
417 (error "Copy of comment to %s failed" remotefile))
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
418 (unless (vc-do-command
94847
5e64dca662f0 Remove assumption about what nil means as a first arument to vc-do-command.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94806
diff changeset
419 "*vc*" 0 "ssh" nil "-q" host
93886
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
420 (format "svnadmin setlog --bypass-hooks %s -r %s %s; rm %s"
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
421 directory rev tempfile tempfile))
ed131d081eab (vc-svn-modify-change-comment): Add support for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93461
diff changeset
422 (error "Log edit failed")))))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
423
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
424 ;;;
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
425 ;;; History functions
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
426 ;;;
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
427
96003
243cf028ce86 (log-view-per-file-logs): Pacify byte compiler.
Juanma Barranquero <lekktu@gmail.com>
parents: 95966
diff changeset
428 (defvar log-view-per-file-logs)
243cf028ce86 (log-view-per-file-logs): Pacify byte compiler.
Juanma Barranquero <lekktu@gmail.com>
parents: 95966
diff changeset
429
95966
054335cbee3d * log-view.el (log-view-diff-changeset): New function.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 95048
diff changeset
430 (define-derived-mode vc-svn-log-view-mode log-view-mode "SVN-Log-View"
054335cbee3d * log-view.el (log-view-diff-changeset): New function.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 95048
diff changeset
431 (require 'add-log)
054335cbee3d * log-view.el (log-view-diff-changeset): New function.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 95048
diff changeset
432 (set (make-local-variable 'log-view-per-file-logs) nil))
054335cbee3d * log-view.el (log-view-diff-changeset): New function.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 95048
diff changeset
433
81968
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
434 (defun vc-svn-print-log (files &optional buffer)
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
435 "Get change log(s) associated with FILES."
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
436 (save-current-buffer
55004
ae9b6f1e3bdf (vc-svn-print-log, vc-svn-diff): Add optional BUFFER arg.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
437 (vc-setup-buffer buffer)
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
438 (let ((inhibit-read-only t))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
439 (goto-char (point-min))
87426
47c02bd68801 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87424
diff changeset
440 (if files
47c02bd68801 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87424
diff changeset
441 (dolist (file files)
47c02bd68801 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87424
diff changeset
442 (insert "Working file: " file "\n")
47c02bd68801 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87424
diff changeset
443 (vc-svn-command
47c02bd68801 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87424
diff changeset
444 buffer
47c02bd68801 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87424
diff changeset
445 'async
47c02bd68801 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87424
diff changeset
446 ;; (if (and (= (length files) 1) (vc-stay-local-p file)) 'async 0)
47c02bd68801 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87424
diff changeset
447 (list file)
47c02bd68801 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87424
diff changeset
448 "log"
47c02bd68801 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87424
diff changeset
449 ;; By default Subversion only shows the log up to the
47c02bd68801 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87424
diff changeset
450 ;; working revision, whereas we also want the log of the
47c02bd68801 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87424
diff changeset
451 ;; subsequent commits. At least that's what the
47c02bd68801 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87424
diff changeset
452 ;; vc-cvs.el code does.
47c02bd68801 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87424
diff changeset
453 "-rHEAD:0"))
47c02bd68801 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87424
diff changeset
454 ;; Dump log for the entire directory.
47c02bd68801 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87424
diff changeset
455 (vc-svn-command buffer 0 nil "log" "-rHEAD:0")))))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
456
81968
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
457 (defun vc-svn-diff (files &optional oldvers newvers buffer)
85141
b16f7408cd3f Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85139
diff changeset
458 "Get a difference report using SVN between two revisions of fileset FILES."
82909
01df6fb7c1e7 (vc-svn-diff): If the repository version of all the files is the same
Glenn Morris <rgm@gnu.org>
parents: 82140
diff changeset
459 (and oldvers
01df6fb7c1e7 (vc-svn-diff): If the repository version of all the files is the same
Glenn Morris <rgm@gnu.org>
parents: 82140
diff changeset
460 (catch 'no
01df6fb7c1e7 (vc-svn-diff): If the repository version of all the files is the same
Glenn Morris <rgm@gnu.org>
parents: 82140
diff changeset
461 (dolist (f files)
85139
8ba0e30716a5 Terminology cleanup.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85122
diff changeset
462 (or (equal oldvers (vc-working-revision f))
82909
01df6fb7c1e7 (vc-svn-diff): If the repository version of all the files is the same
Glenn Morris <rgm@gnu.org>
parents: 82140
diff changeset
463 (throw 'no nil)))
01df6fb7c1e7 (vc-svn-diff): If the repository version of all the files is the same
Glenn Morris <rgm@gnu.org>
parents: 82140
diff changeset
464 t)
01df6fb7c1e7 (vc-svn-diff): If the repository version of all the files is the same
Glenn Morris <rgm@gnu.org>
parents: 82140
diff changeset
465 ;; Use nil rather than the current revision because svn handles
01df6fb7c1e7 (vc-svn-diff): If the repository version of all the files is the same
Glenn Morris <rgm@gnu.org>
parents: 82140
diff changeset
466 ;; it better (i.e. locally). Note that if _any_ of the files
01df6fb7c1e7 (vc-svn-diff): If the repository version of all the files is the same
Glenn Morris <rgm@gnu.org>
parents: 82140
diff changeset
467 ;; has a different revision, we fetch the lot, which is
01df6fb7c1e7 (vc-svn-diff): If the repository version of all the files is the same
Glenn Morris <rgm@gnu.org>
parents: 82140
diff changeset
468 ;; obviously sub-optimal.
01df6fb7c1e7 (vc-svn-diff): If the repository version of all the files is the same
Glenn Morris <rgm@gnu.org>
parents: 82140
diff changeset
469 (setq oldvers nil))
81968
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
470 (let* ((switches
56777
332e641fe2b1 (vc-svn-diff): Treat options from vc-svn-diff-switches and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55900
diff changeset
471 (if vc-svn-diff-switches
332e641fe2b1 (vc-svn-diff): Treat options from vc-svn-diff-switches and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55900
diff changeset
472 (vc-switches 'SVN 'diff)
332e641fe2b1 (vc-svn-diff): Treat options from vc-svn-diff-switches and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55900
diff changeset
473 (list "-x" (mapconcat 'identity (vc-switches nil 'diff) " "))))
59446
1ba18e657796 (vc-svn-diff): Don't diff asynchronously if vc-disable-async-diff is
André Spiegel <spiegel@gnu.org>
parents: 59317
diff changeset
474 (async (and (not vc-disable-async-diff)
81968
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
475 (vc-stay-local-p files)
86002
613df1ba1584 * vc.el (vc-diff-internal): Make the *vc-diff* buffer read only.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85462
diff changeset
476 (or oldvers newvers)))) ; Svn diffs those locally.
55004
ae9b6f1e3bdf (vc-svn-print-log, vc-svn-diff): Add optional BUFFER arg.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
477 (apply 'vc-svn-command buffer
50922
bdc62a6694f7 (vc-svn-rename-file): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50900
diff changeset
478 (if async 'async 0)
81968
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
479 files "diff"
50922
bdc62a6694f7 (vc-svn-rename-file): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50900
diff changeset
480 (append
56777
332e641fe2b1 (vc-svn-diff): Treat options from vc-svn-diff-switches and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55900
diff changeset
481 switches
50922
bdc62a6694f7 (vc-svn-rename-file): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50900
diff changeset
482 (when oldvers
bdc62a6694f7 (vc-svn-rename-file): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50900
diff changeset
483 (list "-r" (if newvers (concat oldvers ":" newvers)
bdc62a6694f7 (vc-svn-rename-file): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50900
diff changeset
484 oldvers)))))
50900
d853a98e1678 (vc-svn-dired-state-info): Use `added' for added files and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50823
diff changeset
485 (if async 1 ; async diff => pessimistic assumption
d853a98e1678 (vc-svn-dired-state-info): Use `added' for added files and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50823
diff changeset
486 ;; For some reason `svn diff' does not return a useful
d853a98e1678 (vc-svn-dired-state-info): Use `added' for added files and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50823
diff changeset
487 ;; status w.r.t whether the diff was empty or not.
81968
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
488 (buffer-size (get-buffer buffer)))))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
489
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
490 ;;;
95020
4da572dc4992 Snapshot primitives globally renamed to refer to tags, documentation updated.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94847
diff changeset
491 ;;; Tag system
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
492 ;;;
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
493
95020
4da572dc4992 Snapshot primitives globally renamed to refer to tags, documentation updated.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94847
diff changeset
494 (defun vc-svn-create-tag (dir name branchp)
85141
b16f7408cd3f Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85139
diff changeset
495 "Assign to DIR's current revision a given NAME.
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
496 If BRANCHP is non-nil, the name is created as a branch (and the current
51732
f43bd5204ab4 (vc-svn-use-edit): Make it into a const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50999
diff changeset
497 workspace is immediately moved to that new branch).
f43bd5204ab4 (vc-svn-use-edit): Make it into a const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50999
diff changeset
498 NAME is assumed to be a URL."
f43bd5204ab4 (vc-svn-use-edit): Make it into a const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50999
diff changeset
499 (vc-svn-command nil 0 dir "copy" name)
95020
4da572dc4992 Snapshot primitives globally renamed to refer to tags, documentation updated.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94847
diff changeset
500 (when branchp (vc-svn-retrieve-tag dir name nil)))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
501
95020
4da572dc4992 Snapshot primitives globally renamed to refer to tags, documentation updated.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94847
diff changeset
502 (defun vc-svn-retrieve-tag (dir name update)
4da572dc4992 Snapshot primitives globally renamed to refer to tags, documentation updated.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94847
diff changeset
503 "Retrieve a tag at and below DIR.
4da572dc4992 Snapshot primitives globally renamed to refer to tags, documentation updated.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94847
diff changeset
504 NAME is the name of the tag; if it is empty, do a `svn update'.
51732
f43bd5204ab4 (vc-svn-use-edit): Make it into a const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50999
diff changeset
505 If UPDATE is non-nil, then update (resynch) any affected buffers.
f43bd5204ab4 (vc-svn-use-edit): Make it into a const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50999
diff changeset
506 NAME is assumed to be a URL."
f43bd5204ab4 (vc-svn-use-edit): Make it into a const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50999
diff changeset
507 (vc-svn-command nil 0 dir "switch" name)
f43bd5204ab4 (vc-svn-use-edit): Make it into a const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50999
diff changeset
508 ;; FIXME: parse the output and obey `update'.
f43bd5204ab4 (vc-svn-use-edit): Make it into a const.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50999
diff changeset
509 )
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
510
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
511 ;;;
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
512 ;;; Miscellaneous
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
513 ;;;
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
514
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
515 ;; Subversion makes backups for us, so don't bother.
50927
6f478e2878c7 (vc-svn-rename-file): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50922
diff changeset
516 ;; (defalias 'vc-svn-make-version-backups-p 'vc-stay-local-p
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
517 ;; "Return non-nil if version backups should be made for FILE.")
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
518
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
519 (defun vc-svn-check-headers ()
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
520 "Check if the current file has any headers in it."
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
521 (save-excursion
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
522 (goto-char (point-min))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
523 (re-search-forward "\\$[A-Za-z\300-\326\330-\366\370-\377]+\
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
524 \\(: [\t -#%-\176\240-\377]*\\)?\\$" nil t)))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
525
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
526
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
527 ;;;
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
528 ;;; Internal functions
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
529 ;;;
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
530
81306
114ec88248f4 (vc-svn-program): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76025
diff changeset
531 (defcustom vc-svn-program "svn"
91989
582312e95923 (vc-svn-program): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 91979
diff changeset
532 "Name of the SVN executable."
81306
114ec88248f4 (vc-svn-program): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76025
diff changeset
533 :type 'string
114ec88248f4 (vc-svn-program): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76025
diff changeset
534 :group 'vc)
114ec88248f4 (vc-svn-program): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 76025
diff changeset
535
81968
1b5dfd1b9ca0 Put the lower half (the back-end) of NewVC in place. This commit
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 81617
diff changeset
536 (defun vc-svn-command (buffer okstatus file-or-list &rest flags)
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
537 "A wrapper around `vc-do-command' for use in vc-svn.el.
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
538 The difference to vc-do-command is that this function always invokes `svn',
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
539 and that it passes `vc-svn-global-switches' to it before FLAGS."
94847
5e64dca662f0 Remove assumption about what nil means as a first arument to vc-do-command.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94806
diff changeset
540 (apply 'vc-do-command (or buffer "*vc*") okstatus vc-svn-program file-or-list
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
541 (if (stringp vc-svn-global-switches)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
542 (cons vc-svn-global-switches flags)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
543 (append vc-svn-global-switches
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
544 flags))))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
545
50927
6f478e2878c7 (vc-svn-rename-file): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50922
diff changeset
546 (defun vc-svn-repository-hostname (dirname)
6f478e2878c7 (vc-svn-rename-file): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50922
diff changeset
547 (with-temp-buffer
6f478e2878c7 (vc-svn-rename-file): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50922
diff changeset
548 (let ((coding-system-for-read
6f478e2878c7 (vc-svn-rename-file): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50922
diff changeset
549 (or file-name-coding-system
6f478e2878c7 (vc-svn-rename-file): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50922
diff changeset
550 default-file-name-coding-system)))
73848
299d3322c8be Fix typo in previous commit.
Chong Yidong <cyd@stupidchicken.com>
parents: 73847
diff changeset
551 (vc-insert-file (expand-file-name (concat vc-svn-admin-directory
299d3322c8be Fix typo in previous commit.
Chong Yidong <cyd@stupidchicken.com>
parents: 73847
diff changeset
552 "/entries")
299d3322c8be Fix typo in previous commit.
Chong Yidong <cyd@stupidchicken.com>
parents: 73847
diff changeset
553 dirname)))
50927
6f478e2878c7 (vc-svn-rename-file): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50922
diff changeset
554 (goto-char (point-min))
6f478e2878c7 (vc-svn-rename-file): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50922
diff changeset
555 (when (re-search-forward
75233
e52e99fc4ca5 (vc-svn-parse-status): Trust the filename argument more
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73848
diff changeset
556 ;; Old `svn' used name="svn:this_dir", newer use just name="".
58929
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
557 (concat "name=\"\\(?:svn:this_dir\\)?\"[\n\t ]*"
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
558 "\\(?:[-a-z]+=\"[^\"]*\"[\n\t ]*\\)*?"
81617
0a2fb180b0a5 (vc-svn-repository-hostname): Adjust to non-XML format of newer .svn/entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 81306
diff changeset
559 "url=\"\\(?1:[^\"]+\\)\""
0a2fb180b0a5 (vc-svn-repository-hostname): Adjust to non-XML format of newer .svn/entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 81306
diff changeset
560 ;; Yet newer ones don't use XML any more.
0a2fb180b0a5 (vc-svn-repository-hostname): Adjust to non-XML format of newer .svn/entries.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 81306
diff changeset
561 "\\|^\ndir\n[0-9]+\n\\(?1:.*\\)") nil t)
58929
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
562 ;; This is not a hostname but a URL. This may actually be considered
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
563 ;; as a feature since it allows vc-svn-stay-local to specify different
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
564 ;; behavior for different modules on the same server.
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
565 (match-string 1))))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
566
78914
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
567 (defun vc-svn-resolve-when-done ()
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
568 "Call \"svn resolved\" if the conflict markers have been removed."
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
569 (save-excursion
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
570 (goto-char (point-min))
79848
316ed7573095 * vc-arch.el (vc-arch-delete-rej-if-obsolete): Remove the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 79721
diff changeset
571 (unless (re-search-forward "^<<<<<<< " nil t)
316ed7573095 * vc-arch.el (vc-arch-delete-rej-if-obsolete): Remove the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 79721
diff changeset
572 (vc-svn-command nil 0 buffer-file-name "resolved")
316ed7573095 * vc-arch.el (vc-arch-delete-rej-if-obsolete): Remove the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 79721
diff changeset
573 ;; Remove the hook so that it is not called multiple times.
316ed7573095 * vc-arch.el (vc-arch-delete-rej-if-obsolete): Remove the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 79721
diff changeset
574 (remove-hook 'after-save-hook 'vc-svn-resolve-when-done t))))
78914
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
575
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
576 ;; Inspired by vc-arch-find-file-hook.
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
577 (defun vc-svn-find-file-hook ()
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
578 (when (eq ?C (vc-file-getprop buffer-file-name 'vc-svn-status))
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
579 ;; If the file is marked as "conflicted", then we should try and call
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
580 ;; "svn resolved" when applicable.
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
581 (if (save-excursion
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
582 (goto-char (point-min))
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
583 (re-search-forward "^<<<<<<< " nil t))
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
584 ;; There are conflict markers.
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
585 (progn
87785
8f1628da223f * smerge-mode.el (smerge-start-session): Rename from smerge-auto.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87743
diff changeset
586 (smerge-start-session)
78914
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
587 (add-hook 'after-save-hook 'vc-svn-resolve-when-done nil t))
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
588 ;; There are no conflict markers. This is problematic: maybe it means
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
589 ;; the conflict has been resolved and we should immediately call "svn
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
590 ;; resolved", or it means that the file's type does not allow Svn to
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
591 ;; use conflict markers in which case we don't really know what to do.
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
592 ;; So let's just punt for now.
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
593 nil)
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
594 (message "There are unresolved conflicts in this file")))
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
595
73444
ee7eeb5732b2 (vc-svn-parse-status): Remove unused arg `localp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68740
diff changeset
596 (defun vc-svn-parse-status (&optional filename)
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
597 "Parse output of \"svn status\" command in the current buffer.
73444
ee7eeb5732b2 (vc-svn-parse-status): Remove unused arg `localp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68740
diff changeset
598 Set file properties accordingly. Unless FILENAME is non-nil, parse only
ee7eeb5732b2 (vc-svn-parse-status): Remove unused arg `localp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68740
diff changeset
599 information about FILENAME and return its status."
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
600 (let (file status)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
601 (goto-char (point-min))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
602 (while (re-search-forward
87477
b5060e79eb98 * vc-svn.el (vc-svn-parse-status): Recognize 'added, 'removed,
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87450
diff changeset
603 ;; Ignore the files with status X.
97336
701c14eb5b26 (vc-svn-parse-status): Use when instead of if.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 96257
diff changeset
604 "^\\(?:\\?\\|[ ACDGIMR!~][ MC][ L][ +][ S]..\\([ *]\\) +\\([-0-9]+\\) +\\([0-9?]+\\) +\\([^ ]+\\)\\) +" nil t)
75233
e52e99fc4ca5 (vc-svn-parse-status): Trust the filename argument more
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73848
diff changeset
605 ;; If the username contains spaces, the output format is ambiguous,
e52e99fc4ca5 (vc-svn-parse-status): Trust the filename argument more
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73848
diff changeset
606 ;; so don't trust the output's filename unless we have to.
e52e99fc4ca5 (vc-svn-parse-status): Trust the filename argument more
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73848
diff changeset
607 (setq file (or filename
e52e99fc4ca5 (vc-svn-parse-status): Trust the filename argument more
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73848
diff changeset
608 (expand-file-name
e52e99fc4ca5 (vc-svn-parse-status): Trust the filename argument more
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 73848
diff changeset
609 (buffer-substring (point) (line-end-position)))))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
610 (setq status (char-after (line-beginning-position)))
87477
b5060e79eb98 * vc-svn.el (vc-svn-parse-status): Recognize 'added, 'removed,
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87450
diff changeset
611 (if (eq status ??)
87514
5c7eec3035ec Remove some debugging code.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87513
diff changeset
612 (vc-file-setprop file 'vc-state 'unregistered)
50900
d853a98e1678 (vc-svn-dired-state-info): Use `added' for added files and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50823
diff changeset
613 ;; Use the last-modified revision, so that searching in vc-print-log
d853a98e1678 (vc-svn-dired-state-info): Use `added' for added files and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50823
diff changeset
614 ;; output works.
87514
5c7eec3035ec Remove some debugging code.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87513
diff changeset
615 (vc-file-setprop file 'vc-working-revision (match-string 3))
78914
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
616 ;; Remember Svn's own status.
9eca5b992f1f (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78236
diff changeset
617 (vc-file-setprop file 'vc-svn-status status)
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
618 (vc-file-setprop
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
619 file 'vc-state
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
620 (cond
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
621 ((eq status ?\ )
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
622 (if (eq (char-after (match-beginning 1)) ?*)
94521
2a61c5f918a5 Change 'needs-patch to 'needs-update.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 94519
diff changeset
623 'needs-update
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
624 (vc-file-setprop file 'vc-checkout-time
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
625 (nth 5 (file-attributes file)))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
626 'up-to-date))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
627 ((eq status ?A)
50900
d853a98e1678 (vc-svn-dired-state-info): Use `added' for added files and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50823
diff changeset
628 ;; If the file was actually copied, (match-string 2) is "-".
87514
5c7eec3035ec Remove some debugging code.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87513
diff changeset
629 (vc-file-setprop file 'vc-working-revision "0")
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
630 (vc-file-setprop file 'vc-checkout-time 0)
87477
b5060e79eb98 * vc-svn.el (vc-svn-parse-status): Recognize 'added, 'removed,
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87450
diff changeset
631 'added)
93956
bfc762f0b49c * vc-hooks.el (vc-state): Add new state `conflict'.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93886
diff changeset
632 ((eq status ?C)
bfc762f0b49c * vc-hooks.el (vc-state): Add new state `conflict'.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93886
diff changeset
633 (vc-file-setprop file 'vc-state 'conflict))
bfc762f0b49c * vc-hooks.el (vc-state): Add new state `conflict'.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 93886
diff changeset
634 ((eq status '?M)
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
635 (if (eq (char-after (match-beginning 1)) ?*)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
636 'needs-merge
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
637 'edited))
87450
71fc7b1db920 * vc-hooks.el (vc-state): Document new 'ignored and 'unregistered
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87449
diff changeset
638 ((eq status ?I)
87514
5c7eec3035ec Remove some debugging code.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87513
diff changeset
639 (vc-file-setprop file 'vc-state 'ignored))
87477
b5060e79eb98 * vc-svn.el (vc-svn-parse-status): Recognize 'added, 'removed,
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87450
diff changeset
640 ((eq status ?R)
87514
5c7eec3035ec Remove some debugging code.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87513
diff changeset
641 (vc-file-setprop file 'vc-state 'removed))
73444
ee7eeb5732b2 (vc-svn-parse-status): Remove unused arg `localp'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68740
diff changeset
642 (t 'edited)))))
97336
701c14eb5b26 (vc-svn-parse-status): Use when instead of if.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 96257
diff changeset
643 (when filename (vc-file-getprop filename 'vc-state))))
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
644
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
645 (defun vc-svn-valid-symbolic-tag-name-p (tag)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
646 "Return non-nil if TAG is a valid symbolic tag name."
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
647 ;; According to the SVN manual, a valid symbolic tag must start with
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
648 ;; an uppercase or lowercase letter and can contain uppercase and
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
649 ;; lowercase letters, digits, `-', and `_'.
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
650 (and (string-match "^[a-zA-Z]" tag)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
651 (not (string-match "[^a-z0-9A-Z-_]" tag))))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
652
85141
b16f7408cd3f Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85139
diff changeset
653 (defun vc-svn-valid-revision-number-p (tag)
b16f7408cd3f Carry through today's big terminology change to a few places where I
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 85139
diff changeset
654 "Return non-nil if TAG is a valid revision number."
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
655 (and (string-match "^[0-9]" tag)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
656 (not (string-match "[^0-9]" tag))))
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
657
58929
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
658 ;; Support for `svn annotate'
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
659
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
660 (defun vc-svn-annotate-command (file buf &optional rev)
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
661 (vc-svn-command buf 0 file "annotate" (if rev (concat "-r" rev))))
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
662
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
663 (defun vc-svn-annotate-time-of-rev (rev)
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
664 ;; Arbitrarily assume 10 commmits per day.
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
665 (/ (string-to-number rev) 10.0))
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
666
96252
8c22ce277d5d (vc-annotate-parent-rev): Pacify byte compiler.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 96003
diff changeset
667 (defvar vc-annotate-parent-rev)
8c22ce277d5d (vc-annotate-parent-rev): Pacify byte compiler.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 96003
diff changeset
668
58929
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
669 (defun vc-svn-annotate-current-time ()
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
670 (vc-svn-annotate-time-of-rev vc-annotate-parent-rev))
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
671
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
672 (defconst vc-svn-annotate-re "[ \t]*\\([0-9]+\\)[ \t]+[^\t ]+ ")
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
673
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
674 (defun vc-svn-annotate-time ()
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
675 (when (looking-at vc-svn-annotate-re)
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
676 (goto-char (match-end 0))
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
677 (vc-svn-annotate-time-of-rev (match-string 1))))
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
678
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
679 (defun vc-svn-annotate-extract-revision-at-line ()
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
680 (save-excursion
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
681 (beginning-of-line)
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
682 (if (looking-at vc-svn-annotate-re) (match-string 1))))
43248e1430b6 (vc-svn-repository-hostname): Adjust to new format.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56777
diff changeset
683
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
684 (provide 'vc-svn)
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
685
56777
332e641fe2b1 (vc-svn-diff): Treat options from vc-svn-diff-switches and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 55900
diff changeset
686 ;; arch-tag: 02f10c68-2b4d-453a-90fc-1eee6cfb268d
50818
d3acfb11487e First cut at vc-svn.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
687 ;;; vc-svn.el ends here