-sub libsvn_log_entry {
- my ($rev, $author, $date, $log, $parents, $untracked) = @_;
- my ($Y,$m,$d,$H,$M,$S) = ($date =~ /^(\d{4})\-(\d\d)\-(\d\d)T
- (\d\d)\:(\d\d)\:(\d\d).\d+Z$/x)
- or die "Unable to parse date: $date\n";
- if (defined $author && length $author > 0 &&
- defined $_authors && ! defined $users{$author}) {
- die "Author: $author not defined in $_authors file\n";
- }
- $log = '' if ($rev == 0 && !defined $log);
-
- open my $un, '>>', "$GIT_SVN_DIR/unhandled.log" or croak $!;
- my $h;
- print $un "r$rev\n" or croak $!;
- $h = $untracked->{empty};
- foreach (sort keys %$h) {
- my $act = $h->{$_} ? '+empty_dir' : '-empty_dir';
- print $un " $act: ", uri_encode($_), "\n" or croak $!;
- warn "W: $act: $_\n";
- }
- foreach my $t (qw/dir_prop file_prop/) {
- $h = $untracked->{$t} or next;
- foreach my $path (sort keys %$h) {
- my $ppath = $path eq '' ? '.' : $path;
- foreach my $prop (sort keys %{$h->{$path}}) {
- next if $SKIP{$prop};
- my $v = $h->{$path}->{$prop};
- if (defined $v) {
- print $un " +$t: ",
- uri_encode($ppath), ' ',
- uri_encode($prop), ' ',
- uri_encode($v), "\n"
- or croak $!;
- } else {
- print $un " -$t: ",
- uri_encode($ppath), ' ',
- uri_encode($prop), "\n"
- or croak $!;
- }
- }
- }
- }
- foreach my $t (qw/absent_file absent_directory/) {
- $h = $untracked->{$t} or next;
- foreach my $parent (sort keys %$h) {
- foreach my $path (sort @{$h->{$parent}}) {
- print $un " $t: ",
- uri_encode("$parent/$path"), "\n"
- or croak $!;
- warn "W: $t: $parent/$path ",
- "Insufficient permissions?\n";
- }
- }
- }
-
- # revprops (make this optional? it's an extra network trip...)
- my $rp = $SVN->rev_proplist($rev);
- foreach (sort keys %$rp) {
- next if /^svn:(?:author|date|log)$/;
- print $un " rev_prop: ", uri_encode($_), ' ',
- uri_encode($rp->{$_}), "\n";
- }
- close $un or croak $!;
-
- { revision => $rev, date => "+0000 $Y-$m-$d $H:$M:$S",
- author => $author, log => $log."\n", parents => $parents || [],
- revprops => $rp }
-}
-
-sub libsvn_fetch {
- my ($last_commit, $paths, $rev, $author, $date, $log) = @_;
- my $ed = SVN::Git::Fetcher->new({ c => $last_commit, q => $_q });
- my (undef, $last_rev, undef) = cmt_metadata($last_commit);
- unless ($SVN->gs_do_update($last_rev, $rev, '', 1, $ed)) {
- die "SVN connection failed somewhere...\n";
- }
- libsvn_log_entry($rev, $author, $date, $log, [$last_commit], $ed);
-}
-
-sub svn_grab_base_rev {
- my $c = eval { command_oneline([qw/rev-parse --verify/,
- "refs/remotes/$GIT_SVN^0"],
- { STDERR => 0 }) };
- if (defined $c && length $c) {
- my ($url, $rev, $uuid) = cmt_metadata($c);
- return ($rev, $c) if defined $rev;
- }
- if ($_no_metadata) {
- my $offset = -41; # from tail
- my $rl;
- open my $fh, '<', $REVDB or
- die "--no-metadata specified and $REVDB not readable\n";
- seek $fh, $offset, 2;
- $rl = readline $fh;
- defined $rl or return (undef, undef);
- chomp $rl;
- while ($c ne $rl && tell $fh != 0) {
- $offset -= 41;
- seek $fh, $offset, 2;
- $rl = readline $fh;
- defined $rl or return (undef, undef);
- chomp $rl;
- }
- my $rev = tell $fh;
- croak $! if ($rev < -1);
- $rev = ($rev - 41) / 41;
- close $fh or croak $!;
- return ($rev, $c);
- }
- return (undef, undef);
-}
-