"Bert Huijben" <b...@qqmail.nl> writes:

>> -----Original Message-----
>> From: MARTIN PHILIP [mailto:codematt...@ntlworld.com] On Behalf Of
>> Philip Martin
>> Sent: donderdag 4 april 2013 14:23
>> To: Bert Huijben
>> Cc: 'Philip Martin'; dev@subversion.apache.org
>> Subject: Re: issue 4345: switch/delete/commit confusion
>> 
>> 1.6 replaces the switched URL.  As far as I can see 1.6 has resonable
>> behaviour from a user's point of view.  The file is marked switched the
>> commit affects the switched item.  Even update after committing the
>> delete or replace seems to work: for replace the item remains switched,
>> for delete the switched item is removed from the working copy and update
>> restores the unswitched item.
>
> While this might be/sound reasonable, this is not how
> svn_wc__db_scan_addition() and everything build on top works.
>
> Added nodes are in WC-NG always added below their parent; they don't have a
> URL. What is below an added tree is completely ignored for its status
>
> Changing this, changes the entire WC-NG design in many more ways than I can
> think of...

I've always found the scan_deletion/scan_additon API hard to use.  I
don't see anything in the NODES data model that would stop us
implementing the 1.6 behaviour.  The only (!) problem is the code.

Three switched nodes deleted:

$ svn st
D    S  f1
D    S  f2
D    S  f3

op-depth local-relpath   presence     repos-path
     0                     normal       trunk
     0      f1             normal       branch/f1
     0      f2             normal       branch/f2
     0      f3             normal       branch/f3
     1      f1          base-delete
     1      f2          base-delete
     1      f3          base-delete

Replace one with an add, one with a copy:

$ svn st
D    S  f1
R    S  f2
R +  S  f3

op-depth local-relpath   presence     repos-path
     0                     normal       trunk
     0      f1             normal       branch/f1
     0      f2             normal       branch/f2
     0      f3             normal       branch/f3
     1      f1          base-delete
     1      f2             normal
     1      f3             normal       C/f4

Commit:

op-depth local-relpath   presence     repos-path
     0                     normal       trunk
     0      f1           not-present    branch/f1
     0      f2             normal       branch/f2
     0      f3             normal       branch/f3

Update:

op-depth local-relpath   presence     repos-path
     0                     normal       trunk
     0      f1             normal       trunk/f1
     0      f2             normal       branch/f2
     0      f3             normal       branch/f3

The log for the commit would show:

   D /branch/f1
   R /branch/f2
   R /branch/f3 (copied from /C/f4)

-- 
Certified & Supported Apache Subversion Downloads:
http://www.wandisco.com/subversion/download

Reply via email to