[Pkg-mozext-commits] [adblock-plus] 12/52: Issue 1707 - Allow importing Chrome-style locales in Firefox extensions

David Prévot taffit at moszumanska.debian.org
Thu Jan 22 21:43:44 UTC 2015


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository adblock-plus.

commit 049ba359c8083088c03a38c9d43c272cd67a855f
Author: Wladimir Palant <trev at adblockplus.org>
Date:   Tue Dec 16 23:40:20 2014 +0100

    Issue 1707 - Allow importing Chrome-style locales in Firefox extensions
    
    --HG--
    extra : amend_source : fce6353c00bc3aefb7f825924f46bd92664ca4f8
---
 packagerGecko.py | 58 +++++++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 49 insertions(+), 9 deletions(-)

diff --git a/packagerGecko.py b/packagerGecko.py
index efb4ef7..c36718a 100644
--- a/packagerGecko.py
+++ b/packagerGecko.py
@@ -4,7 +4,14 @@
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
-import os, sys, re, hashlib, base64, urllib, json
+import os
+import sys
+import re
+import hashlib
+import base64
+import urllib
+import json
+import io
 from ConfigParser import SafeConfigParser
 from StringIO import StringIO
 import xml.dom.minidom as minidom
@@ -56,6 +63,9 @@ def getPackageFiles(params):
 def getIgnoredFiles(params):
   return {'.incomplete', 'meta.properties'}
 
+def archive_path(path, baseDir):
+  return '/'.join(os.path.split(os.path.relpath(path, baseDir)))
+
 def isValidLocale(localesDir, dir, includeIncomplete=False):
   if re.search(r'[^\w\-]', dir):
     return False
@@ -143,20 +153,49 @@ def createManifest(params):
   templateData['defaultLocale'] = defaultLocale
   return template.render(templateData).encode('utf-8')
 
+def importLocales(params, files):
+  SECTION = 'import_locales'
+  if not params['metadata'].has_section(SECTION):
+    return
+
+  import localeTools
+
+  for locale in params['locales']:
+    for item in params['metadata'].items(SECTION):
+      path, keys = item
+      parts = [locale if p == '*' else p for p in path.split('/')]
+      source = os.path.join(os.path.dirname(item.source), *parts)
+      if not os.path.exists(source):
+        continue
+
+      with io.open(source, 'r', encoding='utf-8') as handle:
+        data = json.load(handle)
+
+      target_name = os.path.splitext(os.path.basename(source))[0] + '.properties'
+      target = archive_path(os.path.join(getLocalesDir(params['baseDir']), locale, target_name), params['baseDir'])
+
+      files[target] = ''
+      for key, value in sorted(data.items()):
+        message = value['message']
+        files[target] += localeTools.generateStringEntry(key, message, target).encode('utf-8')
+
 def fixupLocales(params, files):
   global defaultLocale
 
-  # Read in default locale data, it might not be included in files
+  # Read in default locale data, it might not be included in package files
   defaultLocaleDir = os.path.join(getLocalesDir(params['baseDir']), defaultLocale)
+  reference_files = Files(getPackageFiles(params), getIgnoredFiles(params))
+  reference_files.read(defaultLocaleDir, archive_path(defaultLocaleDir, params['baseDir']))
+  reference_params = dict(params)
+  reference_params['locales'] = [defaultLocale]
+  importLocales(reference_params, reference_files)
+
   reference = {}
-  ignoredFiles = getIgnoredFiles(params)
-  for file in os.listdir(defaultLocaleDir):
-    path = os.path.join(defaultLocaleDir, file)
-    if file in ignoredFiles or not os.path.isfile(path):
-      continue
-    data = localeTools.readFile(path)
+  for path, data in reference_files.iteritems():
+    filename = path.split('/')[-1]
+    data = localeTools.parseString(data.decode('utf-8'), filename)
     if data:
-      reference[file] = data
+      reference[filename] = data
 
   for locale in params['locales']:
     for file in reference.iterkeys():
@@ -308,6 +347,7 @@ def createBuild(baseDir, type="gecko", outFile=None, locales=None, buildNum=None
   for name, path in getChromeSubdirs(baseDir, params['locales']).iteritems():
     if os.path.isdir(path):
       files.read(path, 'chrome/%s' % name)
+  importLocales(params, files)
   fixupLocales(params, files)
   if not 'bootstrap.js' in files:
     addMissingFiles(params, files)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/adblock-plus.git



More information about the Pkg-mozext-commits mailing list