[Pkg-mozext-commits] [adblock-plus] 349/464: Created a base packager to hold common code for the Gecko and Chrome packagers

David Prévot taffit at moszumanska.debian.org
Tue Jul 22 20:44:32 UTC 2014


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

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

commit c08dbffef483c568d4d8e3d7569b52caed69c323
Author: Wladimir Palant <trev at adblockplus.org>
Date:   Thu Jan 10 08:36:35 2013 +0100

    Created a base packager to hold common code for the Gecko and Chrome packagers
---
 packager.py       | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 packagerChrome.py | 47 +++++++-------------------------------
 packagerGecko.py  | 43 +++++++----------------------------
 3 files changed, 83 insertions(+), 74 deletions(-)

diff --git a/packager.py b/packager.py
new file mode 100644
index 0000000..8bc0c39
--- /dev/null
+++ b/packager.py
@@ -0,0 +1,67 @@
+# coding: utf-8
+
+# This file is part of the Adblock Plus build tools,
+# Copyright (C) 2006-2012 Eyeo GmbH
+#
+# Adblock Plus is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 3 as
+# published by the Free Software Foundation.
+#
+# Adblock Plus 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>.
+
+# Note: These are the base functions common to all packagers, the actual
+# packagers are implemented in packagerGecko and packagerChrome.
+
+import os, re, codecs, subprocess, json, jinja2
+import buildtools
+from ConfigParser import SafeConfigParser
+
+def getDefaultFileName(baseDir, metadata, version, ext):
+  return os.path.join(baseDir, '%s-%s.%s' % (metadata.get('general', 'basename'), version, ext))
+
+def getMetadataPath(baseDir):
+  return os.path.join(baseDir, 'metadata')
+
+def readMetadata(baseDir):
+  metadata = SafeConfigParser()
+  metadata.optionxform = str
+  file = codecs.open(getMetadataPath(baseDir), 'rb', encoding='utf-8')
+  metadata.readfp(file)
+  file.close()
+  return metadata
+
+def getBuildNum(baseDir):
+  try:
+    (result, dummy) = subprocess.Popen(['hg', 'id', '-R', baseDir, '-n'], stdout=subprocess.PIPE).communicate()
+    return re.sub(r'\D', '', result)
+  except Exception:
+    return '0'
+
+def getBuildVersion(baseDir, metadata, releaseBuild, buildNum=None):
+  version = metadata.get('general', 'version')
+  if not releaseBuild:
+    if buildNum == None:
+      buildNum = getBuildNum(baseDir)
+    if len(buildNum) > 0:
+      if re.search(r'(^|\.)\d+$', version):
+        # Numerical version number - need to fill up with zeros to have three
+        # version components.
+        while version.count('.') < 2:
+          version += '.0'
+      version += '.' + buildNum
+  return version
+
+def getTemplate(template, autoEscape=False):
+  templatePath = buildtools.__path__[0]
+  if autoEscape:
+    env = jinja2.Environment(loader=jinja2.FileSystemLoader(templatePath), autoescape=True, extensions=['jinja2.ext.autoescape'])
+  else:
+    env = jinja2.Environment(loader=jinja2.FileSystemLoader(templatePath))
+  env.filters.update({'json': json.dumps})
+  return env.get_template(template)
diff --git a/packagerChrome.py b/packagerChrome.py
index 5d46620..003a63f 100644
--- a/packagerChrome.py
+++ b/packagerChrome.py
@@ -15,37 +15,17 @@
 # You should have received a copy of the GNU General Public License
 # along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>.
 
-import sys, os, subprocess, re, json, codecs, struct, jinja2, buildtools
-from ConfigParser import SafeConfigParser
+import sys, os, re, json, struct
 from StringIO import StringIO
 from zipfile import ZipFile, ZIP_DEFLATED
 
-defaultLocale = 'en_US'
-
-def getDefaultFileName(baseDir, metadata, ext):
-  return os.path.join(baseDir, '%s-%s.%s' % (metadata.get('general', 'basename'), metadata.get('general', 'version'), ext))
-
-def getMetadataPath(baseDir):
-  return os.path.join(baseDir, 'metadata')
+from packager import getDefaultFileName, readMetadata, getBuildVersion, getTemplate
 
