3 from bup import options, git, vfs
4 from bup.helpers import *
7 bup restore [-C outdir] </branch/revision/path/to/dir ...>
9 C,outdir= change to given outdir before extracting files
10 v,verbose increase log output (can be used more than once)
11 q,quiet don't show progress meter
35 fullname = n.fullname(stop_at=top)
37 if stat.S_ISDIR(n.mode):
38 verbose1('%s/' % fullname)
40 elif stat.S_ISLNK(n.mode):
41 verbose2('%s@ -> %s' % (fullname, n.readlink()))
42 os.symlink(n.readlink(), fullname)
45 outf = open(fullname, 'wb')
47 for b in chunkyreader(n.open()):
52 plog('Restoring: %d\r' % total_restored)
59 o = options.Options(optspec)
60 (opt, flags, extra) = o.parse(sys.argv[1:])
62 git.check_repo_or_die()
63 top = vfs.RefList(None)
66 o.fatal('must specify at least one filename to restore')
74 path,name = os.path.split(d)
77 except vfs.NodeError, e:
80 isdir = stat.S_ISDIR(n.mode)
81 if not name or name == '.':
82 # trailing slash: extract children to cwd
84 add_error('%r: not a directory' % d)
89 # no trailing slash: extract node and its children to cwd
93 progress('Restoring: %d, done.\n' % total_restored)
96 log('WARNING: %d errors encountered while restoring.\n' % len(saved_errors))