[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