]> arthur.barton.de Git - bup.git/blob - cmd/ls-cmd.py
ftp/ls: columnate output attached to a tty, else don't
[bup.git] / cmd / ls-cmd.py
1 #!/usr/bin/env python
2 import sys, stat
3 from bup import options, git, vfs
4 from bup.helpers import *
5
6 def node_name(text, n):
7     prefix = ''
8     if opt.hash:
9         prefix += "%s " % n.hash.encode('hex')
10     if stat.S_ISDIR(n.mode):
11         return '%s%s/' % (prefix, text)
12     elif stat.S_ISLNK(n.mode):
13         return '%s%s@' % (prefix, text)
14     else:
15         return '%s%s' % (prefix, text)
16
17
18 optspec = """
19 bup ls <dirs...>
20 --
21 s,hash   show hash for each file
22 a,all    show hidden files
23 """
24 o = options.Options(optspec)
25 (opt, flags, extra) = o.parse(sys.argv[1:])
26
27 git.check_repo_or_die()
28 top = vfs.RefList(None)
29
30 if not extra:
31     extra = ['/']
32
33 ret = 0
34 for d in extra:
35     L = []
36     try:
37         n = top.lresolve(d)
38         if stat.S_ISDIR(n.mode):
39             for sub in n:
40                 if opt.all or not sub.name.startswith('.'):
41                     if istty1:
42                         L.append(node_name(sub.name, sub))
43                     else:
44                         print node_name(sub.name, sub)
45         else:
46             if opt.all or not n.name.startswith('.'):
47                 if istty1:
48                     L.append(node_name(d, n))
49                 else:
50                     print node_name(d, n)
51     except vfs.NodeError, e:
52         log('error: %s\n' % e)
53         ret = 1
54
55 if istty1:
56     sys.stdout.write(columnate(L, ''))
57
58 sys.exit(ret)