Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: packager.py

Issue 9199007: Unified in-memory file processing between Gecko and Chrome (Closed)
Patch Set: Created Jan. 14, 2013, 11:14 a.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | packagerChrome.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: packager.py
===================================================================
--- a/packager.py
+++ b/packager.py
@@ -13,19 +13,21 @@
# 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 os, re, codecs, subprocess, json, zipfile, jinja2
+from StringIO import StringIO
+from ConfigParser import SafeConfigParser
+
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):
@@ -60,8 +62,50 @@ def getBuildVersion(baseDir, metadata, r
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)
+
+class Files(dict):
+ def __init__(self, includedFiles, ignoredFiles, process=None):
+ self.includedFiles = includedFiles
+ self.ignoredFiles = ignoredFiles
+ self.process = process
+
+ def isIncluded(self, relpath):
+ parts = relpath.split('/')
+ if not parts[0] in self.includedFiles:
+ return False
+ for part in parts:
+ if part in self.ignoredFiles:
+ return False
+ return True
+
+ 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')
+ self[relpath] = file.read()
+ file.close()
+
+ 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)
+ zip.writestr(name, data)
+ zip.close()
+
+ def zipToString(self, sortKey=None):
+ buffer = StringIO()
+ self.zip(buffer, sortKey=sortKey)
+ return buffer.getvalue()
« no previous file with comments | « no previous file | packagerChrome.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld