[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: Greg Stein <gstein_at_lyra.org>
Date: 2002-01-23 11:55:55 CET

On Wed, Jan 23, 2002 at 12:06:50AM +0000, Philip Martin wrote:
> Greg Stein <gstein@lyra.org> writes:
>...
> > 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.

My question was rhetorical. A caller should *NOT* have to figure out whether
it receives an svndiff stream vs a fulltext based on whether get_wc_prop was
called!

In fact, if get_wc_prop is called, there is still *no* guarantee that you
didn't get a fulltext.

No... the problem lies in ra_dav's get_file() implementation. The spec
states that the file is written to the stream. The *fulltext* file. Thus,
ra_dav needs to build the fulltext based on the information it has (a prior
fulltext, specified by the get_wc_prop results) and the svndiff returned by
the server. With those two pieces, it can construct the new fulltext.

> > 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.

What diff? How does it get that?

I'm presuming the "gets a single fulltext" is done with get_file? And that
(today) it isn't returning a fulltext, so things break?

>...
> > > 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.

What trick? I'm getting suspicious here...

> > > 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.

Correct. And if you try to tell the RA reporter that you have REV1, then you
better respond to get_wc_prop() with the props for REV1. And that could get
nasty.

And if you don't have the props, then you've just forced ra_dav into sending
a fulltext rather than a diff (say, against the wc).

Cheers,
-g

-- 
Greg Stein, http://www.lyra.org/
---------------------------------------------------------------------
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.