Dmitry Pavlenko wrote on Mon, Mar 19, 2012 at 21:54:58 +0100: > Hello all. > I'm trying to understand the principles how SVN calculates paths for diff. > > I've put repository attached under URL "http://localhost/svn". I'll put its > history here: > ------------------------------------------------------------------------ > r4 | dmit10 | 2012-03-19 20:34:31 +0100 (Пнд, 19 Мар 2012) | 2 lines > Changed paths: > A /directory/subdirectory/file1 > A /directory/subdirectory/file2 > > files again > > ------------------------------------------------------------------------ > r3 | dmit10 | 2012-03-19 20:33:55 +0100 (Пнд, 19 Мар 2012) | 2 lines > Changed paths: > A /directory/subdirectory > > subdirectory > > ------------------------------------------------------------------------ > r2 | dmit10 | 2012-03-19 20:33:39 +0100 (Пнд, 19 Мар 2012) | 2 lines > Changed paths: > A /directory > > directory > > ------------------------------------------------------------------------ > r1 | dmit10 | 2012-03-19 20:33:27 +0100 (Пнд, 19 Мар 2012) | 2 lines > Changed paths: > A /file1 > A /file2 > > files > > ------------------------------------------------------------------------ > > > > Then I run: > > $ svn diff http://localhost/svn/directory/subdirectory@1 > http://localhost/svn/directory/subdirectory@4 > > (note that neither "http://localhost/svn/directory/subdirectory" nor > "http://localhost/svn/directory" exist in r1) > > And I get >
I expected you'd get an "/directory/subdirectory@1 doesn't exist" error. > Index: subdirectory/file1 > =================================================================== > --- subdirectory/file1 (revision 0) > +++ subdirectory/file1 (revision 4) > @@ -0,0 +1 @@ > +file1 > Index: subdirectory/file2 > =================================================================== > --- subdirectory/file2 (revision 0) > +++ subdirectory/file2 (revision 4) > @@ -0,0 +1 @@ > +file2-changed > > > i.e. all paths are relative to "http://localhost/svn/directory" that > is strange for me. I tried to debug the code. All editor calls are > relative to that path too ("add_file subdirectory/file1"). > > svn_ra_do_diff3 is called with ra_session pointing to > "http://localhost/svn", > url2="http://localhost/svn/directory/subdirectory" and > target="directory/subdirectory" (that contradicts svn_ra_do_diff3 > documentation --- as I understand it --- stating, that states that > "diff_target is an optional single path component"). > "Single path component" means to me "does not contain slashes". > So I have some "yes-no" questions about that all: > 1. Do I understand correctly that "target" parameter in > svn_ra_do_diff3 should never contain '/'? +1 > 2. Is current diff output really expected (I'm about the paths, the > files' content is correct) or is there a bug? Latter IMO, the first target doesn't exist so I'd expect an error. > 3. Is there any guarantee (suppose, all bugs are fixed if exist) about > paths in diff output --- relative to what are they (expected to be)? > As I understand, SVN wants to show them relative to the first ancestor > of arguments > which exists in both revisions (in my example --- relative to > "http://localhost/svn" because "http://localhost/svn/directory" and > "http://localhost/svn/directory/subdirectory" do not exist in r1). > Please, confirm or disprove. If > there's no guarantee, and it is just human-readable, it's ok too, but > I would like to know. I odn't know if we make a guarantee, but if we don't we should. I'd expect paths in the output to be relative to the targets. > > Thanks.