When viewing this log output you may want to see the diff of one of the changes and naively type:
svn diff -c 69271
...this may produce no output. However, if you type this intead:
svn diff -c 69271 https://www.example.com/repo/branches/feature_xyz
...then you will see the expected output.
How to determine the branch name from the commit message is left as an exercise for the reader.
"svnlogg" perl script:
#!/usr/bin/env perl
# First, get all the commits.
# -v shows the filenames of changed files,
# -g shows commits from all merged branches.
my $LOG_TEMP = "/tmp/log.txt";
system("svn log -v -g > $LOG_TEMP");
# Then split the list into individual commits, filter out ones we don't want to see, and sort by date:
open(my $fh,"<",$LOG_TEMP) or die "cannot open file $LOG_TEMP";
local $/="------------------------------------------------------------------------"; # define the record separator
my @a = <$fh>; # populate an array with the commit messages
foreach my $aa (
sort {
# sort the commits by date (descending)
my ($c) = $a =~ /\s\|\s(\d\d\d\d\-\d\d\-\d\d)\s/; # extract date field
my ($d) = $b =~ /\s\|\s(\d\d\d\d\-\d\d\-\d\d)\s/; #
$d cmp $c
} @a
) {
# exclude unwanted messages, especially the hundreds of "remove svn:mergeinfo"
# also exclude the commit messages we use by convention in our organisation
# to refer to branches and merges
if ($aa !~ /(remove svn:mergeinfo|branching|final pull)/i) {
print "$aa\n";
}
}
Depending on your hardware it may be unusably slow, so pipe it into a file for viewing later.