work-in-progress tree conflicts diff, please comment

Stefan Sperling stsp at
Tue Jan 6 06:28:07 CST 2009

On Tue, Jan 06, 2009 at 04:55:09AM -0500, C. Michael Pilato wrote:
> Stefan Sperling wrote:
> > Question:
> > 
> > The following steps I've lined out:
> > 
> >       <listitem><para>Check the file to be renamed for local
> >           modifications.</para></listitem>
> > 
> >       <listitem><para>Delete the file at its old location, and
> >           if it had local modifications, keep an on-disk copy
> >           of the file at the old location. This on-disk copy
> >           now appears as an unversioned file in the working
> >           copy.</para></listitem>
> > 
> >       <listitem><para>Add the file, as it exists in the repository,
> >           at its new location.</para></listitem>
> >       </itemizedlist>
> > 
> > They do not take the copy improvements made for 1.5, by sussman, into account.
> >
> > 
> > However, it seems that this behaviour does still exists.
> > When I run the attached shell script with 1.5.5, I get the described
> > situation in the working copy.
> > But weren't sussman's changes supposed to address this problem?
> IIUC, sussman's changes were such that they *might* make a difference, if
> the stars aligned correctly and the cactus plants in Nevada cast shadows
> that were exactly 137% longer than the plants themselves and the repository
> happened to send the tree changes in just the right order.  (I'm not a big
> of fan of effectively-from-the-user-perspective non-deterministic behavior,
> but I think that's what we've got today.  *shrug*)

Turns out that with tree conflict detection, the file isn't deleted
at all in this scenario. Hence we end up copying local changes over.
Output from recipe script attached in previous mail, when run with
current trunk:

  + echo alpha, modified
  + > recipe/trunk2/alpha
  + svn update recipe/trunk2
     C recipe/trunk2/alpha
  A    recipe/trunk2/alpha.moved
  Updated to revision 2.
  Summary of conflicts:
    Tree conflicts: 1
  + svn status recipe/trunk2
  A  +  C recipe/trunk2/alpha
        >   local edit, incoming delete upon update
  M       recipe/trunk2/alpha.moved
  + cat recipe/trunk2/alpha
  alpha, modified
  + cat recipe/trunk2/alpha.moved
  alpha, modified

What's funny is this error we get in case the update does both
a move and a modification of a file:

  + echo alpha, modified after move
  + > recipe/trunk/alpha.moved 
  + svn commit -m modified alpha.moved recipe/trunk
  Sending        recipe/trunk/alpha.moved
  Transmitting file data .
  Committed revision 3.
  + echo alpha, modified
  + > recipe/trunk2/alpha 
  + svn update recipe/trunk2
     C recipe/trunk2/alpha
  Conflict discovered in 'recipe/trunk2/alpha.moved'.
  Select: (p) postpone, (df) diff-full, (e) edit,
          (mc) mine-conflict, (tc) theirs-conflict,
          (s) show all options: df
  --- recipe/trunk2/.svn/tmp/tempfile.tmp Tue Jan  6 13:24:48 2009
  +++ recipe/trunk2/.svn/tmp/tempfile.3.tmp       Tue Jan  6 13:24:48 2009
  @@ -1 +1,5 @@
  +<<<<<<< .mine
  +alpha, modified
  +alpha, modified after move
  +>>>>>>> .r3
  Select: (p) postpone, (df) diff-full, (e) edit, (r) resolved,
          (mc) mine-conflict, (tc) theirs-conflict,
          (s) show all options: p
  C    recipe/trunk2/alpha.moved
  subversion/libsvn_wc/log.c:625: (apr_err=155009)
  svn: In directory 'recipe/trunk2'
  subversion/libsvn_subr/io.c:2637: (apr_err=2)
  svn: Can't open file 'recipe/trunk2/alpha.moved': No such file or directory

Looks like a bug to me...
I'll bring this up on dev@


More information about the svnbook-dev mailing list