Ok here's my latest stab at it.  So far everything seems to work as
expected, even when you have unsaved edits in the same working
copy but are working in a subdir that doesn't contain unsaved edits.

I will keep testing but am really just looking for some support from
a full committer so I can commit these changes as I work on them.


Index: CHANGES
===================================================================
--- CHANGES     (revision 1449428)
+++ CHANGES     (working copy)
@@ -47,6 +47,7 @@
 
   - Other tool improvements and bugfixes:
     * 'svnmucc' promoted to first-class supported utility (issue #3308)
+    * 'psvn.el' now supports 1.7+ working copies
   
  Developer-visible changes:
   - General:
Index: contrib/client-side/emacs/psvn.el
===================================================================
--- contrib/client-side/emacs/psvn.el   (revision 1449428)
+++ contrib/client-side/emacs/psvn.el   (working copy)
@@ -1127,33 +1127,13 @@
 asks svn to connect to the repository and check to see if there are updates
 there.
 
-If there is no .svn directory, examine if there is CVS and run
-`cvs-examine'. Otherwise ask if to run `dired'."
+   Note: psvn.el no longer supports dispatch to cvs nor dired."
+
   (interactive (list (svn-read-directory-name "SVN status directory: "
                                               nil default-directory nil)
                      current-prefix-arg))
-  (let ((svn-dir (format "%s%s"
-                         (file-name-as-directory dir)
-                         (svn-wc-adm-dir-name)))
-        (cvs-dir (format "%sCVS" (file-name-as-directory dir))))
-    (cond
-     ((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)
-           (fboundp 'cvs-examine))
-      (cvs-examine dir nil))
-     (t
-      (when (y-or-n-p
-             (format
-              (concat
-               "%s "
-               "is not Subversion controlled (missing %s "
-               "directory). "
-               "Run dired instead? ")
-              dir
-              (svn-wc-adm-dir-name)))
-        (dired dir))))))
+    (setq arg (svn-status-possibly-negate-meaning-of-arg arg 'svn-status))
+    (svn-status-1 dir arg))
 
 (defvar svn-status-display-new-status-buffer nil)
 (defun svn-status-1 (dir &optional arg)
@@ -6039,20 +6019,32 @@
              (in-tree (and repository-root (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))
-                   (setq base-dir (file-name-directory dot-svn-dir))
-                   (string-match "\\(.+/\\).+/" dir-below)
-                   (setq dir-below
-                         (and (string-match "\\(.*/\\)[^/]+/" dir-below)
-                              (match-string 1 dir-below)))
-                   ;; (message "base-dir: %s, dir-below: %s, dot-svn-dir: %s 
in-tree: %s" base-dir dir-below dot-svn-dir in-tree)
-                   (when dir-below
-                     (if (string= (svn-status-repo-for-path dir-below) 
repository-root)
-                         (setq dot-svn-dir (concat dir-below 
(svn-wc-adm-dir-name)))
-                       (setq dir-below nil)))))
-          (setq base-dir (and in-tree base-dir)))
+        (if (or (> (car svn-client-version) 1) (and (= (car 
svn-client-version) 1) (>= (cadr svn-client-version) 7)))
+            (while (when (and dir-below (not (file-exists-p dot-svn-dir)))
+                     (string-match "\\(.+/\\).+/" dir-below)
+                     (setq dir-below
+                           (and (string-match "\\(.*/\\)[^/]+/" dir-below)
+                                (match-string 1 dir-below)))
+                     ;;(message "base-dir: %s, dir-below: %s, dot-svn-dir: %s 
in-tree: %s" base-dir dir-below dot-svn-dir in-tree)
+                     (when dir-below
+                       (if (string= (svn-status-repo-for-path dir-below) 
repository-root)
+                           (setq dot-svn-dir (concat dir-below 
(svn-wc-adm-dir-name)))
+                         (setq dir-below nil)))
+                     (setq base-dir (file-name-directory dot-svn-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))
+                     (setq base-dir (file-name-directory dot-svn-dir))
+                     (string-match "\\(.+/\\).+/" dir-below)
+                     (setq dir-below
+                           (and (string-match "\\(.*/\\)[^/]+/" dir-below)
+                                (match-string 1 dir-below)))
+                     ;;(message "base-dir: %s, dir-below: %s, dot-svn-dir: %s 
in-tree: %s" base-dir dir-below dot-svn-dir in-tree)
+                     (when dir-below
+                       (if (string= (svn-status-repo-for-path dir-below) 
repository-root)
+                           (setq dot-svn-dir (concat dir-below 
(svn-wc-adm-dir-name)))
+                         (setq dir-below nil)))))
+            (setq base-dir (and in-tree base-dir))))
         (svn-puthash start-dir base-dir svn-status-base-dir-cache)
         (svn-status-message 7 "svn-status-base-dir %s => %s" start-dir 
base-dir)
         base-dir))))

