[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

vc-svn.el and newer subversion format

From: Karl Pflästerer
Subject: vc-svn.el and newer subversion format
Date: Tue, 08 Feb 2011 11:06:53 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (windows-nt)

(sorry if you read this posting twice; but it seems the first posting
through gmane seems got lost, so here it is again).

the devel version of Subversion no longer has one .svn directory in each
directory in the working tree, but just one .svn directory (like e.g Hg
or Git).

Therefore vc can't see that a file is under Subversion version control.
I tried to change the relevant parts in vc-svn.el (I looked how it's
done in vc-hg and vc-git).

Here is a diff against trunk.  For `vc-svn-repository-hostname' I used
svn info --xml since I don't know how the info message might be formated
in different languages; I hope the XML format will everywhere be the same.


=== modified file 'lisp/vc/vc-svn.el'
--- lisp/vc/vc-svn.el   2011-01-26 08:36:39 +0000
+++ lisp/vc/vc-svn.el   2011-02-07 19:58:05 +0000
@@ -117,17 +117,13 @@
 ;;;###autoload                                (getenv "SVN_ASP_DOT_NET_HACK"))
 ;;;###autoload                           "_svn")
 ;;;###autoload                          (t ".svn"))))
-;;;###autoload     (when (file-readable-p (expand-file-name
-;;;###autoload                             (concat admin-dir "/entries")
-;;;###autoload                             (file-name-directory f)))
+;;;###autoload     (when (vc-find-root f admin-dir)
 ;;;###autoload       (load "vc-svn")
 ;;;###autoload       (vc-svn-registered f))))
 (defun vc-svn-registered (file)
   "Check if FILE is SVN registered."
-  (when (file-readable-p (expand-file-name (concat vc-svn-admin-directory
-                                                  "/entries")
-                                          (file-name-directory file)))
+  (when (vc-svn-root file)
       (cd (file-name-directory file))
       (let* (process-file-side-effects
@@ -275,12 +271,10 @@
 to the SVN command."
   (apply 'vc-svn-command nil 0 files "add" (vc-switches 'SVN 'register)))
-(defun vc-svn-responsible-p (file)
-  "Return non-nil if SVN thinks it is responsible for FILE."
-  (file-directory-p (expand-file-name vc-svn-admin-directory
-                                     (if (file-directory-p file)
-                                         file
-                                       (file-name-directory file)))))
+(defun vc-svn-root (file)
+  (vc-find-root file vc-svn-admin-directory))
+(defalias 'vc-svn-responsible-p 'vc-svn-root)
 (defalias 'vc-svn-could-register 'vc-svn-responsible-p
   "Return non-nil if FILE could be registered in SVN.
@@ -594,20 +588,10 @@
 (defun vc-svn-repository-hostname (dirname)
-    (let ((coding-system-for-read
-          (or file-name-coding-system
-              default-file-name-coding-system)))
-      (vc-insert-file (expand-file-name (concat vc-svn-admin-directory
-                                               "/entries")
-                                       dirname)))
+    (let (process-file-side-effects)
+      (vc-svn-command t t dirname "info" "--xml"))
     (goto-char (point-min))
-    (when (re-search-forward
-          ;; Old `svn' used name="svn:this_dir", newer use just name="".
-          (concat "name=\"\\(?:svn:this_dir\\)?\"[\n\t ]*"
-                  "\\(?:[-a-z]+=\"[^\"]*\"[\n\t ]*\\)*?"
-                  "url=\"\\(?1:[^\"]+\\)\""
-                   ;; Yet newer ones don't use XML any more.
-                   "\\|^\ndir\n[0-9]+\n\\(?1:.*\\)") nil t)
+    (when (re-search-forward "<url>\\(.*\\)</url>" nil t)
       ;; This is not a hostname but a URL.  This may actually be considered
       ;; as a feature since it allows vc-svn-stay-local to specify different
       ;; behavior for different modules on the same server.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]