I have a user that has, up until today, been called foo.bar. Now that user will be known as fb instead from here on. But I would like to up
Insert the following into your pre-revprop-change.bat (by opening it in notepad) in a folder called something like this (depending on your configuration) C:\ASP.NET Projecten\ProjectX\hooks
set magProperyWijzigen = false;
:: Only allow the log message and author to be changed.
if("%propertyName%" == "svn:author") magProperyWijzigen = true;
if("%propertyName%" == "svn:log") magProperyWijzigen = true;
if "%magProperyWijzigen%" == "false" goto ERROR_PROPNAME
svnadmin dump
svnadmin load
edited dataYou can build a command to get the revisions in the log which old_username
has committed with:
svn log | grep "^r[0-9]* | old_username |" | cut -c 2- | awk '{print $1}'
This command gets the logs, searches for lines that appear at the start of each revision, drops the first character (i.e. the r
) from those lines and then takes the first remaining part of the line, which is the revision.
You can use this information in a variety of ways. In bash
you could make it produce the sequence of svn propset
commands with:
for f in `svn log | grep "^r[0-9]* | old_username |" | cut -c 2- | awk '{print $1}'`
do
svn propset --revprop -r $f svn:author your_username
done
which iterates over the values created by the first expression (now in backquotes) and uses those values for your svn propset
command, replacing the $f
with the appropriate revision value.
I've tested this until the last system
command. (I didn't want to change my repository), but this Perl program should work:
#! /usr/bin/env perl
#
use strict;
use warnings;
use feature qw(say);
use autodie; #Don't have to test if open fails
use constant {
SVN => "svn",
REPOS => "http://source/src/myrepo",
OLD_NAME => "dbrown",
NEW_NAME => "db",
};
open (my $log, "-|", LOG_CMD);
while (my $line = <$log>) {
chomp $line;
#
# Is this a revision line?
#
while (my $line = <$log>) {
chomp $line;
next unless $line =~ /^r #Line starts with an "r"
(\d+) #Followed by digits (Capture)
\s\|\s #And a "|" separator
([^\|]+) #This should be the name (Capture)
\s+\| #And another separator
/x;
my $revision = $1;
my $author = $2;
next unless $author eq OLD_NAME;
#
# Found the Author
#
my $command = qq(@{[SVN]} -r $revision pset --revprop svn:author @{[NEW_NAME]});
my $error = system $command;
say STDERR qq(Couldn't modify revision $revision) if $error;
}