-def getBuildNum(baseDir):
-  try:
-    (result, dummy) = subprocess.Popen(['hg', 'id', '-n'], stdout=subprocess.PIPE).communicate()
-    return re.sub(r'\D', '', result)
-  except Exception:
-    return '0'
+defaultLocale = 'en_US'
 
 def getIgnoredFiles(params):
   return ['store.description']
 
-def readMetadata(baseDir):
-  metadata = SafeConfigParser()
-  metadata.optionxform = str
-  file = codecs.open(getMetadataPath(baseDir), 'rb', encoding='utf-8')
-  metadata.readfp(file)
-  file.close()
-  return metadata
-
 def getPackageFiles(params):
   baseDir = params['baseDir']
   for file in ('_locales', 'icons', 'jquery-ui', 'lib', 'skin', 'ui'):
@@ -57,9 +37,7 @@ def getPackageFiles(params):
       yield os.path.join(baseDir, file)
 
 def createManifest(params):
-  env = jinja2.Environment(loader=jinja2.FileSystemLoader(buildtools.__path__[0]))
-  env.filters.update({'json': json.dumps})
-  template = env.get_template('manifest.json.tmpl')
+  template = getTemplate('manifest.json.tmpl')
   templateData = dict(params)
 
   baseDir = templateData['baseDir']
@@ -121,9 +99,7 @@ def createManifest(params):
   return manifest.encode('utf-8')
 
 def createPoller(params):
-  env = jinja2.Environment(loader=jinja2.FileSystemLoader(buildtools.__path__[0]))
-  env.filters.update({'json': json.dumps})
-  template = env.get_template('chromeDevenvPoller__.js.tmpl')
+  template = getTemplate('chromeDevenvPoller__.js.tmpl')
   return template.render(params).encode('utf-8');
 
 def readFile(params, files, path):
@@ -199,17 +175,10 @@ def writePackage(outputFile, pubkey, signature, zipdata):
 
 def createBuild(baseDir, outFile=None, buildNum=None, releaseBuild=False, keyFile=None, experimentalAPI=False, devenv=False):
   metadata = readMetadata(baseDir)
+  version = getBuildVersion(baseDir, metadata, releaseBuild, buildNum)
+
   if outFile == None:
