| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 # Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file |  | 
| 2 # for details. All rights reserved. Use of this source code is governed by a |  | 
| 3 # BSD-style license that can be found in the LICENSE file. |  | 
| 4 |  | 
| 5 #!/usr/bin/python2.6 |  | 
| 6 # |  | 
| 7 |  | 
| 8 """ |  | 
| 9 Usage: gen_manifest.py DIRECTORY EXTENSIONS CACHE-FILE HTML-FILES... |  | 
| 10 |  | 
| 11 Outputs an app cache manifest file including (recursively) all files with the |  | 
| 12 provided in the directory with the given extensions. Each html files is then |  | 
| 13 processed and a corresponding <name>-cache.html file is created, pointing at |  | 
| 14 the appropriate cache manifest file, which is saved as <name>-cache.manifest. |  | 
| 15 |  | 
| 16 Example: |  | 
| 17 gen_manifest.py war *.css,*.html,*.js,*.png cache.manifest foo.html bar.html |  | 
| 18 |  | 
| 19 Produces: foo-cache.html, bar-cache.html, and cache.manifest |  | 
| 20 """ |  | 
| 21 |  | 
| 22 import fnmatch |  | 
| 23 import os |  | 
| 24 import random |  | 
| 25 import sys |  | 
| 26 import datetime |  | 
| 27 |  | 
| 28 cacheDir = sys.argv[1] |  | 
| 29 extensions = sys.argv[2].split(',') |  | 
| 30 manifestName = sys.argv[3] |  | 
| 31 htmlFiles = sys.argv[4:] |  | 
| 32 |  | 
| 33 os.chdir(cacheDir) |  | 
| 34 print "Generating manifest from root path: " + cacheDir |  | 
| 35 |  | 
| 36 patterns = extensions + htmlFiles |  | 
| 37 def matches(file): |  | 
| 38   for pattern in patterns: |  | 
| 39     if fnmatch.fnmatch(file, pattern): |  | 
| 40       return True |  | 
| 41   return False |  | 
| 42 |  | 
| 43 def findFiles(rootDir): |  | 
| 44   for root, dirs, files in os.walk(rootDir): |  | 
| 45     for f in files: |  | 
| 46       # yields this file relative to the given directory |  | 
| 47       yield os.path.join(root, f)[(len(rootDir) + 1):] |  | 
| 48 |  | 
| 49 manifest = [] |  | 
| 50 manifest.append("CACHE MANIFEST") |  | 
| 51 |  | 
| 52 # print out a random number to force the browser to update the cache manifest |  | 
| 53 manifest.append("# %s" % datetime.datetime.now().isoformat()) |  | 
| 54 |  | 
| 55 # print out each file to be included in the cache manifest |  | 
| 56 manifest.append("CACHE:") |  | 
| 57 |  | 
| 58 manifest += (f for f in findFiles('.') if matches(f)) |  | 
| 59 |  | 
| 60 # force the browser to request any other files over the network, |  | 
| 61 # even when offline (better failure mode) |  | 
| 62 manifest.append("NETWORK:") |  | 
| 63 manifest.append("*") |  | 
| 64 |  | 
| 65 with open(manifestName, 'w') as f: |  | 
| 66   f.writelines(m + '\n' for m in manifest) |  | 
| 67 |  | 
| 68 print "Created manifest file: " + manifestName |  | 
| 69 |  | 
| 70 for htmlFile in htmlFiles: |  | 
| 71   cachedHtmlFile = htmlFile.replace('.html', '-cache.html') |  | 
| 72   text = open(htmlFile, 'r').read() |  | 
| 73   text = text.replace('<html>', '<html manifest="%s">' % manifestName, 1) |  | 
| 74   with open(cachedHtmlFile, 'w') as output: |  | 
| 75     output.write(text) |  | 
| 76   print "Processed html file: %s -> %s" % (htmlFile, cachedHtmlFile) |  | 
| 77 |  | 
| 78 print "Successfully generated manifest and html files" |  | 
| OLD | NEW | 
|---|