LemonLDAP::NG Web SSO
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.
 
 
 
 
 
lemonldap-ng/scripts/importTranslationFromBranch

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);