| 1 | """ |
| 2 | Walk a directory tree and output a filename list suitable for use |
| 3 | in an RPM spec. |
| 4 | |
| 5 | Usage: genfilelist.py [-r] build_root filespec(s) |
| 6 | |
| 7 | """ |
| 8 | |
| 9 | |
| 10 | import sys, os, glob, stat |
| 11 | |
| 12 | |
| 13 | def walktree(names, buildroot, recurse): |
| 14 | for name in names: |
| 15 | isdir = os.path.isdir(name) |
| 16 | printfilename(name, buildroot, isdir) |
| 17 | if isdir and recurse: |
| 18 | walktree([os.path.join(name, x) for x in os.listdir(name)], buildroot, recurse) |
| 19 | |
| 20 | |
| 21 | def printfilename(name, buildroot, isdir): |
| 22 | s = os.lstat(name) |
| 23 | realname = name[len(buildroot):] |
| 24 | if isdir: |
| 25 | fmt = "%%dir %%attr(%o, root, root) %s" |
| 26 | else: |
| 27 | fmt = "%%attr(%o, root, root) %s" |
| 28 | print fmt % (s[stat.ST_MODE] & 0777, realname) |
| 29 | |
| 30 | |
| 31 | def main(args): |
| 32 | if args[0] == '-r': |
| 33 | recurse = 1 |
| 34 | args = args[1:] |
| 35 | else: |
| 36 | recurse = 0 |
| 37 | |
| 38 | if len(args) < 2: |
| 39 | print __str__ |
| 40 | sys.exit(1) |
| 41 | |
| 42 | buildroot = args[0] |
| 43 | for arg in args[1:]: |
| 44 | if arg[0] == '/': |
| 45 | arg = arg[1:] |
| 46 | walktree(glob.glob(os.path.join(buildroot, arg)), buildroot, recurse) |
| 47 | |
| 48 | if __name__ == "__main__": |
| 49 | main(sys.argv[1:]) |
| 50 | |
| 51 | |