On Tue, Aug 3, 2010 at 12:40 PM, Paul Burba <ptbu...@gmail.com> wrote:
> Ok, I am waving the white flag as far as implementing a fix for issue
> #3657 in the RA layer.  I simply don't see how it can be done outside
> of this:  Put the DAV update report handler into send-all=TRUE
> <S:update-report send-all=TRUE> mode when creating a
> svn_ra_reporter3_t * during a merge/diff.  This would prevent
> <S:fetch-props/> response that causes the client to fetch *all* the
> properties of a path which subsequently pushes these to the
> svn_delta_editor_t callbacks as if they were all prop *changes* (as
> Mike discussed here
> http://subversion.tigris.org/issues/show_bug.cgi?id=3657#desc9).
>
> fyi: Currently this is how the two DAV RA layers use send-all mode:
>
>               send-all   send-all
>               mode       mode
>  operation    ra_serf    ra_neon
>  ---------    --------   ---------
>  update       FALSE      TRUE
>  status       FALSE      TRUE
>  switch       FALSE      TRUE
>  diff         FALSE      FALSE
>
> In that attached patch I reverted r966822 and tried the aforementioned
> approach by tweaking ra_neon so the send-all mode on diff/merge is
> TRUE.  The whole test suite passes (including the test for issue
> #3657).  I haven't got an equivalent change to ra_serf to work yet,
> but I'm not too worried about that yet because...
>
> ...After testing out this idea, I realized the problem with this
> approach: It reopens issue #2048 'Primary connection (of parallel
> network connections used) in ra-dav diff/merge timeout
> unnecessarily.':
>
>  http://subversion.tigris.org/issues/show_bug.cgi?id=2048
>  http://svn.apache.org/viewvc?view=revision&revision=853457
>
> So I'm at a dead-end right now.  I'm happy to revert r966822 and
> reopen issue #3657 if the consensus is that my initial fix is a sloppy
> band-aid to cover incorrect ra_neon/ra_serf behavior and that the
> latter two are where the fix belongs.
>
> Paul

Mike suggested to me that the fix for this problem can be made in
mod_dav_svn, since the update reporter already knows which properties
have changed, *regardless* of the send-all mode, but it discards this
information if send-all=FALSE and instead instead sends the client a
'fetch-props' response.  As described previously in this thread, this
causes the client to fetch all the properties of the path, not just
the changes, and *all* the props are pushed through the editor
callbacks as if they were all actual changes (which again is the core
problem of issue #3657).

I'm working on that approach, but in the meantime I have a question
about the behavior of svn diff --summarize when describing the
addition of paths with properties.

### Let's take a vanilla greek tree, add a file and directory,
### set a prop on each, and commit as r2:

  >echo nu file > nu

  >svn add nu
  A         nu

  >svn ps prop val nu
  property 'prop' set on 'nu'

  >svn mkdir J
  A         J

  >svn ps prop val J
  property 'prop' set on 'J'

### Status looks right, two scheduled additions:

  >svn st
  A       nu
  A       J

### Commit it

  >svn ci -m ""
  Adding         J
  Adding         nu
  Transmitting file data .
  Committed revision 2.

### Check diff --summarize for r2

  >svn diff -r1:2 --summarize
  AM      nu
  AM      J

Should we really be describing the props for this added (not copied!)
file as modified?  It seems incorrect to call the props modified in
this case.  I ask because this is one of the problems I am running
into with fixing this issue in mod_dav_svn, and before I spend more
time trying to "fix" it I want to be sure the current behavior is
really what we expect.

Paul "Dying slowly at the hands of mod_dav_svn" Burba

Reply via email to