On Feb 23, 2013, at 9:17 PM, Joseph Schaefer <joe_schae...@yahoo.com> wrote:

> Drat, I need to figure out what to do with the svn-status-base-dir function
> in order to commit from a subdirectory of a full working copy. Right now
> I hacked it to just return the start-dir for 1.7+, but I need to play a bit 
> more
> to see if that's really the right thing to do.
> 
> 
> 
> On Feb 22, 2013, at 3:24 PM, Joseph Schaefer <joe_schae...@yahoo.com> wrote:
> 
>> Here's a better patch that doesn't break the docstring.
>> 
>> Index: contrib/client-side/emacs/psvn.el
>> ===================================================================
>> --- contrib/client-side/emacs/psvn.el        (revision 1449112)
>> +++ contrib/client-side/emacs/psvn.el        (working copy)
>> @@ -1127,33 +1127,13 @@
>> asks svn to connect to the repository and check to see if there are updates
>> there.
>> 
>> -If there is no .svn directory, examine if there is CVS and run
>> -`cvs-examine'. Otherwise ask if to run `dired'."
>> +   Note: psvn.el no longer supports dispatch to cvs nor dired."
>> +
>>  (interactive (list (svn-read-directory-name "SVN status directory: "
>>                                              nil default-directory nil)
>>                     current-prefix-arg))
>> -  (let ((svn-dir (format "%s%s"
>> -                         (file-name-as-directory dir)
>> -                         (svn-wc-adm-dir-name)))
>> -        (cvs-dir (format "%sCVS" (file-name-as-directory dir))))
>> -    (cond
>> -     ((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)
>> -           (fboundp 'cvs-examine))
>> -      (cvs-examine dir nil))
>> -     (t
>> -      (when (y-or-n-p
>> -             (format
>> -              (concat
>> -               "%s "
>> -               "is not Subversion controlled (missing %s "
>> -               "directory). "
>> -               "Run dired instead? ")
>> -              dir
>> -              (svn-wc-adm-dir-name)))
>> -        (dired dir))))))
>> +    (setq arg (svn-status-possibly-negate-meaning-of-arg arg 'svn-status))
>> +    (svn-status-1 dir arg))
>> 
>> (defvar svn-status-display-new-status-buffer nil)
>> (defun svn-status-1 (dir &optional arg)
>> 
>> 
>> 
>> 
>> 
>> On Feb 22, 2013, at 12:15 PM, Joseph Schaefer <joe_schae...@yahoo.com> wrote:
>> 
>>> Here's a fugly patch that I'd like to apply to trunk that lets
>>> psvn.el work properly with 1.7+ working copies that consolidate
>>> .svn dirs to the top-level of the working copy.  For the most part
>>> psvn.el doesn't need to know where this directory lives, so just
>>> removing the check for it seems to work fine.
>>> 
>>> Index: psvn.el
>>> ===================================================================
>>> --- psvn.el (revision 1449112)
>>> +++ psvn.el (working copy)
>>> @@ -1127,33 +1127,11 @@
>>> asks svn to connect to the repository and check to see if there are updates
>>> there.
>>> 
>>> -If there is no .svn directory, examine if there is CVS and run
>>> -`cvs-examine'. Otherwise ask if to run `dired'."
>>> (interactive (list (svn-read-directory-name "SVN status directory: "
>>>                                             nil default-directory nil)
>>>                    current-prefix-arg))
>>> -  (let ((svn-dir (format "%s%s"
>>> -                         (file-name-as-directory dir)
>>> -                         (svn-wc-adm-dir-name)))
>>> -        (cvs-dir (format "%sCVS" (file-name-as-directory dir))))
>>> -    (cond
>>> -     ((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)
>>> -           (fboundp 'cvs-examine))
>>> -      (cvs-examine dir nil))
>>> -     (t
>>> -      (when (y-or-n-p
>>> -             (format
>>> -              (concat
>>> -               "%s "
>>> -               "is not Subversion controlled (missing %s "
>>> -               "directory). "
>>> -               "Run dired instead? ")
>>> -              dir
>>> -              (svn-wc-adm-dir-name)))
>>> -        (dired dir))))))
>>> +    (setq arg (svn-status-possibly-negate-meaning-of-arg arg 'svn-status))
>>> +    (svn-status-1 dir arg))
>>> 
>>> (defvar svn-status-display-new-status-buffer nil)
>>> (defun svn-status-1 (dir &optional arg)
>>> 
>> 
> 

Reply via email to