]> git.pld-linux.org Git - packages/rpm-build-tools.git/blobdiff - spec_utf8
do exact bcond match when reporting active bconds
[packages/rpm-build-tools.git] / spec_utf8
old mode 100644 (file)
new mode 100755 (executable)
index b1564ee..d2c564b
--- a/spec_utf8
+++ b/spec_utf8
@@ -2,7 +2,7 @@
 
 debug = False
 
-import os, os.path, re, sys, locale, StringIO
+import os, os.path, re, sys, locale, StringIO, filecmp
 
 langs={
     'bg':'windows-1251',
@@ -14,6 +14,7 @@ langs={
     'en':'iso8859-1',
     'eo':'iso8859-3',
     'es':'iso8859-1',
+    'et':'iso8859-15',
     'fi':'iso8859-1',
     'fo':'iso8859-1',
     'fr':'iso8859-1',
@@ -58,10 +59,11 @@ def find_encoding(lang):
 
 def parse_spec(infile, outfile):
   success = True
-  re_summary = re.compile("^Summary\(([^\)]+)\):\t+(.*)$")
+  re_summary = re.compile("^Summary\(([^\)]+)\):[ \t]+(.*)$")
   re_utf = re.compile("^utf-8$", re.I)
   re_desc = re.compile("^(%description.*\s)-l\s+([\S]+)($|\s.*$)")
-  re_proc = re.compile("^%")
+  re_proc = re.compile("^%[^{]")
+  re_ignore_proc = re.compile("^%(if|endif)")
   re_changelog = re.compile("^%changelog")
   in_desc = False
   in_changelog = False
@@ -73,15 +75,16 @@ def parse_spec(infile, outfile):
     # %description start
     r = re_desc.match(l)
     if r:
-      (enc, pure_lang) = find_encoding(r.group(2))
+      lang = r.group(2)
+      (enc, pure_lang) = find_encoding(lang)
       if enc == None:
-        outfile.write("#spec_utf8: unknown lang code in %%description -l %s\n" % (r.group(2)))
+        outfile.write("#spec_utf8: unknown lang code in %%description -l %s\n" % (lang))
        success = False
       elif not re_utf.search(enc):
         in_desc = True
         outline = "%s-l %s.UTF-8%s\n" % (r.group(1), pure_lang, r.group(3))
     elif in_desc:
-      if re_proc.search(l):
+      if re_proc.search(l) and not re_ignore_proc.search(l):
         in_desc = False
       else:
         # %description continues
@@ -89,7 +92,7 @@ def parse_spec(infile, outfile):
           try:
             outline = unicode(l, enc).encode("UTF-8")
           except UnicodeDecodeError:
-            outfile.write("#spec_utf8: transcoding error %%description -l %s\n" % (r.group(2)))
+            outfile.write("#spec_utf8: transcoding error %%description -l %s\n" % (pure_lang))
            success = False
     elif in_changelog:
       try:
@@ -104,16 +107,17 @@ def parse_spec(infile, outfile):
       # Summary
       r = re_summary.match(l)
       if r:
-        (enc, pure_lang) = find_encoding(r.group(1))
+        lang = r.group(1)
+        (enc, pure_lang) = find_encoding(lang)
         if enc == None:
-          outfile.write("#spec_utf8: unknow lang code Summary(%s)\n" % (r.group(1)))
+          outfile.write("#spec_utf8: unknown lang code in Summary(%s)\n" % (lang))
          success = False
         elif not re_utf.search(enc):
           try:
             desc = unicode(r.group(2), enc).encode("UTF-8")
-            outline = "Summary(%s.UTF-8):   %s\n" % (pure_lang, desc)
+            outline = "Summary(%s.UTF-8):\t%s\n" % (pure_lang, desc)
           except UnicodeDecodeError:
-            outfile.write("#spec_utf8: ranscoding error Summary(%s)\n" % (r.group(1)))
+            outfile.write("#spec_utf8: transcoding error Summary(%s)\n" % (lang))
            success = False
       elif re_changelog.match(l):
         # %changelog start
@@ -124,22 +128,26 @@ def parse_spec(infile, outfile):
     outfile.write("%s"% (outline, ))
   return success
 
-def main(argv):
-  print "Converting %s ..." % argv[1]
-  f = open(argv[1], 'r')
+def main(spec):
+  tmp = spec + '.tmp'
+  print "Converting %s ..." % spec
+  f = open(spec, 'r')
   sio = StringIO.StringIO()
   sio.write(f.read())
   f.close()
   sio.seek(0)
-  f = open(argv[1] + '.tmp', 'w')
+  f = open(tmp, 'w')
   if not parse_spec(sio, f):
-         sys.stderr.write("   Problems while converting %s.\n" % argv[1])
+         sys.stderr.write("   Problems while converting %s.\n" % spec)
   f.close()
-  os.rename(argv[1] + '.tmp', argv[1])
+  if filecmp.cmp(spec, tmp, False):
+    os.remove(tmp)
+  else:
+    os.rename(tmp, spec)
 
 if __name__ == "__main__":
-  if len(sys.argv) != 2:
-         sys.stderr.write("Usage: %s <spec file>\n" % sys.argv[0])
-         sys.exit(1)
-  main(sys.argv)
-
+  if len(sys.argv) == 1:
+    sys.stderr.write("Usage: %s <spec-files>\n" % sys.argv[0])
+    sys.exit(1)
+  for spec in sys.argv[1:]:
+    main(spec)
This page took 0.039714 seconds and 4 git commands to generate.