use SVN::Core;
use SVN::Ra;
+die "Need CVN:COre 1.2.1 or better" if $SVN::Core::VERSION lt "1.2.1";
+
$SIG{'PIPE'}="IGNORE";
$ENV{'TZ'}="UTC";
$self->{'fullrep'} = $repo;
$self->conn();
- $self->{'lines'} = undef;
-
return $self;
}
die "SVN connection to $repo: $!\n" unless defined $s;
$self->{'svn'} = $s;
+ print STDERR "*** SVN *** $s ***\n";
$self->{'repo'} = $repo;
$self->{'maxrev'} = $s->get_latest_revnum();
}
DIR => File::Spec->tmpdir(), UNLINK => 1);
print "... $rev $path ...\n" if $opt_v;
- eval { $self->{'svn'}->get_file($path,$rev,$fh); };
- if (defined $@ and $@ !~ /Attempted to get checksum/) {
+ my $s = $self->{'svn'};
+ print STDERR "*** GET *** $s ***\n";
+ eval { $s->get_file($path,$rev,$fh); };
+ if ($@ and $@ !~ /Attempted to get checksum/) {
# retry
$self->conn();
eval { $self->{'svn'}->get_file($path,$rev,$fh); };
};
- return () if defined $@ and $@ !~ /Attempted to get checksum/;
+ return () if $@ and $@ !~ /Attempted to get checksum/;
die $@ if $@;
close ($fh);
my ($name, $res) = eval { $svn->file($svnpath,$rev); };
return () unless defined $name;
- open my $F, '-|', "git-hash-object -w $name"
+ open my $F, '-|', "git-hash-object", "-w", $name
or die "Cannot create object: $!\n";
my $sha = <$F>;
chomp $sha;
$dest = $parent;
my $prev = $changed_paths->{"/"};
- if($prev and $prev->action eq "A") {
+ if($prev and $prev->[0] eq "A") {
delete $changed_paths->{"/"};
- my $oldpath = $prev->copyfrom_path;
+ my $oldpath = $prev->[1];
my $rev;
if(defined $oldpath) {
my $p;
$rev = undef;
}
-# if($prev and $prev->action eq "A") {
+# if($prev and $prev->[0] eq "A") {
# if(not $tag) {
# unless(open(H,"> $git_dir/refs/heads/$branch")) {
# print STDERR "$revision: Could not create branch $branch: $!\n";
}
while(my($path,$action) = each %$changed_paths) {
- if ($action->action eq "A") {
+ if ($action->[0] eq "A") {
my $f = get_file($revision,$branch,$path);
push(@new,$f) if $f;
- } elsif ($action->action eq "D") {
+ } elsif ($action->[0] eq "D") {
push(@old,$path);
- } elsif ($action->action eq "M") {
+ } elsif ($action->[0] eq "M") {
my $f = get_file($revision,$branch,$path);
push(@new,$f) if $f;
- } elsif ($action->action eq "R") {
+ } elsif ($action->[0] eq "R") {
# refer to a file/tree in an earlier commit
push(@old,$path); # remove any old stuff
# ... and add any new stuff
- my($b,$p) = split_path($revision,$action->oldpath);
- open my $F,"-|","git-ls-tree","-r","-z", $branches{$b}{$action->oldrev}, $p;
+ my($b,$p) = split_path($revision,$action->[1]);
+ open my $F,"-|","git-ls-tree","-r","-z", $branches{$b}{$action->[2]}, $p;
local $/ = '\0';
while(<$F>) {
chomp;
push(@new,[$mode,$sha1,$p]);
}
} else {
- die "$revision: unknown action '".$action->action."' for $path\n";
+ die "$revision: unknown action '".$action->[0]."' for $path\n";
}
}
if(@old) {
- open F, "-│", "git-ls-files", "-z", @old or die $!;
+ open my $F, "-│", "git-ls-files", "-z", @old or die $!;
@old = ();
local $/ = '\0';
- while(<F>) {
+ while(<$F>) {
chomp;
push(@old,$_);
}
- close(F);
+ close($F);
while(@old) {
my @o2;
my ($changed_paths, $revision, $author, $date, $message, $pool) = @_;
sub _commit_all {
($changed_paths, $revision, $author, $date, $message, $pool) = @_;
+ my %p;
+ while(my($path,$action) = each %$changed_paths) {
+ $p{$path} = [ $action->action,$action->copyfrom_path, $action->copyfrom_rev ];
+ }
+ $changed_paths = \%p;
}
+
sub commit_all {
my %done;
my @col;