On 25.06.2013, at 18:45, Stefan Sperling wrote:
> On Tue, Jun 25, 2013 at 05:59:27PM +0200, Tobias Bading wrote:
>> Hmm, but why is diff -cM:N working if the file was copied from
>> revision M? Sure, the target of the copy operation did not exist in
>> revision N-1 if M < N-1, but it didn't exist in revision M either.
> 
> The file did exist at the copyfrom location in revision M, correct?
> In which case Subversion can detect that the files at their respective
> paths in revision M and N are related, so it displays a diff between
> them. The revision N-1 doesn't matter in this case. It is not "operative"
> on the file, and is ignored.
> 
> But if you restrict the operative revision range of your diff such that
> the copy source is not within that range, why would you expect Subversion to
> still look for changes in that revision, and show a diff against the copy
> source? I believe that 'svn diff' is giving you the right answer based on
> parameters you've given it to work with.
> 
> I realise that I'm not helping you much. I'm just explaining the
> current intended behaviour. I don't think you've found a bug.

I wouldn't call it a bug either, but even less a feature ;-). I'm simply 
expecting -cN to mean "the changes made in revision N", not the changes between 
revisions N-1 and N. In most cases there's no difference in both 
interpretations, but with copies that warp time (so to speak) by copying from 
source@M to target@N with M < N-1, 'diff -cN target' is as useful as 'cat 
</dev/null' :-(.

> The emacs vc-svn.el (sorry I didn't know that "plugin" is not the proper
> term to use here) would indeed need to pass something more clever than
> a hardcoded -rN-1:N to yield a useful result in your use case.

*slowly waves his hand in front of Stefan*
"This is not the editor you're looking for... move along." :-D

Seriously though, what would you have to do if you have the path of a FILE in 
the working copy and a revision number N and you would like to know what was 
changed in that file in that revision?
Something like 'svn log --limit 2 -rN:0 FILE' and if that returns two revision, 
take the second one (let's call it M) and do a 'svn diff -rM:N FILE'?
Where's my Beißholz when I need it?!? :-D

> The location of a file across revision history is not a very simple issue
> in Subversion, and can sometimes be counterintuitive. If you haven't
> done so I recommend reading this page for more information about how
> Subversion resolves paths in history:
> http://svnbook.red-bean.com/en/1.7/svn.advanced.pegrevs.html

Thanks for the tip. I read it a few years ago, maybe I should read it again :-).

Tobias

Reply via email to