You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.2 KiB
87 lines
2.2 KiB
#!/usr/bin/perl
|
|
|
|
use strict;
|
|
use Dpkg::IPC;
|
|
use File::Copy;
|
|
use File::Find;
|
|
use File::Path;
|
|
use JSON;
|
|
|
|
use constant IMPORTTMPDIR => './translationsImport';
|
|
|
|
our %directories = (
|
|
'lemonldap-ng-manager/site/htdocs/static/languages' => 'portal',
|
|
'lemonldap-ng-portal/site/htdocs/static/languages' => 'manager',
|
|
'lemonldap-ng-portal/site/templates/common/mail' => 'mail',
|
|
);
|
|
|
|
my %list;
|
|
|
|
my $currentBranch = `git rev-parse --abbrev-ref HEAD`;
|
|
$currentBranch =~ s/[\r\n]//g;
|
|
my $branch = $ARGV[0] || die "Missing branch";
|
|
|
|
$branch eq $currentBranch && die "Already on branch $branch";
|
|
|
|
spawn( exec => [ 'git', 'checkout', $branch ], wait_child => 1 );
|
|
|
|
rmtree(IMPORTTMPDIR);
|
|
mkdir IMPORTTMPDIR;
|
|
|
|
my $j = JSON->new->canonical->pretty->space_before(0)->space_after(0);
|
|
|
|
foreach my $dir ( keys %directories ) {
|
|
our $dstDir = IMPORTTMPDIR . '/' . $directories{$dir};
|
|
mkdir $dstDir;
|
|
find(
|
|
sub {
|
|
return unless -f;
|
|
push @{ $list{$dir} }, $File::Find::name;
|
|
},
|
|
$dir
|
|
);
|
|
foreach ( @{ $list{$dir} } ) {
|
|
copy $_, $dstDir;
|
|
}
|
|
}
|
|
|
|
spawn( exec => [ 'git', 'checkout', $currentBranch ], wait_child => 1 );
|
|
|
|
foreach my $dir ( keys %directories ) {
|
|
our $srcDir = IMPORTTMPDIR . '/' . $directories{$dir};
|
|
my ($ref, $current, $en);
|
|
{
|
|
local $/=undef;
|
|
open my $f, "$dir/en.json";
|
|
$en = $j->decode(<$f>);
|
|
close $f;
|
|
}
|
|
foreach my $file ( @{ $list{$dir} }) {
|
|
my $name = $file;
|
|
$name =~ s#.*/##;
|
|
next if $name eq 'en.json';
|
|
{
|
|
local $/ = undef;
|
|
open my $f, "$file" or next;
|
|
$current = $j->decode(<$f>);
|
|
close $f;
|
|
open $f, "$srcDir/$name";
|
|
$ref = $j->decode(<$f>);
|
|
close $f;
|
|
}
|
|
foreach my $k (sort keys %$current) {
|
|
$current->{$k} = $ref->{$k} // $current->{$k};
|
|
}
|
|
my $newContent = $j->encode($current);
|
|
$newContent =~ s/^\s+//mg;
|
|
{
|
|
local $/=undef;
|
|
print STDERR "$file\n";
|
|
open my $f, '>', "$file";
|
|
print $f $newContent;
|
|
close $f;
|
|
}
|
|
}
|
|
}
|
|
|
|
rmtree(IMPORTTMPDIR);
|
|
|