17 |
use Data::Dumper; |
use Data::Dumper; |
18 |
use XML::Simple; |
use XML::Simple; |
19 |
|
|
20 |
|
# do we want to sync just part of repository? |
21 |
|
my $partial_import = 1; |
22 |
|
|
23 |
if (@ARGV < 2) { |
if (@ARGV < 2) { |
24 |
print "usage: $0 SVN_URL CVSROOT CVSREPOSITORY\n"; |
print "usage: $0 SVN_URL CVSROOT CVSREPOSITORY\n"; |
25 |
exit 1; |
exit 1; |
48 |
print "## using TMPDIR $TMPDIR\n"; |
print "## using TMPDIR $TMPDIR\n"; |
49 |
|
|
50 |
# cvs command with root |
# cvs command with root |
51 |
my $cvs="cvs -d $CVSROOT"; |
my $cvs="cvs -f -d $CVSROOT"; |
52 |
|
|
53 |
# current revision in CVS |
# current revision in CVS |
54 |
my $rev; |
my $rev; |
78 |
my $path=".svnrev"; |
my $path=".svnrev"; |
79 |
|
|
80 |
if ($add_new) { |
if ($add_new) { |
81 |
system "$cvs add $path" || die "cvs add of $path failed: $!"; |
system "$cvs add '$path'" || die "cvs add of $path failed: $!"; |
82 |
} else { |
} else { |
83 |
my $msg="subversion revision $rev commited to CVS"; |
my $msg="subversion revision $rev commited to CVS"; |
84 |
print "$msg\n"; |
print "$msg\n"; |
85 |
system "$cvs commit -m '$msg' $path" || die "cvs commit of $path failed: $!"; |
system "$cvs commit -m '$msg' '$path'" || die "cvs commit of $path failed: $!"; |
86 |
} |
} |
87 |
} |
} |
88 |
|
|
99 |
next if in_entries($curr_dir); |
next if in_entries($curr_dir); |
100 |
next if (-e "$curr_dir/CVS"); |
next if (-e "$curr_dir/CVS"); |
101 |
|
|
102 |
log_system("$cvs add $curr_dir", "cvs add of $curr_dir failed"); |
log_system("$cvs add '$curr_dir'", "cvs add of $curr_dir failed"); |
103 |
} |
} |
104 |
} |
} |
105 |
|
|
279 |
|
|
280 |
# prepare path and message |
# prepare path and message |
281 |
my $file = $path; |
my $file = $path; |
282 |
$path =~ s#^\Q$SVNREP\E/*## || die "BUG: can't strip SVNREP '$SVNREP' from path"; |
if ( $path !~ s#^\Q$SVNREP\E/*## ) { |
283 |
|
print "NOTICE: skipping '$path' which isn't under repository root '$SVNREP'\n"; |
284 |
|
die unless $partial_import; |
285 |
|
next; |
286 |
|
} |
287 |
|
|
288 |
if (! $path) { |
if (! $path) { |
289 |
print "NOTICE: skipped this operation. Probably trunk creation\n"; |
print "NOTICE: skipped this operation. Probably trunk creation\n"; |
301 |
} elsif ($path =~ m,^(.+)/[^/]+$, && ! -e "$1/CVS/Root") { |
} elsif ($path =~ m,^(.+)/[^/]+$, && ! -e "$1/CVS/Root") { |
302 |
my $dir = $1; |
my $dir = $1; |
303 |
in_entries($dir) || add_dir($dir, $msg); |
in_entries($dir) || add_dir($dir, $msg); |
304 |
in_entries($path) || log_system("$cvs add $path", "cvs add of $path failed"); |
in_entries($path) || log_system("$cvs add '$path'", "cvs add of $path failed"); |
305 |
} else { |
} else { |
306 |
in_entries($path) || log_system("$cvs add $path", "cvs add of $path failed"); |
in_entries($path) || log_system("$cvs add '$path'", "cvs add of $path failed"); |
307 |
} |
} |
308 |
} elsif ($action =~ /D/) { |
} elsif ($action =~ /D/) { |
309 |
if (-e $path) { |
if (-e $path) { |
310 |
unlink $path || die "can't delete $path: $!"; |
unlink $path || die "can't delete $path: $!"; |
311 |
log_system("$cvs delete $path", "cvs delete of $path failed"); |
log_system("$cvs delete '$path'", "cvs delete of $path failed"); |
312 |
} else { |
} else { |
313 |
print "WARNING: $path is not present, skipping...\n"; |
print "WARNING: $path is not present, skipping...\n"; |
314 |
undef $path; |
undef $path; |
326 |
$msg =~ s/'/'\\''/g; # quote " |
$msg =~ s/'/'\\''/g; # quote " |
327 |
|
|
328 |
# now commit changes |
# now commit changes |
329 |
log_system("$cvs commit -m '$msg' ".join(" ",@commit), "cvs commit of ".join(",",@commit)." failed"); |
log_system("$cvs commit -m '$msg' '".join("' '",@commit)."'", "cvs commit of ".join(",",@commit)." failed"); |
330 |
|
|
331 |
commit_svnrev($rev); |
commit_svnrev($rev); |
332 |
} |
} |