[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Issue 730 related question about svn_ra_reporter_t interface

From: <naked_at_iki.fi>
Date: 2003-01-27 09:12:35 CET

First, the question simply - then the specifics.

  How should a missing entry which does have some non-missing
  children be reported through the interface?

Let's assume an interrupted checkout of the greek tree:

/iota
/A/
/A/mu
/A/B/
/A/B/lambda
/A/B/E
/A/B/E/alpha
/A/B/E/beta
/A/B/F
/A/C/
/A/D/
/A/D/gamma
/A/D/H/
/A/D/H/chi
*** interrupted here ***
/A/D/H/psi
/A/D/H/omega
/A/D/G/
/A/D/G/pi
/A/D/G/rho
/A/D/G/tau

If we look at the operations given through svn_delta_editor_t, the
last state that was tranmitted was that /, /A, /A/D, /A/D/H
directories were open, /A/B, /A/B/E, /A/B/F, /A/C directories
were closed and all the items after interruption point are unknown to
the working copy, since they have not even been mentioned yet.

If a subsequent update were to be run on that directory, could this be
reported as such through the svn_ra_reporter_t interface:

  delete_path(baton, /, pool)
  set_path(baton, /iota, revision, pool)
  set_path(baton, /A/mu, revision, pool)
  set_path(baton, /A/B, revision, pool)
  set_path(baton, /A/C, revision, pool)
  set_path(baton, /A/D/gamma, revision, pool)
  set_path(baton, /A/D/H/chi, revision, pool)

I'm not too sure how update works it magic, but what I have surmised
is that first a transaction is built that represents the state the
working copy, then that transaction is diffed against the revision to
update to, and the differences are given through the
svn_delta_editor_t interface to the working copy. Correct me or hint
me towards a document if I have gotten it wrong.

Can a transaction have paths dangling below a deleted path, that
would be picked up properly when finding the differences? If not, can
directories somehow be created in an empty state in the transaction,
so that the differences reported would still give all the information
about the directory as if it was missing? If so, would this allow
something like:

  empty_path(baton, /, pool)
  set_path(baton, /iota, revision, pool)
  empty_path(baton, /A, pool)
  set_path(baton, /A/mu, revision, pool)
  set_path(baton, /A/B, revision, pool)
  set_path(baton, /A/C, revision, pool)
  empty_path(baton, /A/D, pool)
  set_path(baton, /A/D/gamma, revision, pool)
  empty_path(baton, /A/D/H, pool)
  set_path(baton, /A/D/H/chi, revision, pool)

Or is there a better way to solve all this that I just haven't seen?

Note that I haven't really committed myself on any specific
alternative on solving issue #730 yet - still scouting out the options
so I can rule out ones that are impossible to implement.

-- Naked

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Sat Oct 14 02:19:11 2006

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.