[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