From 28318d650e0ca5cbec17696e908abe756310caf6 Mon Sep 17 00:00:00 2001 From: tateisu Date: Sat, 3 Jul 2021 23:26:12 +0900 Subject: [PATCH] =?UTF-8?q?trunk=E3=81=8B=E3=82=89main=E3=81=AB=E3=83=96?= =?UTF-8?q?=E3=83=A9=E3=83=B3=E3=83=81=E3=82=92=E5=A4=89=E6=9B=B4=E3=81=97?= =?UTF-8?q?=E3=81=9F=E3=81=AE=E3=81=A7=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF?= =?UTF-8?q?=E3=82=B9=E3=82=AF=E3=83=AA=E3=83=97=E3=83=88=E3=82=82=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=E3=80=82main=E3=83=96=E3=83=A9=E3=83=B3=E3=83=81?= =?UTF-8?q?=E3=81=B8=E3=81=AE=E3=82=B3=E3=83=9F=E3=83=83=E3=83=88=E3=82=92?= =?UTF-8?q?=E7=A6=81=E6=AD=A2=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- checkMissingTranslation.pl | 325 +++++++++++++++++++------------------ 1 file changed, 165 insertions(+), 160 deletions(-) diff --git a/checkMissingTranslation.pl b/checkMissingTranslation.pl index addbac6c..73eaff30 100644 --- a/checkMissingTranslation.pl +++ b/checkMissingTranslation.pl @@ -1,160 +1,165 @@ -#!/usr/bin/perl -- -use XML::Parser; -use strict; -use warnings; -use File::Find; -use XML::Simple; -use Data::Dump qw(dump); -use utf8; - -binmode $_ for \*STDOUT,\*STDERR; - - -sub cmd($){ - print "+ ",$_[0],"\n"; - my $rv=system $_[0]; - if ($? == -1) { - die "failed to execute: $!\n"; - }elsif ($? & 127) { - die "child died with signal %d, %s coredump\n", ($? & 127), ($? & 128) ? 'with' : 'without'; - }else { - my $rv = $? >> 8; - $rv and die "child exited with value $rv\n"; - } -} - - -# ワーキングツリーに変更がないことを確認 -open(my $fh,"-|","git status --porcelain --branch") - or die "can't check git status. $!"; - -my @untrackedFiles; -while(<$fh>){ - s/[\x0d\x0a]+//; - if(/^\?\?\s*(\S+)/){ - my $path =$1; - next if $path =~ /\.idea|_Emoji/; - push @untrackedFiles,$path - }elsif( /^##\s*(\S+?)(?:\.\.|$)/ ){ - my $branch=$1; - print "# branch=$branch\n"; - $branch eq 'trunk' - or warn "!!!! current branch is not trunk !!!!\n"; -# }else{ -# warn "working tree is not clean.\n"; -# cmd "git status"; -# exit 1; - } -} - -close($fh) - or die "can't check git status. $!"; - -@untrackedFiles and die "forgot git add?\n",map{ "- $_\n"} @untrackedFiles; - - - - - -my $xml = XML::Simple->new; - -my $default_name = "_default"; - -my @files; - -find(sub{ - return if not -f $_; - ($_ eq "strings.xml") and push @files,$File::Find::name; -},"app/src/main/res/"); - -@files or die "missing string files.\n"; - -my %langs; -for my $file(@files){ - my $lang; - if( $file =~ m|values-([^/]+)| ){ - $lang = $1; - }else{ - $lang=$default_name; - } - my $data = $xml->XMLin($file); - if( not $data->{string} or ($data->{string}{content} and not ref $data->{string}{content} )){ - warn "?? please make at least 2 string entries in $file\n"; - next; - } - - my %names; - while(my($name,$o)=each %{$data->{string}}){ - if(not $o->{content}){ - warn "$lang : $name : missing content in ",dump($o),"\n"; - }else{ - $names{$name}= $o->{content}; - } - } - $langs{ $lang } = \%names; -} - -my $hasError = 0; - -my $master = $langs{ $default_name }; -$master or die "missing master languages.\n"; -my %params; -while(my($name,$value)=each %$master){ - my @params = $value =~ /(%\d+\$[\d\.]*[sdxf])/g; - $params{$name} = join ',', sort @params; -} - -my %missing; -my %allNames; -for my $lang ( sort keys %langs ){ - my $names = $langs{$lang}; - while(my($name,$value)=each %$names){ - - $allNames{$name}=1; - if(not $master->{$name} ){ - $missing{$name} =1; - } - my @params = $value =~ /(%\d+\$[\d\.]*[sdxf])/g; - my $params = join ',', sort @params; - my $master_params = $params{$name} // ''; - if( $params ne $master_params){ - $hasError =1; - print "!! ($lang)$name : parameter mismatch. master=$master_params, found=$params\n"; - } - - # 残りの部分に%が登場したらエラー - my $sv = $value; - $sv =~ s/(%\d+\$[\d\.]*[sdxf])//g; - # Unit:%. を除外したい - $sv =~ s/%[\s.。]//g; - if( $sv =~ /%/ ){ - $hasError =1; - print "!! ($lang)$name : broken param: $sv // $value\n"; - } - - # エスケープされていないシングルクォートがあればエラー - if( $value =~ m/(?> 8; + $rv and die "child exited with value $rv\n"; + } +} + + +# ワーキングツリーに変更がないことを確認 +open(my $fh,"-|","git status --porcelain --branch") + or die "can't check git status. $!"; + +my @untrackedFiles; +while(<$fh>){ + s/[\x0d\x0a]+//; + if(/^\?\?\s*(\S+)/){ + my $path =$1; + next if $path =~ /\.idea|_Emoji/; + push @untrackedFiles,$path + }elsif( /^##\s*(\S+?)(?:\.\.|$)/ ){ + my $branch=$1; + print "# branch=$branch\n"; + if($preCommit){ + # mainブランチに直接コミットすることはなくなった + $branch eq 'main' and warn "!!!! current branch is main. Direct commits and pushes are prohibited. !!!!\n"; + } +# }else{ +# warn "working tree is not clean.\n"; +# cmd "git status"; +# exit 1; + } +} + +close($fh) + or die "can't check git status. $!"; + +@untrackedFiles and die "forgot git add?\n",map{ "- $_\n"} @untrackedFiles; + + + + + +my $xml = XML::Simple->new; + +my $default_name = "_default"; + +my @files; + +find(sub{ + return if not -f $_; + ($_ eq "strings.xml") and push @files,$File::Find::name; +},"app/src/main/res/"); + +@files or die "missing string files.\n"; + +my %langs; +for my $file(@files){ + my $lang; + if( $file =~ m|values-([^/]+)| ){ + $lang = $1; + }else{ + $lang=$default_name; + } + + my $data = $xml->XMLin($file); + if( not $data->{string} or ($data->{string}{content} and not ref $data->{string}{content} )){ + warn "?? please make at least 2 string entries in $file\n"; + next; + } + + my %names; + while(my($name,$o)=each %{$data->{string}}){ + if(not $o->{content}){ + warn "$lang : $name : missing content in ",dump($o),"\n"; + }else{ + $names{$name}= $o->{content}; + } + } + $langs{ $lang } = \%names; +} + +my $hasError = 0; + +my $master = $langs{ $default_name }; +$master or die "missing master languages.\n"; +my %params; +while(my($name,$value)=each %$master){ + my @params = $value =~ /(%\d+\$[\d\.]*[sdxf])/g; + $params{$name} = join ',', sort @params; +} + +my %missing; +my %allNames; +for my $lang ( sort keys %langs ){ + my $names = $langs{$lang}; + while(my($name,$value)=each %$names){ + + $allNames{$name}=1; + if(not $master->{$name} ){ + $missing{$name} =1; + } + + my @params = $value =~ /(%\d+\$[\d\.]*[sdxf])/g; + my $params = join ',', sort @params; + my $master_params = $params{$name} // ''; + if( $params ne $master_params){ + $hasError =1; + print "!! ($lang)$name : parameter mismatch. master=$master_params, found=$params\n"; + } + + # 残りの部分に%が登場したらエラー + my $sv = $value; + $sv =~ s/(%\d+\$[\d\.]*[sdxf])//g; + # Unit:%. を除外したい + $sv =~ s/%[\s.。]//g; + if( $sv =~ /%/ ){ + $hasError =1; + print "!! ($lang)$name : broken param: $sv // $value\n"; + } + + # エスケープされていないシングルクォートがあればエラー + if( $value =~ m/(?