-    outFile = getDefaultFileName(baseDir, metadata, 'crx' if keyFile else 'zip')
-
-  version = metadata.get('general', 'version')
-  if not releaseBuild:
-    if buildNum == None:
-      buildNum = getBuildNum(baseDir)
-    if len(buildNum) > 0:
-      while version.count('.') < 2:
-        version += '.0'
-      version += '.' + buildNum
+    outFile = getDefaultFileName(baseDir, metadata, version, 'crx' if keyFile else 'zip')
 
   params = {
     'baseDir': baseDir,
diff --git a/packagerGecko.py b/packagerGecko.py
index fd4a28e..4efa016 100644
--- a/packagerGecko.py
+++ b/packagerGecko.py
@@ -15,13 +15,15 @@
 # You should have received a copy of the GNU General Public License
 # along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>.
 
-import os, sys, re, subprocess, jinja2, buildtools, codecs, hashlib, base64, shutil, urllib, json
+import os, sys, re, hashlib, base64, urllib, json
 from ConfigParser import SafeConfigParser
 from StringIO import StringIO
 from zipfile import ZipFile, ZIP_STORED, ZIP_DEFLATED
 import xml.dom.minidom as minidom
 import buildtools.localeTools as localeTools
 
+from packager import getDefaultFileName, readMetadata, getBuildVersion, getTemplate
+
 KNOWN_APPS = {
   'conkeror':   '{a79fe89b-6662-4ff4-8e88-09950ad4dfde}',
   'emusic':     'dlm at emusic.com',
@@ -38,12 +40,6 @@ KNOWN_APPS = {
 
 defaultLocale = 'en-US'
 
-def getDefaultFileName(baseDir, metadata, version, ext='xpi'):
-  return os.path.join(baseDir, '%s-%s.%s' % (metadata.get('general', 'basename'), version, ext))
-
-def getMetadataPath(baseDir):
-  return os.path.join(baseDir, 'metadata')
-
 def getChromeDir(baseDir):
   return os.path.join(baseDir, 'chrome')
 
@@ -90,27 +86,11 @@ def getLocales(baseDir, includeIncomplete=False):
   locales.sort(key=lambda x: '!' if x == defaultLocale else x)
   return locales
 
-def getBuildNum(baseDir):
-  try:
-    (result, dummy) = subprocess.Popen(['hg', 'id', '-n'], stdout=subprocess.PIPE).communicate()
-    return re.sub(r'\W', '', result)
-  except Exception:
-    return '0'
-
-def readMetadata(baseDir):
-  metadata = SafeConfigParser()
-  metadata.optionxform = str
-  file = codecs.open(getMetadataPath(baseDir), 'rb', encoding='utf-8')
-  metadata.readfp(file)
-  file.close()
-  return metadata
-
 def processFile(path, data, params):
   if not re.search(r'\.(manifest|xul|jsm?|xml|xhtml|rdf|dtd|properties|css)$', path):
     return data
 
   data = re.sub(r'\r', '', data)
-  data = data.replace('{{BUILD}}', params['buildNum'])
   data = data.replace('{{VERSION}}', params['version'])
 
   whitespaceRegExp = re.compile(r'^(  )+', re.M)
@@ -180,8 +160,7 @@ def initTranslators(localeMetadata):
 
 def createManifest(baseDir, params):
   global KNOWN_APPS, defaultLocale
-  env = jinja2.Environment(loader=jinja2.FileSystemLoader(buildtools.__path__[0]), autoescape=True, extensions=['jinja2.ext.autoescape'])
-  template = env.get_template('install.rdf.tmpl')
+  template = getTemplate('install.rdf.tmpl', autoEscape=True)
   templateData = dict(params)
   templateData['localeMetadata'] = readLocaleMetadata(baseDir, params['locales'])
   initTranslators(templateData['localeMetadata'])
@@ -274,6 +253,7 @@ def addMissingFiles(baseDir, params, files):
     for module in templateData['requires']:
       moduleFile = 'lib/' + module + '.js'
       if not moduleFile in files:
+        import buildtools
         path = os.path.join(buildtools.__path__[0], moduleFile)
         if os.path.exists(path):
           missing.append((path, moduleFile))
@@ -283,9 +263,7 @@ def addMissingFiles(baseDir, params, files):
       readFile(files, params, path, moduleFile)
       checkScript(moduleFile)
 
-  env = jinja2.Environment(loader=jinja2.FileSystemLoader(buildtools.__path__[0]))
-  env.filters['json'] = json.dumps
-  template = env.get_template('bootstrap.js.tmpl')
+  template = getTemplate('bootstrap.js.tmpl')
   files['bootstrap.js'] = processFile('bootstrap.js', template.render(templateData).encode('utf-8'), params)
 
 def signFiles(files, keyFile):
@@ -346,17 +324,13 @@ def writeXPI(files, outFile):
   zip.close()
 
 def createBuild(baseDir, outFile=None, locales=None, buildNum=None, releaseBuild=False, keyFile=None, limitMetadata=False, multicompartment=False):
-  if buildNum == None:
-    buildNum = getBuildNum(baseDir)
   if locales == None:
     locales = getLocales(baseDir)
   elif locales == 'all':
     locales = getLocales(baseDir, True)
 
   metadata = readMetadata(baseDir)
-  version = metadata.get('general', 'version')
-  if not releaseBuild:
-    version += '.' + buildNum
+  version = getBuildVersion(baseDir, metadata, releaseBuild, buildNum)
 
   if limitMetadata:
     for option in metadata.options('compat'):
@@ -364,14 +338,13 @@ def createBuild(baseDir, outFile=None, locales=None, buildNum=None, releaseBuild
         metadata.remove_option('compat', option)
 
   if outFile == None:
-    outFile = getDefaultFileName(baseDir, metadata, version)
+    outFile = getDefaultFileName(baseDir, metadata, version, 'xpi')
 
   contributors = getContributors(baseDir, metadata)
 
   params = {
     'locales': locales,
     'releaseBuild': releaseBuild,
-    'buildNum': buildNum,
     'version': version.encode('utf-8'),
     'metadata': metadata,
     'limitMetadata': limitMetadata,

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