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
14 total_restored = last_progress = 0
36 if now - last_progress > 0.2:
43 fullname = n.fullname(stop_at=top)
45 if stat.S_ISDIR(n.mode):
46 verbose1('%s/' % fullname)
48 elif stat.S_ISLNK(n.mode):
49 verbose2('%s@ -> %s' % (fullname, n.readlink()))
50 os.symlink(n.readlink(), fullname)
53 outf = open(fullname, 'wb')
55 for b in chunkyreader(n.open()):
60 plog('Restoring: %d\r' % total_restored)
67 o = options.Options('bup restore', optspec)
68 (opt, flags, extra) = o.parse(sys.argv[1:])
70 git.check_repo_or_die()
71 top = vfs.RefList(None)
74 o.fatal('must specify at least one filename to restore')
82 path,name = os.path.split(d)
85 except vfs.NodeError, e:
88 isdir = stat.S_ISDIR(n.mode)
89 if not name or name == '.':
90 # trailing slash: extract children to cwd
92 add_error('%r: not a directory' % d)
97 # no trailing slash: extract node and its children to cwd
101 log('Restoring: %d, done.\n' % total_restored)
104 log('WARNING: %d errors encountered while restoring.\n' % len(saved_errors))