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

Re: server diffs and svn diff -rREV1:REV2

From: Philip Martin <philip_at_codematters.co.uk>
Date: 2002-01-23 01:06:50 CET

Greg Stein <gstein@lyra.org> writes:

> On Tue, Jan 22, 2002 at 08:35:47PM +0000, Philip Martin wrote:
> > Hello
> >
> > I have a fix for 'svn diff -rREV1:REV2' that copes with the new diffs
> > sent over ra_dav. It all works :-) except it breaks ra_local :-(
> >
> > Consider a file at REV3 in the working copy. When asking for a REV1 to
> > REV2 diff, then it appears that ra_dav sends a diff that will
> > construct REV2 from REV3, but ra_local sends a diff that will
> > construct REV2 from REV1. [When using ra_dav the the
> > svn_ra_callbacks_t get_wc_prop function is invoked to determine the
> > working copy revision. This doesn't happen over ra_local.]
>
> Hmm. The get_file() call needs to be changed. It shouldn't just return a
> diff. How is the caller supposed to know whether they got a fulltext or a
> diff?

As far as I can see, because get_wc_prop() returned a non-null value!
I can force ra_dav to return a full text by not providing a version
when get_wc_prop() is called.

>
> When I did the diff work, I realized that we probably want a callback that
> says "give me the base fulltext that you said I have." e.g. if the client
> provides wc-props for rev 5 of FOO, then the callback would return that
> fulltext. The get_file function would then compose the fulltext with the
> diff to provide the fulltext of rev R to the caller.
>
> The diff code would then get_file() two fulltexts and then diff them.

No, it gets a single fulltext, and uses a diff to generate the second.

>
> > Am I right in thinking that ra_local sends diffs differently from
> > ra_dav?
>
> ra_local will never return a diff against a working copy file. It just grabs
> the fulltext of the rev/path that you ask for.

That's what I thought.

>
> > Now I know how to cause ra_dav to mimic the ra_local behaviour, but
> > that is effectively disabling an ra_dav feature. It would also make
> > some of my new code redundant, which seems like a waste.
>
> Turning off the diff-over-the-wire would suck. I think the problem is in
> get_file, and the need for the extra callback.

While the get_wc_prop() "trick" works it is not necessary.

>
> > There doesn't seem to be a way within the editor to determine which
> > file is the baseline for the diff, I just have to know. Is passing an
> > ra_dav/ra_local flag into the function that creates the editor the
> > best way to do this?
>
> I don't know how the "svn diff -r REV1:REV2" works. It seems that you always
> have to fetch two full texts and have the client run diff over them (using
> whatever options the user supplies; e.g. -u or -C)

I have realised that when creating a REV2 version there is no need to
prefer a wc to REV2 diff over a REV1 to REV2 diff. There is no a
priori reason why one should be better than the other.

I think I have a solution; certainly all the tests, some new, pass
over ra_dav and ra_local. I'll check it in.

-- 
Philip
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Sat Oct 21 14:36:58 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.