On 2012-07-04 14:01:36 +0100, Philip Martin wrote: > Vincent Lefevre <vincent-...@vinc17.net> writes: > > > On 2012-07-04 13:28:21 +0100, Philip Martin wrote: > >> > >> Where would the revision 3 come from? LastChangedRev is 2. That's what > >> Subversion's cheap copy means. > > > > Yes, but I meant that LastChangedRev could be 3 after a move. > > I don't think this contradicts cheap copy: when doing > > > > svn cat file:///tmp/my-test-svn/svn/dir2/file@3 > > > > Subversion gets the file via a COPY node or something like that > > (I don't know the exact internals) as the file hasn't changed, > > and it could get LastChangedRev from it. > > No, it doesn't follow a copy. dir2@3 has a reference to the the same > child object as dir1@2. dir2/file@3 is exactly the same object as > dir1/file@2. That's what a cheap copy means.
But how does Subversion know that dir2/file@3 is the same object as dir1/file@2? It must follow some reference, and if a LastChangedRev is associated to each reference in the internal data structures, Subversion will get the correct revision. At worst, you will only lose a constant factor in time and memory. > > My point is that <URL>@<LastChangedRev> should always be a valid > > reference to the file, and it should be equivalent to <URL>@HEAD > > or just <URL>. > > That's not the way it works. I think you want: > > -r<LastChangedRev> <URL>@<Revision> > > i.e. take the current URL@Revision and go back to LastChangedRev. Well, I think that the Header keyword is really confusing because it just gives <URL> and <LastChangedRev>, while if a URL and revision are given together, one would expect <URL> and <Revision> (or some equivalent value). -- Vincent Lefèvre <vinc...@vinc17.net> - Web: <http://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <http://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)