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

Re: svn_fs_history_prev() and svn_fs_copied_from() question

From: Daniel Shahaf <d.s_at_daniel.shahaf.name>
Date: Thu, 18 Nov 2010 16:57:06 +0200

C. Michael Pilato wrote on Thu, Nov 18, 2010 at 09:09:57 -0500:
> On 11/18/2010 09:02 AM, C. Michael Pilato wrote:
> > On 11/18/2010 08:43 AM, Daniel Shahaf wrote:
> >> Yes, that's what I meant, but I see that Philip already committed a fix.
> >>
> >> Question to FS people:
> >>
> >> Is the svn_fs_history_location(svn_fs_history_prev()) approach
> >> equivalent to the svn_fs_copied_from() approach?
> >
> > No.
> >
> > svn_fs_copied_from() will only return information about copies when you ask
> > it of the actual copy target.
> >
> > svn_fs_history_prev() will traverse history thru copies for any subtree of
> > the copy.
> >
> > For example, in our Greek tree, if r2 is a move of '/A' to '/Z', then:
> >
> > svn_fs_copied_from('/Z', r2) = '/A', r1
> >
> > svn_fs_copied_from('/Z/B/E/alpha', r2) = NULL, SVN_INVALID_REVNUM
> >
> > but:
> >
> > svn_fs_history_prev('/Z', r2) = '/A', r1
> >
> > svn_fs_history_prev('/Z/B/E/alpha', r2) = '/A/B/E/alpha', r1
>

Okay.

> Another subtlety. Say some other change is committed in our under '/Z' in
> r3 (but not to '/Z/B/E/alpha'):
>
> svn_fs_copied_from('/Z', r3) = NULL, SVN_INVALID_REVNUM
> svn_fs_copied_from('/Z/B/E/alpha', r3) = NULL, SVN_INVALID_REVNUM
>
> svn_fs_history_prev('/Z', r3) = '/Z', r2
> svn_fs_history_prev('/Z/B/E/alpha', r3) = '/Z/B/E/alpha', r2
>

Wouldn't the results of the above four calls be the same regardless
of whether or not r3 touched /Z/B/E/alpha?

> Notice that svn_fs_copied_from() doesn't see the copy because the
> node-revision for /Z_at_3 was not the exact target of a copy.
>

Understood.

> Notice also that svn_fs_history_prev() doesn't return information about the
> copy source either, because the previous "interesting history location" is
> the copy itself.
>

Okay; in other words, svn_fs_history_prev() considers a path-revision
which are the *result* of a copy operation an "interesting" location.

(So the first call will return the copy target, /Z_at_2, and only the next
call will return /A_at_rN with N<2.)

> Another nuance not demonstrated by my simple example is that
> svn_fs_history_prev() might not really return "the copy source", even when
> you query the exact copy target. Why? Because the source of the copy might
> not be an "interesting history location". Maybe you did 'svn copy
> ^/trunk_at_20 ^/branches/branch' (creating r21), but prior to your commit, the
> last time ^/trunk changed was r10. svn_fs_history_prev('^/branches/branch',
> r21) will return '^/trunk', r10, *not* '^/trunk', r20.
>

Okay; in other words, "being copied to" isn't a "interesting" history location.

From this I understand that, if r20 did not touch '^/trunk', then
the two calls:
        svn_fs_history_prev('^/branches/branch', r21)
        svn_fs_history_prev('^/trunk', r20)
will behave identically.

On the other hand, in your example, I expect that svn_fs_copied_from()
will return /trunk_at_20?

(not because you said so, but because I expect /something/ to return /trunk_at_20)

> Confused yet?
>

I believe that I am not confused.

> --
> C. Michael Pilato <cmpilato_at_collab.net>
> CollabNet <> www.collab.net <> Distributed Development On Demand
>

Thank you very much for the thorough explanations. :-)

Daniel
Received on 2010-11-18 16:00:20 CET

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