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

Re: svn log --show-diff behavior

From: Alexey Neyman <stilor_at_att.net>
Date: Sat, 14 Aug 2010 11:47:52 -0700

On Saturday, August 14, 2010 04:31:44 am Stefan Sperling wrote:
> > Judging from the commit message, this option should mimic 'git log -p'
> > behavior, but git does not dump the whole diff by default when -p is
> > specified. It only diffs the requested path and produces a full diff only
> > if --full-diff option is also passed.
>
> There is no need for a --full-diff option.
> If you have a commit with two paths, A and B, and you run svn log --diff A,
> you will only see a diff for A. So you can limit the scope of the diff
> shown by limiting the log operation to just the paths you are interested
> in.

I know that 'svn log' can take multiple paths. But still, there is a use case
for --full-diff:

a) One does not know the list of changed paths beforehand. Therefore, one
first needs to run 'svn log -v' to find what paths were changed and then run
'svn log --diff' with those paths. This may be quite inconvenient if the paths
are scattered over the repository.

b) Suppose A is the on which one wants log with diffs; B and C are paths that
were changed alongside A:

rev X1: A B
rev X2: B
rev X3: A C
rev X4: C

Even if full list of paths is supplied, 'svn log --diff A B C' would show
revisions X1, X2, X3, X4, while 'svn log --diff --full-diff A' would have
shown only revisions X1 and X3 (but with corresponding changes
to paths B and C)

> It may be possible to show the diff anyway treating one of the sides as
> empty as you suggest, and thus showing a diff with only adds/deletes.
> I agree that this would make sense.
>
> But making such a change may require substantial work within the Subversion
> libraries, so it takes more time than the quick band-aid fix which I
> applied to log-cmd.c to make it produce at least some sort of meaningful
> output. Sometimes circumstances force people to take short cuts...
 
Thing is, current approach does not work at all if the parent directory was
also added in the same revision as the path being logged. Try this:

[[[
#! /bin/bash
rm -rf tst-repo tst-wc
svnadmin create tst-repo
svn mkdir -m commit_1 "file://`pwd`/tst-repo/a"
svn co "file://`pwd`/tst-repo/a" tst-wc
svn mkdir tst-wc/b
echo 3 > tst-wc/b/3
echo 4 > tst-wc/b/4
svn add tst-wc/b/[34]
svn ci -m commit_2 tst-wc
svn log --diff tst-wc/b/3
]]]

'svn log' at the end of this script hangs indefinitely.

> It should show a diff which shows things as added. We need the output to
> be suitable for use with svn patch. A special message that only humans
> will understand isn't useful. Showing a diff with too broad a scope is
> much better than showing no diff at all.

Given that the changes are in the last-revision-first order, this patch would
only be applicable in the reverse direction (if it contains more than one
revision).

Regards,
Alexey.
Received on 2010-08-14 20:48:33 CEST

This is an archived mail posted to the Subversion Dev mailing list.