| Index: packager.py |
| =================================================================== |
| --- a/packager.py |
| +++ b/packager.py |
| @@ -13,17 +13,17 @@ |
| # 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, zipfile, jinja2 |
| +import sys, os, re, codecs, subprocess, json, zipfile, jinja2 |
| from StringIO import StringIO |
| from ConfigParser import SafeConfigParser |
| import buildtools |
| def getDefaultFileName(baseDir, metadata, version, ext): |
| return os.path.join(baseDir, '%s-%s.%s' % (metadata.get('general', 'basename'), version, ext)) |
| @@ -86,19 +86,33 @@ class Files(dict): |
| def read(self, path, relpath='', skip=None): |
| if os.path.isdir(path): |
| for file in os.listdir(path): |
| name = relpath + ('/' if relpath != '' else '') + file |
| if (skip == None or file not in skip) and self.isIncluded(name): |
| self.read(os.path.join(path, file), name) |
| else: |
| file = open(path, 'rb') |
| + if relpath in self: |
| + print >>sys.stderr, 'Warning: File %s defined multiple times' % relpath |
| self[relpath] = file.read() |
| file.close() |
| + def readMappedFiles(self, baseDir, mappings): |
| + for target, source in mappings: |
| + # 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) |
| + if os.path.exists(path): |
| + self.read(path, target) |
| + else: |
| + print >>sys.stderr, 'Warning: Mapped file %s doesn\'t exist' % source |
| + |
| def zip(self, outFile, sortKey=None): |
| zip = zipfile.ZipFile(outFile, 'w', zipfile.ZIP_DEFLATED) |
| names = self.keys() |
| names.sort(key=sortKey) |
| for name in names: |
| data = self[name] |
| if self.process: |
| data = self.process(name, data) |