2
0
mirror of https://github.com/moebooru/moebooru synced 2025-08-24 18:57:25 +00:00
moebooru/script/copy-svn.pl
dovac 42a423f494 sync with prod
--HG--
branch : moe
extra : convert_revision : svn%3A2d28d66d-8d94-df11-8c86-00306ef368cb/trunk/moe%401111
2012-03-17 01:04:51 +00:00

82 lines
1.9 KiB
Perl
Executable File

#!/usr/bin/perl
use strict;
use warnings;
sub cwd
{
my $pwd = `pwd`;
chomp $pwd;
return $pwd;
}
my $src = $ARGV[0];
my $dst = $ARGV[1];
if(! -d $src) { die "bad src: $src"; }
if(! -d $dst) { die "bad dst: $dst"; }
# get file lists
my $olddir = cwd();
chdir $src || die "bad src: $src: $!";
my @src_files = split /\n/, `find . ! -wholename '*/.svn*' `;
chdir $olddir || die "$!";
chdir $dst || die "bad dst: $dst: $!";
my @dst_files = split /\n/, `find . ! -wholename '*/.svn*' `;
chdir $olddir || die "$!";
# hash files
my %src_files_hash;
my %dst_files_hash;
foreach my $x (@src_files) { $src_files_hash{$x}=1; }
foreach my $x (@dst_files) { $dst_files_hash{$x}=1; }
# merge file lists
my @all_files;
foreach my $x (@src_files) { push @all_files, $x; }
foreach my $x (@dst_files) { push @all_files, $x if(!$src_files_hash{$x}); }
# figure out which files are added and removed
my %new_files;
foreach my $x (@src_files) { $new_files{$x}=1 if(!$dst_files_hash{$x}); }
my %removed_files;
foreach my $x (@dst_files) { $removed_files{$x}=1 if(!$src_files_hash{$x}); }
#foreach my $x (@all_files) { print $x."\n" if($new_files{$x}); }
#foreach my $x (@all_files) { print $x."\n" if($removed_files{$x}); }
# copy all files except .svn
system("svn export '$src' '$dst' --force");
chdir $dst || die "bad dst: $dst: $!";
print "adding " . keys(%new_files) . " files\n";
foreach my $x (@all_files)
{
next if(!$new_files{$x});
next if(! -d $x);
system("svn add -N '$x'");
}
foreach my $x (@all_files)
{
next if(!$new_files{$x});
next if(-d $x);
system("svn add -N '$x'");
}
print "removing " . keys(%new_files) . " files\n";
foreach my $x (@all_files)
{
next if(!$removed_files{$x});
next if(-d $x);
system("svn rm --non-interactive '$x'");
}
foreach my $x (@all_files)
{
next if(!$removed_files{$x});
next if(! -d $x);
system("svn rm --non-interactive '$x'");
}