]> arthur.barton.de Git - bup.git/blob - cmd/ls-cmd.py
f2252b34023637215411cedd3f557a44d4949f7f
[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 istty1:
47                 L.append(node_name(d, n))
48             else:
49                 print node_name(d, n)
50     except vfs.NodeError, e:
51         log('error: %s\n' % e)
52         ret = 1
53
54 if istty1:
55     sys.stdout.write(columnate(L, ''))
56
57 sys.exit(ret)