Index: packagerChrome.py |
=================================================================== |
--- a/packagerChrome.py |
+++ b/packagerChrome.py |
@@ -10,61 +10,39 @@ |
# 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/>. |
-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 |
+from packager import getDefaultFileName, readMetadata, getBuildVersion, getTemplate |
+ |
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') |
- |
-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' |
- |
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'): |
yield os.path.join(baseDir, file) |
if params['devenv']: |
yield os.path.join(baseDir, 'qunit') |
for file in os.listdir(baseDir): |
if file.endswith('.js') or file.endswith('.html') or file.endswith('.xml'): |
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'] |
metadata = templateData['metadata'] |
if metadata.has_option('general', 'pageAction'): |
icon, popup = re.split(r'\s+', metadata.get('general', 'pageAction'), 1) |
templateData['pageAction'] = {'icon': icon, 'popup': popup} |
@@ -116,19 +94,17 @@ def createManifest(params): |
data = json.loads(re.sub(licenseComment, '', manifest, 1)) |
if '_dummy' in data: |
del data['_dummy'] |
manifest = json.dumps(data, sort_keys=True, indent=2) |
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): |
ignoredFiles = getIgnoredFiles(params) |
if os.path.isdir(path): |
for file in os.listdir(path): |
if file in ignoredFiles: |
continue |
@@ -194,27 +170,20 @@ def writePackage(outputFile, pubkey, sig |
if pubkey != None and signature != None: |
file.write(struct.pack('<4sIII', 'Cr24', 2, len(pubkey), len(signature))) |
file.write(pubkey) |
file.write(signature) |
file.write(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, |
'releaseBuild': releaseBuild, |
'version': version, |
'experimentalAPI': experimentalAPI, |
'devenv': devenv, |
'metadata': metadata, |