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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
---
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@xxxxxxxxxx>

Jano

Attachment: signature.asc
Description: PGP signature

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list

[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux