Merge branch 'svn/authors-prog-2' of git://bogomips.org/git-svn
* 'svn/authors-prog-2' of git://bogomips.org/git-svn: git-svn: allow empty email-address using authors-prog and authors-file git-svn: search --authors-prog in PATH too
This commit is contained in:
commit
fe0a9eaf31
@ -635,7 +635,8 @@ config key: svn.findcopiesharder
|
||||
|
||||
-A<filename>::
|
||||
--authors-file=<filename>::
|
||||
Syntax is compatible with the file used by 'git cvsimport':
|
||||
Syntax is compatible with the file used by 'git cvsimport' but
|
||||
an empty email address can be supplied with '<>':
|
||||
+
|
||||
------------------------------------------------------------------------
|
||||
loginname = Joe User <user@example.com>
|
||||
@ -654,8 +655,14 @@ config key: svn.authorsfile
|
||||
If this option is specified, for each SVN committer name that
|
||||
does not exist in the authors file, the given file is executed
|
||||
with the committer name as the first argument. The program is
|
||||
expected to return a single line of the form "Name <email>",
|
||||
which will be treated as if included in the authors file.
|
||||
expected to return a single line of the form "Name <email>" or
|
||||
"Name <>", which will be treated as if included in the authors
|
||||
file.
|
||||
+
|
||||
Due to historical reasons a relative 'filename' is first searched
|
||||
relative to the current directory for 'init' and 'clone' and relative
|
||||
to the root of the working tree for 'fetch'. If 'filename' is
|
||||
not found, it is searched like any other command in '$PATH'.
|
||||
+
|
||||
[verse]
|
||||
config key: svn.authorsProg
|
||||
|
@ -374,7 +374,8 @@ version() if $_version;
|
||||
usage(1) unless defined $cmd;
|
||||
load_authors() if $_authors;
|
||||
if (defined $_authors_prog) {
|
||||
$_authors_prog = "'" . File::Spec->rel2abs($_authors_prog) . "'";
|
||||
my $abs_file = File::Spec->rel2abs($_authors_prog);
|
||||
$_authors_prog = "'" . $abs_file . "'" if -x $abs_file;
|
||||
}
|
||||
|
||||
unless ($cmd =~ /^(?:clone|init|multi-init|commit-diff)$/) {
|
||||
|
@ -1482,7 +1482,6 @@ sub call_authors_prog {
|
||||
}
|
||||
if ($author =~ /^\s*(.+?)\s*<(.*)>\s*$/) {
|
||||
my ($name, $email) = ($1, $2);
|
||||
$email = undef if length $2 == 0;
|
||||
return [$name, $email];
|
||||
} else {
|
||||
die "Author: $orig_author: $::_authors_prog returned "
|
||||
@ -2020,8 +2019,8 @@ sub make_log_entry {
|
||||
remove_username($full_url);
|
||||
$log_entry{metadata} = "$full_url\@$r $uuid";
|
||||
$log_entry{svm_revision} = $r;
|
||||
$email ||= "$author\@$uuid";
|
||||
$commit_email ||= "$author\@$uuid";
|
||||
$email = "$author\@$uuid" unless defined $email;
|
||||
$commit_email = "$author\@$uuid" unless defined $commit_email;
|
||||
} elsif ($self->use_svnsync_props) {
|
||||
my $full_url = canonicalize_url(
|
||||
add_path_to_url( $self->svnsync->{url}, $self->path )
|
||||
@ -2029,15 +2028,15 @@ sub make_log_entry {
|
||||
remove_username($full_url);
|
||||
my $uuid = $self->svnsync->{uuid};
|
||||
$log_entry{metadata} = "$full_url\@$rev $uuid";
|
||||
$email ||= "$author\@$uuid";
|
||||
$commit_email ||= "$author\@$uuid";
|
||||
$email = "$author\@$uuid" unless defined $email;
|
||||
$commit_email = "$author\@$uuid" unless defined $commit_email;
|
||||
} else {
|
||||
my $url = $self->metadata_url;
|
||||
remove_username($url);
|
||||
my $uuid = $self->rewrite_uuid || $self->ra->get_uuid;
|
||||
$log_entry{metadata} = "$url\@$rev " . $uuid;
|
||||
$email ||= "$author\@" . $uuid;
|
||||
$commit_email ||= "$author\@" . $uuid;
|
||||
$email = "$author\@$uuid" unless defined $email;
|
||||
$commit_email = "$author\@$uuid" unless defined $commit_email;
|
||||
}
|
||||
$log_entry{name} = $name;
|
||||
$log_entry{email} = $email;
|
||||
|
@ -112,6 +112,20 @@ test_expect_success !MINGW 'fresh clone with svn.authors-file in config' '
|
||||
)
|
||||
'
|
||||
|
||||
cat >> svn-authors <<EOF
|
||||
ff = FFFFFFF FFFFFFF <>
|
||||
EOF
|
||||
|
||||
test_expect_success 'authors-file imported user without email' '
|
||||
svn_cmd mkdir -m aa/branches/ff --username ff "$svnrepo/aa/branches/ff" &&
|
||||
(
|
||||
cd aa-work &&
|
||||
git svn fetch --authors-file=../svn-authors &&
|
||||
git rev-list -1 --pretty=raw refs/remotes/origin/ff | \
|
||||
grep "^author FFFFFFF FFFFFFF <> "
|
||||
)
|
||||
'
|
||||
|
||||
test_debug 'GIT_DIR=gitconfig.clone/.git git log'
|
||||
|
||||
test_done
|
||||
|
@ -9,7 +9,9 @@ test_description='git svn authors prog tests'
|
||||
|
||||
write_script svn-authors-prog "$PERL_PATH" <<-\EOF
|
||||
$_ = shift;
|
||||
if (s/-sub$//) {
|
||||
if (s/-hermit//) {
|
||||
print "$_ <>\n";
|
||||
} elsif (s/-sub$//) {
|
||||
print "$_ <$_\@sub.example.com>\n";
|
||||
} else {
|
||||
print "$_ <$_\@example.com>\n";
|
||||
@ -69,6 +71,28 @@ test_expect_success 'authors-file overrode authors-prog' '
|
||||
git --git-dir=x/.git config --unset svn.authorsfile
|
||||
git --git-dir=x/.git config --unset svn.authorsprog
|
||||
|
||||
test_expect_success 'authors-prog imported user without email' '
|
||||
svn mkdir -m gg --username gg-hermit "$svnrepo"/gg &&
|
||||
(
|
||||
cd x &&
|
||||
git svn fetch --authors-prog=../svn-authors-prog &&
|
||||
git rev-list -1 --pretty=raw refs/remotes/git-svn | \
|
||||
grep "^author gg <> "
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'imported without authors-prog and authors-file' '
|
||||
svn mkdir -m hh --username hh "$svnrepo"/hh &&
|
||||
(
|
||||
uuid=$(svn info "$svnrepo" |
|
||||
sed -n "s/^Repository UUID: //p") &&
|
||||
cd x &&
|
||||
git svn fetch &&
|
||||
git rev-list -1 --pretty=raw refs/remotes/git-svn | \
|
||||
grep "^author hh <hh@$uuid> "
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'authors-prog handled special characters in username' '
|
||||
svn mkdir -m bad --username "xyz; touch evil" "$svnrepo"/bad &&
|
||||
(
|
||||
|
Loading…
Reference in New Issue
Block a user