Mercurial > hrm
changeset 6:9bffe9d72eac
Finished adding undo support, fixed a bug.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Mon, 08 Dec 2008 15:11:16 -0800 |
parents | ce037f485614 |
children | bee7dc23f7c8 |
files | kharon.py |
diffstat | 1 files changed, 18 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/kharon.py Mon Dec 08 14:33:12 2008 -0800 +++ b/kharon.py Mon Dec 08 15:11:16 2008 -0800 @@ -32,6 +32,7 @@ json.dump(state, open(self.__filename, 'w')) def shell(*params): + print('Executing: %s' % repr(params)) popen = subprocess.Popen(params) popen.wait() if popen.returncode: @@ -69,12 +70,22 @@ print('Transaction %d does not exist.' % transid) sys.exit(-1) - print('Sorry, undo is not implemented yet. ' - 'But you can find what you need in the following ' - 'directory/directories:\n') - print('\n'.join([dir_for_trans(transid) - for transid in transactions])) - sys.exit(-1) + transactions.sort(reverse=True) + + for transid in transactions: + transdirname = dir_for_trans(transid) + for dirpath, dirnames, filenames in os.walk(transdirname): + relpath = dirpath[len(transdirname)+1:] + contents = dirnames + filenames + for name in contents: + srcpath = os.path.join(dirpath, name) + destpath = os.path.join('/', relpath, name) + if not os.path.exists(destpath): + if os.path.isdir(srcpath): + dirnames.remove(name) + print('Restoring %s.' % destpath) + shell('mv', srcpath, destpath) + print('Done.') else: if not args: parser.print_help() @@ -102,6 +113,6 @@ print("Creating transaction %d." % thisid) for source in files: - dest = os.path.join(basedir, filename[1:]) + dest = os.path.join(basedir, source[1:]) distutils.dir_util.mkpath(os.path.dirname(dest)) shell('mv', source, dest)