Bug 9161: Followup: the -f param does not work correctly
authorJonathan Druart <jonathan.druart@biblibre.com>
Tue, 29 Jan 2013 13:27:42 +0000 (14:27 +0100)
committerGalen Charlton <gmc@esilibrary.com>
Fri, 24 May 2013 16:08:27 +0000 (09:08 -0700)
Without this patch, the -f param (for the translate script) add the
modified line in the po file BUT comment all lines from others files.

This patch concat the generated file with the previous one and merge
them. This way produce a pretty po file with all our strings :)

+ Modification in LangInstaller.pm to fix a bug when the -f param was not
given.

Test plan:
1/ Update your po file :
cd misc/translator
perl translate update fr-FR
git commit -a -m"TMP PO"
2/ Modification on 2 files:
ie.
catalogue/advsearch.tt:32 <h1>Advanced search Foo</h1>
catalogue/issuehistory.tt:38 <th>Patron Bar</th>

3/ Update your po file with only the first file:
perl translate update fr-FR -f advsearch.tt

4/ Edit your po file and check that only the foo string is present (or
git diff).

5/ Update your po file with only the second file:
perl translate update fr-FR -f issuehistory

6/ Edit your po file and check that 2 strings are present (or git diff).

7/ Change the translation for these 2 strings and delete the fuzzy
lines.

8/ Install the first file for your language:
perl translate install fr-FR -f advsearch.tt

9/ Edit your translated file and verify the string is translated. Check
that the issuehistory.tt file is not changed.

10/ Same for issuehistory:
perl translate install fr-FR -f issuehistory

11/ stash your modification in your tt files (or reset --hard):
git stash

12/ Check in your po file that the 2 strings are commented (git diff).

13/ To finish, install all template files and check that they are
replaced correctly:
perl translate install fr-FR

Signed-off-by: Frédéric Demians <f.demians@tamil.fr>
I have squashed the both follow-up patches.

Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
misc/translator/LangInstaller.pm
misc/translator/tmpl_process3.pl

index 835f75f..f3525f8 100644 (file)
@@ -338,7 +338,7 @@ sub install_tmpl {
             "-o $trans->{dir}/$self->{lang} ".
             "-s $self->{path_po}/$self->{lang}$trans->{suffix} -r " .
             (
-                $files
+                @$files
                     ? '-f ' . join ' -f ', @$files
                     : ''
             )
@@ -363,7 +363,7 @@ sub update_tmpl {
             "-i $trans->{dir}/en/ " .
             "-s $self->{path_po}/$self->{lang}$trans->{suffix} -r " .
             (
-                $files
+                @$files
                     ? '-f ' . join ' -f ', @$files
                     : ''
             )
@@ -398,7 +398,7 @@ sub create_tmpl {
             "-i $trans->{dir}/en/ " .
             "-s $self->{path_po}/$self->{lang}$trans->{suffix} -r " .
             (
-                $files
+                @$files
                     ? '-f ' . join ' -f ', @$files
                     : ''
             )
index 5d3b1af..e5df69a 100755 (executable)
@@ -146,7 +146,7 @@ sub listfiles {
             } elsif (-f $path) {
                 my $basename = basename $path;
                 push @it, $path
-                    if ( not @$filenames or ( grep { $basename =~ /$_/ } @$filenames ) )
+                    if ( not @$filenames or ( grep { $path =~ /$_/ } @$filenames ) )
                        and (!defined $type || $dirent =~ /\.(?:$type)$/) || $action eq 'install';
             } elsif (-d $path && $recursive_p) {
                 push @it, listfiles($path, $type, $action, $filenames);
@@ -371,13 +371,20 @@ if ($action eq 'create')  {
         (defined $charset_in? ('-I', $charset_in): ()),
         (defined $charset_out? ('-O', $charset_out): ()));
     if ($st == 0) {
-    # Merge the temporary "pot file" with the specified po file ($str_file)
-    # FIXME: msgmerge(1) is a Unix dependency
-    # FIXME: need to check the return value
-    $st = system("msgmerge -U ".($quiet?'-q':'')." -s $str_file $tmpfile2");
+        # Merge the temporary "pot file" with the specified po file ($str_file)
+        # FIXME: msgmerge(1) is a Unix dependency
+        # FIXME: need to check the return value
+        if ( @filenames ) {
+            my ($tmph3, $tmpfile3) = tmpnam();
+            $st = system("msgcat $str_file $tmpfile2 > $tmpfile3");
+            $st = system("msgmerge -U ".($quiet?'-q':'')." -s $str_file $tmpfile3")
+                unless $st;
+        } else {
+            $st = system("msgmerge -U ".($quiet?'-q':'')." -s $str_file $tmpfile2");
+        }
     } else {
-    error_normal "Text extraction failed: $xgettext: $!\n", undef;
-    error_additional "Will not run msgmerge\n", undef;
+        error_normal "Text extraction failed: $xgettext: $!\n", undef;
+        error_additional "Will not run msgmerge\n", undef;
     }
 #   unlink $tmpfile1 || warn_normal "$tmpfile1: unlink failed: $!\n", undef;
 #   unlink $tmpfile2 || warn_normal "$tmpfile2: unlink failed: $!\n", undef;