contrib/git-svn: avoid re-reading the repository uuid, it never changes
If it does change, we're screwed anyways as SVN will refuse to commit or update. We also never access more than one SVN repository per-invocation, so we can store it as a global, too. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
7f60b22860
commit
1ca72aef45
@ -4,7 +4,7 @@
|
|||||||
use warnings;
|
use warnings;
|
||||||
use strict;
|
use strict;
|
||||||
use vars qw/ $AUTHOR $VERSION
|
use vars qw/ $AUTHOR $VERSION
|
||||||
$SVN_URL $SVN_INFO $SVN_WC
|
$SVN_URL $SVN_INFO $SVN_WC $SVN_UUID
|
||||||
$GIT_SVN_INDEX $GIT_SVN
|
$GIT_SVN_INDEX $GIT_SVN
|
||||||
$GIT_DIR $REV_DIR/;
|
$GIT_DIR $REV_DIR/;
|
||||||
$AUTHOR = 'Eric Wong <normalperson@yhbt.net>';
|
$AUTHOR = 'Eric Wong <normalperson@yhbt.net>';
|
||||||
@ -114,7 +114,6 @@ sub version {
|
|||||||
|
|
||||||
sub rebuild {
|
sub rebuild {
|
||||||
$SVN_URL = shift or undef;
|
$SVN_URL = shift or undef;
|
||||||
my $repo_uuid;
|
|
||||||
my $newest_rev = 0;
|
my $newest_rev = 0;
|
||||||
if ($_upgrade) {
|
if ($_upgrade) {
|
||||||
sys('git-update-ref',"refs/remotes/$GIT_SVN","$GIT_SVN-HEAD");
|
sys('git-update-ref',"refs/remotes/$GIT_SVN","$GIT_SVN-HEAD");
|
||||||
@ -150,7 +149,7 @@ sub rebuild {
|
|||||||
|
|
||||||
# if we merged or otherwise started elsewhere, this is
|
# if we merged or otherwise started elsewhere, this is
|
||||||
# how we break out of it
|
# how we break out of it
|
||||||
next if (defined $repo_uuid && ($uuid ne $repo_uuid));
|
next if (defined $SVN_UUID && ($uuid ne $SVN_UUID));
|
||||||
next if (defined $SVN_URL && ($url ne $SVN_URL));
|
next if (defined $SVN_URL && ($url ne $SVN_URL));
|
||||||
|
|
||||||
print "r$rev = $c\n";
|
print "r$rev = $c\n";
|
||||||
@ -159,7 +158,7 @@ sub rebuild {
|
|||||||
croak "SVN repository location required: $url\n";
|
croak "SVN repository location required: $url\n";
|
||||||
}
|
}
|
||||||
$SVN_URL ||= $url;
|
$SVN_URL ||= $url;
|
||||||
$repo_uuid ||= setup_git_svn();
|
$SVN_UUID ||= setup_git_svn();
|
||||||
$latest = $rev;
|
$latest = $rev;
|
||||||
}
|
}
|
||||||
assert_revision_eq_or_unknown($rev, $c);
|
assert_revision_eq_or_unknown($rev, $c);
|
||||||
@ -252,7 +251,7 @@ sub commit {
|
|||||||
print "Reading from stdin...\n";
|
print "Reading from stdin...\n";
|
||||||
@commits = ();
|
@commits = ();
|
||||||
while (<STDIN>) {
|
while (<STDIN>) {
|
||||||
if (/\b($sha1_short)\b/) {
|
if (/\b($sha1_short)\b/o) {
|
||||||
unshift @commits, $1;
|
unshift @commits, $1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -320,14 +319,14 @@ sub setup_git_svn {
|
|||||||
mkpath(["$GIT_DIR/$GIT_SVN/info"]);
|
mkpath(["$GIT_DIR/$GIT_SVN/info"]);
|
||||||
mkpath([$REV_DIR]);
|
mkpath([$REV_DIR]);
|
||||||
s_to_file($SVN_URL,"$GIT_DIR/$GIT_SVN/info/url");
|
s_to_file($SVN_URL,"$GIT_DIR/$GIT_SVN/info/url");
|
||||||
my $uuid = svn_info($SVN_URL)->{'Repository UUID'} or
|
$SVN_UUID = svn_info($SVN_URL)->{'Repository UUID'} or
|
||||||
croak "Repository UUID unreadable\n";
|
croak "Repository UUID unreadable\n";
|
||||||
s_to_file($uuid,"$GIT_DIR/$GIT_SVN/info/uuid");
|
s_to_file($SVN_UUID,"$GIT_DIR/$GIT_SVN/info/uuid");
|
||||||
|
|
||||||
open my $fd, '>>', "$GIT_DIR/$GIT_SVN/info/exclude" or croak $!;
|
open my $fd, '>>', "$GIT_DIR/$GIT_SVN/info/exclude" or croak $!;
|
||||||
print $fd '.svn',"\n";
|
print $fd '.svn',"\n";
|
||||||
close $fd or croak $!;
|
close $fd or croak $!;
|
||||||
return $uuid;
|
return $SVN_UUID;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub assert_svn_wc_clean {
|
sub assert_svn_wc_clean {
|
||||||
@ -850,9 +849,7 @@ sub git_commit {
|
|||||||
my ($log_msg, @parents) = @_;
|
my ($log_msg, @parents) = @_;
|
||||||
assert_revision_unknown($log_msg->{revision});
|
assert_revision_unknown($log_msg->{revision});
|
||||||
my $out_fh = IO::File->new_tmpfile or croak $!;
|
my $out_fh = IO::File->new_tmpfile or croak $!;
|
||||||
my $info = svn_info('.');
|
$SVN_UUID ||= svn_info('.')->{'Repository UUID'};
|
||||||
my $uuid = $info->{'Repository UUID'};
|
|
||||||
defined $uuid or croak "Unable to get Repository UUID\n";
|
|
||||||
|
|
||||||
map_tree_joins() if (@_branch_from && !%tree_map);
|
map_tree_joins() if (@_branch_from && !%tree_map);
|
||||||
|
|
||||||
@ -891,11 +888,11 @@ sub git_commit {
|
|||||||
my $msg_fh = IO::File->new_tmpfile or croak $!;
|
my $msg_fh = IO::File->new_tmpfile or croak $!;
|
||||||
print $msg_fh $log_msg->{msg}, "\ngit-svn-id: ",
|
print $msg_fh $log_msg->{msg}, "\ngit-svn-id: ",
|
||||||
"$SVN_URL\@$log_msg->{revision}",
|
"$SVN_URL\@$log_msg->{revision}",
|
||||||
" $uuid\n" or croak $!;
|
" $SVN_UUID\n" or croak $!;
|
||||||
$msg_fh->flush == 0 or croak $!;
|
$msg_fh->flush == 0 or croak $!;
|
||||||
seek $msg_fh, 0, 0 or croak $!;
|
seek $msg_fh, 0, 0 or croak $!;
|
||||||
|
|
||||||
set_commit_env($log_msg, $uuid);
|
set_commit_env($log_msg);
|
||||||
|
|
||||||
my @exec = ('git-commit-tree',$tree);
|
my @exec = ('git-commit-tree',$tree);
|
||||||
push @exec, '-p', $_ foreach @exec_parents;
|
push @exec, '-p', $_ foreach @exec_parents;
|
||||||
@ -923,10 +920,10 @@ sub git_commit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub set_commit_env {
|
sub set_commit_env {
|
||||||
my ($log_msg, $uuid) = @_;
|
my ($log_msg) = @_;
|
||||||
my $author = $log_msg->{author};
|
my $author = $log_msg->{author};
|
||||||
my ($name,$email) = defined $users{$author} ? @{$users{$author}}
|
my ($name,$email) = defined $users{$author} ? @{$users{$author}}
|
||||||
: ($author,"$author\@$uuid");
|
: ($author,"$author\@$SVN_UUID");
|
||||||
$ENV{GIT_AUTHOR_NAME} = $ENV{GIT_COMMITTER_NAME} = $name;
|
$ENV{GIT_AUTHOR_NAME} = $ENV{GIT_COMMITTER_NAME} = $name;
|
||||||
$ENV{GIT_AUTHOR_EMAIL} = $ENV{GIT_COMMITTER_EMAIL} = $email;
|
$ENV{GIT_AUTHOR_EMAIL} = $ENV{GIT_COMMITTER_EMAIL} = $email;
|
||||||
$ENV{GIT_AUTHOR_DATE} = $ENV{GIT_COMMITTER_DATE} = $log_msg->{date};
|
$ENV{GIT_AUTHOR_DATE} = $ENV{GIT_COMMITTER_DATE} = $log_msg->{date};
|
||||||
|
Loading…
Reference in New Issue
Block a user