Fix the preserving of the local changes during pop
authorCatalin Marinas <catalin.marinas@gmail.com>
Tue, 17 Oct 2006 18:37:26 +0000 (19:37 +0100)
committerCatalin Marinas <catalin.marinas@gmail.com>
Tue, 17 Oct 2006 18:37:26 +0000 (19:37 +0100)
The operation now only preserves the local changes by reverse-applying the
diff of the popped patches.

Signed-off-by: Catalin Marinas <catalin.marinas@gmail.com>
stgit/commands/pop.py
stgit/stack.py

index 7c260a6..645eebd 100644 (file)
@@ -37,8 +37,8 @@ options = [make_option('-a', '--all',
                        action = 'store_true'),
            make_option('-n', '--number', type = 'int',
                        help = 'pop the specified number of patches'),
-           make_option('--keep',
-                       help = 'keep the current working directory',
+           make_option('-k', '--keep',
+                       help = 'keep the local changes',
                        action = 'store_true')]
 
 
@@ -48,10 +48,11 @@ def func(parser, options, args):
     if len(args) > 1:
         parser.error('incorrect number of arguments')
 
+    check_conflicts()
+    check_head_top_equal()
+
     if not options.keep:
         check_local_changes()
-        check_conflicts()
-        check_head_top_equal()
 
     applied = crt_series.get_applied()
     if not applied:
index 26a2fc5..93a3d4e 100644 (file)
@@ -975,6 +975,11 @@ class Series:
 
         patch = Patch(name, self.__patch_dir, self.__refs_dir)
 
+        # only keep the local changes
+        if keep and not git.apply_diff(git.get_head(), patch.get_bottom()):
+            raise StackException, \
+                  'Failed to pop patches while preserving the local changes'
+
         git.switch(patch.get_bottom(), keep)
 
         # save the new applied list