Ping. Stefan have you had a chance to look at this patch? On Feb 24, 2013, at 7:37 PM, Joseph Schaefer <joe_schae...@yahoo.com> wrote:
> 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) >>>> >>> >> >