[Pkg-mozext-commits] [adblock-plus] 359/464: Fixed handling of relative paths in manifests (important when inheriting from a manifest in a different directory)
David Prévot
taffit at moszumanska.debian.org
Tue Jul 22 20:44:33 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 8ec976bee591a38436e03acd317075b3785f9180
Author: Wladimir Palant <trev at adblockplus.org>
Date: Fri Jan 25 11:19:56 2013 +0100
Fixed handling of relative paths in manifests (important when inheriting from a manifest in a different directory)
---
chainedconfigparser.py | 20 ++++++++++++++++++--
packager.py | 8 +++++---
packagerChrome.py | 13 ++++++++-----
packagerGecko.py | 10 ++++++----
4 files changed, 37 insertions(+), 14 deletions(-)
diff --git a/chainedconfigparser.py b/chainedconfigparser.py
index ba1260c..606a597 100644
--- a/chainedconfigparser.py
+++ b/chainedconfigparser.py
@@ -20,6 +20,12 @@
import os, codecs, ConfigParser
+class Item(tuple):
+ def __new__(cls, name, value, source):
+ result = super(Item, cls).__new__(cls, (name, value))
+ result.source = source
+ return result
+
class ChainedConfigParser:
"""
This class provides essentially the same interfaces as SafeConfigParser but
@@ -37,7 +43,10 @@ class ChainedConfigParser:
A main API difference to SafeConfigParser is the way a class instance is
constructed: a file path has to be passed, this file is assumed to be
encoded as UTF-8. Also, ChainedConfigParser data is read-only and the
- options are case-sensitive.
+ options are case-sensitive. An additional option_source(section, option)
+ method is provided to get the path of the configuration file defining this
+ option (for relative paths). Items returned by the items() function also
+ have a source attribute serving the same purpose.
"""
def __init__(self, path):
@@ -50,6 +59,7 @@ class ChainedConfigParser:
config = ConfigParser.SafeConfigParser()
config.optionxform = str
+ config.source_path = path
handle = codecs.open(path, 'rb', encoding='utf-8')
config.readfp(handle)
handle.close()
@@ -108,5 +118,11 @@ class ChainedConfigParser:
for name, value in config.items(section):
if name not in seen:
seen.add(name)
- result.append((name, value))
+ result.append(Item(name, value, config.source_path))
return result
+
+ def option_source(self, section, option):
+ for config in self.chain:
+ if config.has_section(section) and config.has_option(section, option):
+ return config.source_path
+ raise ConfigParser.NoOptionError(option, section)
diff --git a/packager.py b/packager.py
index f0ccc65..ea89128 100644
--- a/packager.py
+++ b/packager.py
@@ -92,13 +92,15 @@ class Files(dict):
self[relpath] = file.read()
file.close()
- def readMappedFiles(self, baseDir, mappings):
- for target, source in mappings:
+ def readMappedFiles(self, mappings):
+ for item in mappings:
+ target, source = item
+
# Make sure the file is inside an included directory
if '/' in target and not self.isIncluded(target):
continue
parts = source.split('/')
- path = os.path.join(baseDir, *parts)
+ path = os.path.join(os.path.dirname(item.source), *parts)
if os.path.exists(path):
self.read(path, target)
else:
diff --git a/packagerChrome.py b/packagerChrome.py
index 2e13749..68ed53e 100644
--- a/packagerChrome.py
+++ b/packagerChrome.py
@@ -112,9 +112,11 @@ def createPoller(params):
def convertJS(params, files):
from jshydra.abp_rewrite import doRewrite
- baseDir = params['baseDir']
- for file, sources in params['metadata'].items('convert_js'):
+ for item in params['metadata'].items('convert_js'):
+ file, sources = item
+ baseDir = os.path.dirname(item.source)
+
# Make sure the file is inside an included directory
if '/' in file and not files.isIncluded(file):
continue
@@ -182,9 +184,10 @@ def importGeckoLocales(params, files):
for source, target in localeCodeMapping.iteritems():
targetFile = '_locales/%s/messages.json' % target
- for fileName, keys in params['metadata'].items('import_locales'):
+ for item in params['metadata'].items('import_locales'):
+ fileName, keys = item
parts = map(lambda n: source if n == '*' else n, fileName.split('/'))
- sourceFile = os.path.join(params['baseDir'], *parts)
+ sourceFile = os.path.join(os.path.dirname(item.source), *parts)
incompleteMarker = os.path.join(os.path.dirname(sourceFile), '.incomplete')
if not os.path.exists(sourceFile) or os.path.exists(incompleteMarker):
continue
@@ -258,7 +261,7 @@ def createBuild(baseDir, outFile=None, buildNum=None, releaseBuild=False, keyFil
files = Files(getPackageFiles(params), getIgnoredFiles(params))
files['manifest.json'] = createManifest(params)
if metadata.has_section('mapping'):
- files.readMappedFiles(baseDir, metadata.items('mapping'))
+ files.readMappedFiles(metadata.items('mapping'))
files.read(baseDir)
if metadata.has_section('convert_js'):
diff --git a/packagerGecko.py b/packagerGecko.py
index 5fc87fd..85fb3d6 100644
--- a/packagerGecko.py
+++ b/packagerGecko.py
@@ -125,7 +125,7 @@ def readLocaleMetadata(baseDir, locales):
result[locale] = {}
return result
-def getContributors(baseDir, metadata):
+def getContributors(metadata):
main = []
additional = set()
if metadata.has_section('contributors'):
@@ -138,7 +138,9 @@ def getContributors(baseDir, metadata):
if not match:
print >>sys.stderr, 'Warning: unrecognized contributor location "%s"\n' % value
continue
- dom = minidom.parse(os.path.join(baseDir, match.group(1)))
+ baseDir = os.path.dirname(metadata.option_source('contributors', option))
+ parts = match.group(1).split('/')
+ dom = minidom.parse(os.path.join(baseDir, *parts))
tags = dom.getElementsByTagName(match.group(2))
for tag in tags:
if tag.hasAttribute(match.group(3)):
@@ -306,7 +308,7 @@ def createBuild(baseDir, outFile=None, locales=None, buildNum=None, releaseBuild
if outFile == None:
outFile = getDefaultFileName(baseDir, metadata, version, 'xpi')
- contributors = getContributors(baseDir, metadata)
+ contributors = getContributors(metadata)
params = {
'baseDir': baseDir,
@@ -322,7 +324,7 @@ def createBuild(baseDir, outFile=None, locales=None, buildNum=None, releaseBuild
process=lambda path, data: processFile(path, data, params))
files['install.rdf'] = createManifest(params)
if metadata.has_section('mapping'):
- files.readMappedFiles(baseDir, metadata.items('mapping'))
+ files.readMappedFiles(metadata.items('mapping'))
files.read(baseDir, skip=('chrome'))
for name, path in getChromeSubdirs(baseDir, params['locales']).iteritems():
if os.path.isdir(path):
--
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