[MacPorts] #16373: svn fetch type should maintain a persistent working copy

MacPorts noreply at macports.org
Fri Aug 22 11:19:28 PDT 2008


#16373: svn fetch type should maintain a persistent working copy
-------------------------------------+--------------------------------------
 Reporter:  ryandesign at macports.org  |       Owner:  macports-tickets at lists.macosforge.org
     Type:  enhancement              |      Status:  new                                  
 Priority:  Normal                   |   Milestone:  MacPorts base enhancements           
Component:  base                     |     Version:  1.7.0                                
 Keywords:                           |  
-------------------------------------+--------------------------------------
 "`fetch.type svn`" is inefficient in that it checks out a new working copy
 every time, directly to the work area. That would be like a normal port
 downloading the distfile every time. Instead, we should check out a
 working copy to that port's distpath, and then in the extract phase we
 should `svn export` it to the work area.

 Some checks will be needed in the fetch phase to ensure that an existing
 working copy:

  * has no modifications: check `svn status`. Ideally we would try to clean
 up the working copy, for example by `svn revert`ing modified or added or
 deleted files, and then in a second `svn status` run, delete any
 unversioned files. But it's already an improvement if we just discard the
 working copy if `svn status --ignore-externals` produces any output.
  * is from the right URL: check `svn info`: check if the "URL" is the one
 we want. If not, check that the "Repository Root" is a substring of the
 repository we want. If yes, try to `svn switch` to the URL and revision we
 want; if not, discard the working copy.

 So the fetch phase would go something like...

 {{{
 if {working copy exists} {
         if {working copy has modifications} {
                 delete working copy
         }
 }
 if {working copy exists} {
         if {working copy url is the one we want} {
                 svn update to the desired revision
         } else {
                 if {working copy repository root matches beginning of
 desired url} {
                         try to svn switch to the desired url and revision
                         if {an error occurred} {
                                 delete working copy
                         }
                 } else {
                         delete working copy
                 }
         }
 }
 if {working copy doesn't exist} {
         check out working copy
 }
 }}}

 And the extract phase is simply to `svn export` the working copy from the
 distpath to the worksrcpath. (There is
 [http://subversion.tigris.org/issues/show_bug.cgi?id=2429 one problem] if
 the working copy has externals and the user is using Subversion earlier
 than 1.5, for example Subversion 1.4.whatever which is included with
 Leopard. But rather than spend time working around this in base, I think
 this is a case where the port should depend on MacPorts subversion.)

-- 
Ticket URL: <http://trac.macports.org/ticket/16373>
MacPorts <http://www.macports.org/>
Ports system for Mac OS


More information about the macports-tickets mailing list