зеркало из https://github.com/microsoft/git.git
git-svn: add support for pulling author from From: and Signed-off-by:
Add support for pulling the real author of a commit from the From: and first Signed-off-by: fields of the SVN commit message. Signed-off-by: Andy Whitcroft <apw@shadowen.org> Acked-by: Eric Wong <normalperson@yhbt.net>
This commit is contained in:
Родитель
f4dd334bff
Коммит
70ae04e4e8
37
git-svn.perl
37
git-svn.perl
|
@ -81,6 +81,7 @@ my %fc_opts = ( 'follow-parent|follow!' => \$Git::SVN::_follow_parent,
|
||||||
'quiet|q' => \$_q,
|
'quiet|q' => \$_q,
|
||||||
'repack-flags|repack-args|repack-opts=s' =>
|
'repack-flags|repack-args|repack-opts=s' =>
|
||||||
\$Git::SVN::_repack_flags,
|
\$Git::SVN::_repack_flags,
|
||||||
|
'use-log-author' => \$Git::SVN::_use_log_author,
|
||||||
%remote_opts );
|
%remote_opts );
|
||||||
|
|
||||||
my ($_trunk, $_tags, $_branches, $_stdlayout);
|
my ($_trunk, $_tags, $_branches, $_stdlayout);
|
||||||
|
@ -1220,7 +1221,8 @@ use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use vars qw/$default_repo_id $default_ref_id $_no_metadata $_follow_parent
|
use vars qw/$default_repo_id $default_ref_id $_no_metadata $_follow_parent
|
||||||
$_repack $_repack_flags $_use_svm_props $_head
|
$_repack $_repack_flags $_use_svm_props $_head
|
||||||
$_use_svnsync_props $no_reuse_existing $_minimize_url/;
|
$_use_svnsync_props $no_reuse_existing $_minimize_url
|
||||||
|
$_use_log_author/;
|
||||||
use Carp qw/croak/;
|
use Carp qw/croak/;
|
||||||
use File::Path qw/mkpath/;
|
use File::Path qw/mkpath/;
|
||||||
use File::Copy qw/copy/;
|
use File::Copy qw/copy/;
|
||||||
|
@ -2060,11 +2062,17 @@ sub do_git_commit {
|
||||||
croak "$log_entry->{revision} = $c already exists! ",
|
croak "$log_entry->{revision} = $c already exists! ",
|
||||||
"Why are we refetching it?\n";
|
"Why are we refetching it?\n";
|
||||||
}
|
}
|
||||||
$ENV{GIT_AUTHOR_NAME} = $ENV{GIT_COMMITTER_NAME} = $log_entry->{name};
|
$ENV{GIT_AUTHOR_NAME} = $log_entry->{name};
|
||||||
$ENV{GIT_AUTHOR_EMAIL} = $ENV{GIT_COMMITTER_EMAIL} =
|
$ENV{GIT_AUTHOR_EMAIL} = $log_entry->{email};
|
||||||
$log_entry->{email};
|
|
||||||
$ENV{GIT_AUTHOR_DATE} = $ENV{GIT_COMMITTER_DATE} = $log_entry->{date};
|
$ENV{GIT_AUTHOR_DATE} = $ENV{GIT_COMMITTER_DATE} = $log_entry->{date};
|
||||||
|
|
||||||
|
$ENV{GIT_COMMITTER_NAME} = (defined $log_entry->{commit_name})
|
||||||
|
? $log_entry->{commit_name}
|
||||||
|
: $log_entry->{name};
|
||||||
|
$ENV{GIT_COMMITTER_EMAIL} = (defined $log_entry->{commit_email})
|
||||||
|
? $log_entry->{commit_email}
|
||||||
|
: $log_entry->{email};
|
||||||
|
|
||||||
my $tree = $log_entry->{tree};
|
my $tree = $log_entry->{tree};
|
||||||
if (!defined $tree) {
|
if (!defined $tree) {
|
||||||
$tree = $self->tmp_index_do(sub {
|
$tree = $self->tmp_index_do(sub {
|
||||||
|
@ -2352,7 +2360,17 @@ sub make_log_entry {
|
||||||
$log_entry{log} .= "\n";
|
$log_entry{log} .= "\n";
|
||||||
my $author = $log_entry{author} = check_author($log_entry{author});
|
my $author = $log_entry{author} = check_author($log_entry{author});
|
||||||
my ($name, $email) = defined $::users{$author} ? @{$::users{$author}}
|
my ($name, $email) = defined $::users{$author} ? @{$::users{$author}}
|
||||||
: ($author, undef);
|
: ($author, undef);
|
||||||
|
|
||||||
|
my ($commit_name, $commit_email) = ($name, $email);
|
||||||
|
if ($_use_log_author) {
|
||||||
|
if ($log_entry{log} =~ /From:\s+(.*?)\s+<(.*)>\s*\n/) {
|
||||||
|
($name, $email) = ($1, $2);
|
||||||
|
} elsif ($log_entry{log} =~
|
||||||
|
/Signed-off-by:\s+(.*?)\s+<(.*)>\s*\n/) {
|
||||||
|
($name, $email) = ($1, $2);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (defined $headrev && $self->use_svm_props) {
|
if (defined $headrev && $self->use_svm_props) {
|
||||||
if ($self->rewrite_root) {
|
if ($self->rewrite_root) {
|
||||||
die "Can't have both 'useSvmProps' and 'rewriteRoot' ",
|
die "Can't have both 'useSvmProps' and 'rewriteRoot' ",
|
||||||
|
@ -2375,23 +2393,28 @@ sub make_log_entry {
|
||||||
remove_username($full_url);
|
remove_username($full_url);
|
||||||
$log_entry{metadata} = "$full_url\@$r $uuid";
|
$log_entry{metadata} = "$full_url\@$r $uuid";
|
||||||
$log_entry{svm_revision} = $r;
|
$log_entry{svm_revision} = $r;
|
||||||
$email ||= "$author\@$uuid"
|
$email ||= "$author\@$uuid";
|
||||||
|
$commit_email ||= "$author\@$uuid";
|
||||||
} elsif ($self->use_svnsync_props) {
|
} elsif ($self->use_svnsync_props) {
|
||||||
my $full_url = $self->svnsync->{url};
|
my $full_url = $self->svnsync->{url};
|
||||||
$full_url .= "/$self->{path}" if length $self->{path};
|
$full_url .= "/$self->{path}" if length $self->{path};
|
||||||
remove_username($full_url);
|
remove_username($full_url);
|
||||||
my $uuid = $self->svnsync->{uuid};
|
my $uuid = $self->svnsync->{uuid};
|
||||||
$log_entry{metadata} = "$full_url\@$rev $uuid";
|
$log_entry{metadata} = "$full_url\@$rev $uuid";
|
||||||
$email ||= "$author\@$uuid"
|
$email ||= "$author\@$uuid";
|
||||||
|
$commit_email ||= "$author\@$uuid";
|
||||||
} else {
|
} else {
|
||||||
my $url = $self->metadata_url;
|
my $url = $self->metadata_url;
|
||||||
remove_username($url);
|
remove_username($url);
|
||||||
$log_entry{metadata} = "$url\@$rev " .
|
$log_entry{metadata} = "$url\@$rev " .
|
||||||
$self->ra->get_uuid;
|
$self->ra->get_uuid;
|
||||||
$email ||= "$author\@" . $self->ra->get_uuid;
|
$email ||= "$author\@" . $self->ra->get_uuid;
|
||||||
|
$commit_email ||= "$author\@" . $self->ra->get_uuid;
|
||||||
}
|
}
|
||||||
$log_entry{name} = $name;
|
$log_entry{name} = $name;
|
||||||
$log_entry{email} = $email;
|
$log_entry{email} = $email;
|
||||||
|
$log_entry{commit_name} = $commit_name;
|
||||||
|
$log_entry{commit_email} = $commit_email;
|
||||||
\%log_entry;
|
\%log_entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче