1b8da8d7761b0755c602a965d0fb7f52c7c4c47faJack Jansen# Scan the tree passed as argv[0] for .rsrc files, skipping .rsrc.df.rsrc 2b8da8d7761b0755c602a965d0fb7f52c7c4c47faJack Jansen# files, and open these. The effect of this is to create the .rsrc.df.rsrc 3b8da8d7761b0755c602a965d0fb7f52c7c4c47faJack Jansen# cache files if needed. 4b8da8d7761b0755c602a965d0fb7f52c7c4c47faJack Jansen# These are needed on OSX: the .rsrc files are in reality AppleSingle-encoded 5b8da8d7761b0755c602a965d0fb7f52c7c4c47faJack Jansen# files. We decode the resources into a datafork-based resource file. 6b8da8d7761b0755c602a965d0fb7f52c7c4c47faJack Jansen 7b8da8d7761b0755c602a965d0fb7f52c7c4c47faJack Jansenimport macresource 8b8da8d7761b0755c602a965d0fb7f52c7c4c47faJack Jansenimport os 9b8da8d7761b0755c602a965d0fb7f52c7c4c47faJack Jansenimport sys 10b8da8d7761b0755c602a965d0fb7f52c7c4c47faJack Jansenimport getopt 11b8da8d7761b0755c602a965d0fb7f52c7c4c47faJack Jansen 12b8da8d7761b0755c602a965d0fb7f52c7c4c47faJack Jansenclass NoArgsError(Exception): 13182b5aca27d376b08a2904bed42b751496f932f3Tim Peters pass 14182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 15b8da8d7761b0755c602a965d0fb7f52c7c4c47faJack Jansendef handler((verbose, force), dirname, fnames): 16182b5aca27d376b08a2904bed42b751496f932f3Tim Peters for fn in fnames: 17182b5aca27d376b08a2904bed42b751496f932f3Tim Peters if fn[-5:] == '.rsrc' and fn[-13:] != '.rsrc.df.rsrc': 18182b5aca27d376b08a2904bed42b751496f932f3Tim Peters if force: 19182b5aca27d376b08a2904bed42b751496f932f3Tim Peters try: 20182b5aca27d376b08a2904bed42b751496f932f3Tim Peters os.unlink(os.path.join(dirname, fn + '.df.rsrc')) 21182b5aca27d376b08a2904bed42b751496f932f3Tim Peters except IOError: 22182b5aca27d376b08a2904bed42b751496f932f3Tim Peters pass 23182b5aca27d376b08a2904bed42b751496f932f3Tim Peters macresource.open_pathname(os.path.join(dirname, fn), verbose=verbose) 24182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 25b8da8d7761b0755c602a965d0fb7f52c7c4c47faJack Jansendef main(): 26182b5aca27d376b08a2904bed42b751496f932f3Tim Peters try: 27182b5aca27d376b08a2904bed42b751496f932f3Tim Peters opts, args = getopt.getopt(sys.argv[1:], 'vf') 28182b5aca27d376b08a2904bed42b751496f932f3Tim Peters if not args: 29182b5aca27d376b08a2904bed42b751496f932f3Tim Peters raise NoArgsError 30182b5aca27d376b08a2904bed42b751496f932f3Tim Peters except (getopt.GetoptError, NoArgsError): 31182b5aca27d376b08a2904bed42b751496f932f3Tim Peters sys.stderr.write('Usage: cachersrc.py dirname ...\n') 32182b5aca27d376b08a2904bed42b751496f932f3Tim Peters sys.exit(1) 33182b5aca27d376b08a2904bed42b751496f932f3Tim Peters verbose = 0 34182b5aca27d376b08a2904bed42b751496f932f3Tim Peters force = 0 35182b5aca27d376b08a2904bed42b751496f932f3Tim Peters for o, v in opts: 36182b5aca27d376b08a2904bed42b751496f932f3Tim Peters if o == '-v': 37182b5aca27d376b08a2904bed42b751496f932f3Tim Peters verbose = 1 38182b5aca27d376b08a2904bed42b751496f932f3Tim Peters if o == '-f': 39182b5aca27d376b08a2904bed42b751496f932f3Tim Peters force = 1 40182b5aca27d376b08a2904bed42b751496f932f3Tim Peters for dir in sys.argv[1:]: 41182b5aca27d376b08a2904bed42b751496f932f3Tim Peters os.path.walk(dir, handler, (verbose, force)) 42182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 43b8da8d7761b0755c602a965d0fb7f52c7c4c47faJack Jansenif __name__ == '__main__': 44182b5aca27d376b08a2904bed42b751496f932f3Tim Peters main() 45