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>
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')]
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:
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