54695
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1 ;;; vc-dav.el --- vc.el support for WebDAV
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
2
|
75347
|
3 ;; Copyright (C) 2001, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
|
54695
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
4
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
5 ;; Author: Bill Perry <wmperry@gnu.org>
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
6 ;; Maintainer: Bill Perry <wmperry@gnu.org>
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
7 ;; Keywords: url, vc
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
8
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
9 ;; GNU Emacs is free software; you can redistribute it and/or modify
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
10 ;; it under the terms of the GNU General Public License as published by
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
11 ;; the Free Software Foundation; either version 2, or (at your option)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
12 ;; any later version.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
13
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
14 ;; GNU Emacs is distributed in the hope that it will be useful,
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
17 ;; GNU General Public License for more details.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
18
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
19 ;; You should have received a copy of the GNU General Public License
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
20 ;; along with GNU Emacs; see the file COPYING. If not, write to the
|
64084
|
21 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
22 ;; Boston, MA 02110-1301, USA.
|
54695
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
23
|
61184
|
24
|
|
25 ;;; Commentary:
|
|
26
|
|
27 ;;; Code:
|
|
28
|
54695
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
29 (require 'url)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
30 (require 'url-dav)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
31
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
32 ;;; Required functions for a vc backend
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
33 (defun vc-dav-registered (url)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
34 "Return t iff URL is registered with a DAV aware server."
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
35 (url-dav-vc-registered url))
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
36
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
37 (defun vc-dav-state (url)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
38 "Return the current version control state of URL.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
39 For a list of possible values, see `vc-state'."
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
40 ;; Things we can support for WebDAV
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
41 ;;
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
42 ;; up-to-date - use lockdiscovery
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
43 ;; edited - check for an active lock by us
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
44 ;; USER - use lockdiscovery + owner
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
45 ;;
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
46 ;; These don't make sense for WebDAV
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
47 ;; needs-patch
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
48 ;; needs-merge
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
49 ;; unlocked-changes
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
50 (let ((locks (url-dav-active-locks url)))
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
51 (cond
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
52 ((null locks) 'up-to-date)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
53 ((assoc url locks)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
54 ;; SOMEBODY has a lock... let's find out who.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
55 (setq locks (cdr (assoc url locks)))
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
56 (if (rassoc url-dav-lock-identifier locks)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
57 ;; _WE_ have a lock
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
58 'edited
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
59 (cdr (car locks)))))))
|
64748
|
60
|
54695
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
61 (defun vc-dav-checkout-model (url)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
62 "Indicate whether URL needs to be \"checked out\" before it can be edited.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
63 See `vc-checkout-model' for a list of possible values."
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
64 ;; The only thing we can support with webdav is 'locking
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
65 'locking)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
66
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
67 ;; This should figure out the version # of the file somehow. What is
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
68 ;; the most appropriate property in WebDAV to look at for this?
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
69 (defun vc-dav-workfile-version (url)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
70 "Return the current workfile version of URL."
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
71 "Unknown")
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
72
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
73 (defun vc-dav-register (url &optional rev comment)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
74 "Register URL in the DAV backend."
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
75 ;; Do we need to do anything here? FIXME?
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
76 )
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
77
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
78 (defun vc-dav-checkin (url rev comment)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
79 "Commit changes in URL to WebDAV.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
80 If REV is non-nil, that should become the new revision number.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
81 COMMENT is used as a check-in comment."
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
82 ;; This should PUT the resource and release any locks that we hold.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
83 )
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
84
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
85 (defun vc-dav-checkout (url &optional editable rev destfile)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
86 "Check out revision REV of URL into the working area.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
87
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
88 If EDITABLE is non-nil URL should be writable by the user and if
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
89 locking is used for URL, a lock should also be set.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
90
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
91 If REV is non-nil, that is the revision to check out. If REV is the
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
92 empty string, that means to check ou tht ehead of the trunk.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
93
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
94 If optional arg DESTFILE is given, it is an alternate filename to
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
95 write the contents to.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
96 "
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
97 ;; This should LOCK the resource.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
98 )
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
99
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
100 (defun vc-dav-revert (url &optional contents-done)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
101 "Revert URL back to the current workfile version.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
102
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
103 If optional arg CONTENTS-DONE is non-nil, then the contents of FILE
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
104 have already been reverted from a version backup, and this function
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
105 only needs to update the status of URL within the backend.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
106 "
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
107 ;; Should do a GET if !contents_done
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
108 ;; Should UNLOCK the file.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
109 )
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
110
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
111 (defun vc-dav-print-log (url)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
112 "Insert the revision log of URL into the *vc* buffer."
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
113 )
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
114
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
115 (defun vc-dav-diff (url &optional rev1 rev2)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
116 "Insert the diff for URL into the *vc-diff* buffer.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
117 If REV1 and REV2 are non-nil report differences from REV1 to REV2.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
118 If REV1 is nil, use the current workfile version as the older version.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
119 If REV2 is nil, use the current workfile contents as the nwer version.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
120
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
121 It should return a status of either 0 (no differences found), or
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
122 1 (either non-empty diff or the diff is run asynchronously).
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
123 "
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
124 ;; We should do this asynchronously...
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
125 ;; How would we do it at all, that is the question!
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
126 )
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
127
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
128
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
129
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
130 ;;; Optional functions
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
131 ;; Should be faster than vc-dav-state - but how?
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
132 (defun vc-dav-state-heuristic (url)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
133 "Estimate the version control state of URL at visiting time."
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
134 (vc-dav-state url))
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
135
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
136 ;; This should use url-dav-get-properties with a depth of `1' to get
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
137 ;; all the properties.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
138 (defun vc-dav-dir-state (url)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
139 "find the version control state of all files in DIR in a fast way."
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
140 )
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
141
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
142 (defun vc-dav-workfile-unchanged-p (url)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
143 "Return non-nil if URL is unchanged from its current workfile version."
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
144 ;; Probably impossible with webdav
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
145 )
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
146
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
147 (defun vc-dav-responsible-p (url)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
148 "Return non-nil if DAV considers itself `responsible' for URL."
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
149 ;; Check for DAV support on the web server.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
150 t)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
151
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
152 (defun vc-dav-could-register (url)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
153 "Return non-nil if URL could be registered under this backend."
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
154 ;; Check for DAV support on the web server.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
155 t)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
156
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
157 ;;; Unimplemented functions
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
158 ;;
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
159 ;; vc-dav-latest-on-branch-p(URL)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
160 ;; Return non-nil if the current workfile version of FILE is the
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
161 ;; latest on its branch. There are no branches in webdav yet.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
162 ;;
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
163 ;; vc-dav-mode-line-string(url)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
164 ;; Return a dav-specific mode line string for URL. Are there any
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
165 ;; specific states that we want exposed?
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
166 ;;
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
167 ;; vc-dav-dired-state-info(url)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
168 ;; Translate the `vc-state' property of URL into a string that can
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
169 ;; be used in a vc-dired buffer. Are there any extra states that
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
170 ;; we want exposed?
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
171 ;;
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
172 ;; vc-dav-receive-file(url rev)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
173 ;; Let this backend `receive' a file that is already registered
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
174 ;; under another backend. The default just calls `register', which
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
175 ;; should be sufficient for WebDAV.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
176 ;;
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
177 ;; vc-dav-unregister(url)
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
178 ;; Unregister URL. Not possible with WebDAV, other than by
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
179 ;; deleting the resource.
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
180
|
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
181 (provide 'vc-dav)
|
54699
|
182
|
61184
|
183 ;; arch-tag: 0a0fb9fe-8190-4c0a-a179-5c291d3a467e
|
|
184 ;;; vc-dav.el ends here
|