build: sort location annotation table in i18n sync process
authorHannu Nyman <hannu.nyman@iki.fi>
Tue, 7 Jan 2020 16:58:33 +0000 (18:58 +0200)
committerJo-Philipp Wich <jo@mein.io>
Wed, 8 Jan 2020 19:23:24 +0000 (20:23 +0100)
The scanning routine has caused unnecessary changes to the .po files
if a string has been found in multiple files and those files have been
found in different order than the previous time.

Sort the location annotations to avoid unnecessary changes to the .po files.
(sort is alphabetic, so the line numbers are also sorted alphabetically)

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
[apply a Schwartzian transform to sort locations by path, then line number]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 460bdfe814a34ca5300e7a1a57efecff590dd414)

build/i18n-scan.pl

index c19a4386ce5652e09a9baec206bcc0bbb44d71cd..b53e8bd988c322d7ac288fc363f7c41f72ec1fda 100755 (executable)
@@ -157,7 +157,11 @@ if( open C, "| msgcat -" )
        {
                if( length $key )
                {
-                       my @positions = @{$stringtable{$key}};
+                       my @positions =
+                               map { join ':', @$_ }
+                               sort { ($a->[0] cmp $b->[0]) || ($a->[1] <=> $b->[1]) }
+                               map { [ /^(.+):(\d+)$/ ] }
+                               @{$stringtable{$key}};
 
                        $key =~ s/\\/\\\\/g;
                        $key =~ s/\n/\\n/g;