[libvirt] [PATCH v4 03/26] build-aux: rewrite po file minimizer in Python

Ján Tomko jtomko at redhat.com
Fri Oct 11 15:31:12 UTC 2019


On Wed, Oct 09, 2019 at 12:37:18PM +0100, Daniel P. Berrangé wrote:
>As part of an goal to eliminate Perl from libvirt build tools,
>rewrite the minimize-po.pl tool in Python.
>
>This was a straight conversion, manually going line-by-line to
>change the syntax from Perl to Python. Thus the overall structure
>of the file and approach is the same.
>
>Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
>---
> Makefile.am              |  2 +-
> build-aux/minimize-po.pl | 37 -------------------------
> po/Makefile.am           |  2 +-
> scripts/minimize-po.py   | 58 ++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 60 insertions(+), 39 deletions(-)
> delete mode 100755 build-aux/minimize-po.pl
> create mode 100755 scripts/minimize-po.py
>
>diff --git a/Makefile.am b/Makefile.am
>index 9c16fa72ec..02506f2183 100644
>--- a/Makefile.am
>+++ b/Makefile.am
>@@ -48,7 +48,7 @@ EXTRA_DIST = \
>   scripts/augeas-gentest.py \
>   build-aux/check-spacing.pl \
>   build-aux/header-ifdef.pl \
>-  build-aux/minimize-po.pl \
>+  scripts/minimize-po.py \
>   build-aux/mock-noinline.pl \
>   build-aux/prohibit-duplicate-header.pl \
>   build-aux/useless-if-before-free \
>diff --git a/po/Makefile.am b/po/Makefile.am
>index da117edbd5..b0e2c15d44 100644
>--- a/po/Makefile.am
>+++ b/po/Makefile.am
>@@ -58,7 +58,7 @@ update-mini-po: $(POTFILE)
> 	  $(MSGMERGE) --no-location --no-fuzzy-matching --sort-output \
> 	    $$lang.po $(POTFILE) | \
> 	  $(SED) $(SED_PO_FIXUP_ARGS) | \
>-	  $(PERL) $(top_srcdir)/build-aux/minimize-po.pl > \
>+	  $(RUNUTF8) $(PYTHON) $(top_srcdir)/scripts/minimize-po.py > \
> 	    $(srcdir)/$$lang.mini.po ; \
> 	done
>
>diff --git a/scripts/minimize-po.py b/scripts/minimize-po.py
>new file mode 100755
>index 0000000000..61454a5eea
>--- /dev/null
>+++ b/scripts/minimize-po.py
>@@ -0,0 +1,58 @@
>+#!/usr/bin/env python
>+#
>+# Copyright (C) 2018-2019 Red Hat, Inc.
>+#
>+# This library is free software; you can redistribute it and/or
>+# modify it under the terms of the GNU Lesser General Public
>+# License as published by the Free Software Foundation; either
>+# version 2.1 of the License, or (at your option) any later version.
>+#
>+# This library is distributed in the hope that it will be useful,
>+# but WITHOUT ANY WARRANTY; without even the implied warranty of
>+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
>+# Lesser General Public License for more details.
>+#
>+# You should have received a copy of the GNU Lesser General Public
>+# License along with this library.  If not, see
>+# <http://www.gnu.org/licenses/>.
>+
>+from __future__ import print_function
>+
>+import re
>+import sys
>+
>+block = []
>+msgstr = False
>+empty = False
>+unused = False
>+fuzzy = False
>+
>+for line in sys.stdin:
>+    line = line.rstrip("\n")
>+

You can get rid of the stripping (and creating an extra copy)
by using

>+    if line == "":

line.isspace()

>+        if not empty and not unused and not fuzzy:
>+            for b in block:
>+                print(b)

print(b, end='')

>+
>+        block = []
>+        msgstr = False
>+        fuzzy = False
>+        block.append(line)
>+    else:
>+        if line.startswith("msgstr"):
>+            msgstr = True
>+            empty = True
>+
>+        if line[0] == '#' and line.find("fuzzy") != -1:

and "fuzzy" in line

If you don't care about the exact position, it's faster and more
readable.

>+            fuzzy = True
>+        if line.startswith("#~ msgstr"):
>+            unused = True
>+        if msgstr and re.search(r'''".+"''', line):

Why the triple quotes for a single-line string?

>+            empty = False
>+
>+        block.append(line)
>+
>+if not empty and not unused and not fuzzy:
>+    for b in block:
>+        print(b)

print(b, end='')
if you go with storing unstripped lines

Reviewed-by: Ján Tomko <jtomko at redhat.com>

Jano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20191011/9bab836e/attachment-0001.sig>


More information about the libvir-list mailing list