Uploaded image for project: 'Subversion'
  1. Subversion
  2. SVN-1788

svn:externals execution order is nondeterministic

VotersWatch issueWatchersLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • all
    • 1.1-consider
    • unknown
    • None

    Description

      If you look at the value of an svn:externals property, it looks a lot like a
      shell script.  That is, it gives the distinct impression that you're going to
      get a bunch of extra checkouts executed in a specific order.
      
      Of course, that's not actually what the implementation does.  It parses the
      property value into a hash, and then the checkouts happen in an unpredictable
      order when looping through the hash.
      
      This can burn users, certainly.  Someone in IRC had an svn:externals value like
      this:
      
           X       URL1
           X/Y/Z   URL2
      
      Now, what they *expected* to happen was a checkout of URL1 into a newly-created,
      versioned subdirectory named X.  (It just so happens that such a checkout would
      also create a versioned directory Y.)  Then they expected a checkout of URL2 to
      happen in a newly-created, versioned directory Z.  Z would essentially end up as
      a happy nested working copy, even though it's "disconnected" from Y.  A totally
      reasonable expectation.
      
      But instead, they got the checkouts in reverse order.  First X and Y were
      created as *unversioned* directories, followed by a checkout into newly-created
      Z.  Then a checkout into X happened, but the unversioned Y directory obstructed
      the checkout from creating a versioned Y.  Yucky failure.
      
      Anyway... the point here is that we really ought to change the implementation to
      guarantee the ordering of external checkouts and updates.
      

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            sussman Ben Collins-Sussman
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment