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)