Hi Subversion developers!

The current HEAD version of the Emacs SVN status mode, psvn.el does not
properly support working copies in SVN 1.7 format. It expects each
directory to have a .svn subdirectory, which is no longer the case.

Googling around, I found a small patch [1], courtesy of Koji Nakamaru
(CC'ed) that makes psvn.el work with Subversion 1.7 working copies. I
tested it on GNU Emacs 23.3 and 24.1 on Microsoft Windows XP.

If you're interested, please apply the attached patch to the psvn.el
version in the Apache Subversion repository [2]. I just re-diffed Koji
Nakamaru's patch to apply cleanly against HEAD (r1369093 for this file).

I originally posted this message to the users@ mailing list by accident.
Please excuse the duplication, but at least I got a hint now to the
patch submission guidelines.

Thank you very much and kind regards,
André

[1] http://www.eaflux.com/psvn/psvn.el.diff
[2]
http://svn.apache.org/repos/asf/subversion/trunk/contrib/client-side/emacs/psvn.el
--
Greetings...
From: Andre Colomb <acol...@schickhardt.org>

Index: contrib/client-side/emacs/psvn.el
===================================================================
--- contrib/client-side/emacs/psvn.el	(revision 1374368)
+++ contrib/client-side/emacs/psvn.el	(working copy)
@@ -1137,7 +1137,7 @@ If there is no .svn directory, examine if there is
                          (svn-wc-adm-dir-name)))
         (cvs-dir (format "%sCVS" (file-name-as-directory dir))))
     (cond
-     ((file-directory-p svn-dir)
+     ((my-file-directory-p svn-dir)
       (setq arg (svn-status-possibly-negate-meaning-of-arg arg 'svn-status))
       (svn-status-1 dir arg))
      ((and (file-directory-p cvs-dir)
@@ -6036,12 +6036,12 @@ Return nil, if not in a svn working copy."
       (let* ((base-dir start-dir)
              (repository-root (svn-status-repo-for-path base-dir))
              (dot-svn-dir (concat base-dir (svn-wc-adm-dir-name)))
-             (in-tree (and repository-root (file-exists-p dot-svn-dir)))
+             (in-tree (and repository-root (my-file-exists-p dot-svn-dir)))
              (dir-below (expand-file-name base-dir)))
         ;; (message "repository-root: %s start-dir: %s" repository-root start-dir)
         (if (and (<= (car svn-client-version) 1) (< (cadr svn-client-version) 3))
             (setq base-dir (svn-status-base-dir-for-ancient-svn-client start-dir)) ;; svn version < 1.3
-          (while (when (and dir-below (file-exists-p dot-svn-dir))
+          (while (when (and dir-below (my-file-exists-p dot-svn-dir))
                    (setq base-dir (file-name-directory dot-svn-dir))
                    (string-match "\\(.+/\\).+/" dir-below)
                    (setq dir-below
@@ -6423,6 +6423,19 @@ working directory."
     (setq svn-admin-last-repository-dir (read-string "Repository Url: ")))
   (svn-checkout svn-admin-last-repository-dir "."))
 
+(defun my-file-directory-p (dir)
+  (setq dir (expand-file-name dir))
+  (if (file-directory-p dir)
+      t
+    (let* ((dir1 (directory-file-name (file-name-directory dir)))
+           (dir2 (directory-file-name (file-name-directory dir1))))
+      (if (equal dir1 dir2)
+          nil
+        (my-file-directory-p (concat (file-name-as-directory dir2) ".svn"))))))
+
+(defun my-file-exists-p (dir)
+  (my-file-directory-p dir))
+
 ;; --------------------------------------------------------------------------------
 ;; svn status profiling
 ;; --------------------------------------------------------------------------------

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to