[PATCH 2/4] Allows to refresh a non-top applied patch.
Signed-off-by: Yann Dirson <ydirson@altern.org>
---
stgit/commands/refresh.py | 25 ++++++++++++++++++++++---
1 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/stgit/commands/refresh.py b/stgit/commands/refresh.py
index 610d18a..ea0fe6f 100644
--- a/stgit/commands/refresh.py
+++ b/stgit/commands/refresh.py
@@ -66,6 +66,8 @@ options = [make_option('-f', '--force',
make_option('--commemail',
help = 'use COMMEMAIL as the committer ' \
'e-mail'),
+ make_option('-p', '--patch',
+ help = 'refresh named (applied) PATCH instead of the top one'),
make_option('--sign',
help = 'add Signed-off-by line',
action = 'store_true'),
@@ -80,9 +82,15 @@ def func(parser, options, args):
if autoresolved != 'yes':
check_conflicts()
- patch = crt_series.get_current()
- if not patch:
- raise CmdException, 'No patches applied'
+ if options.patch:
+ patch = options.patch
+ if not crt_series.patch_applied(patch):
+ raise CmdException, 'Patches "%s" not applied' % patch
+ origpatch = crt_series.get_current()
+ else:
+ patch = crt_series.get_current()
+ if not patch:
+ raise CmdException, 'No patches applied'
if not options.force:
check_head_top_equal()
@@ -110,6 +118,13 @@ def func(parser, options, args):
or options.authname or options.authemail or options.authdate \
or options.commname or options.commemail \
or options.sign or options.ack:
+
+ if options.patch:
+ applied = crt_series.get_applied()
+ between = applied[applied.index(patch)+1:]
+ between.reverse()
+ pop_patches(between)
+
print 'Refreshing patch "%s"...' % patch,
sys.stdout.flush()
@@ -126,6 +141,10 @@ def func(parser, options, args):
committer_email = options.commemail,
backup = True, sign_str = sign_str)
+ if options.patch:
+ between.reverse()
+ push_patches(between)
+
print 'done'
else: