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