changeset 4432:905397be7688

mq: add qgoto command.
author Bryan O'Sullivan <bos@serpentine.com>
date Tue, 08 May 2007 13:10:27 -0700
parents 8014159074a9
children ba22e867cb23
files hgext/mq.py tests/test-mq-qgoto tests/test-mq-qgoto.out tests/test-mq.out
diffstat 4 files changed, 47 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/mq.py
+++ b/hgext/mq.py
@@ -1762,6 +1762,17 @@ def fold(ui, repo, *files, **opts):
     q.delete(repo, patches, opts)
     q.save_dirty()
 
+def goto(ui, repo, patch, **opts):
+    '''push or pop patches until named patch is at top of stack'''
+    q = repo.mq
+    patch = q.lookup(patch)
+    if q.isapplied(patch):
+        ret = q.pop(repo, patch, force=opts['force'])
+    else:
+        ret = q.push(repo, patch, force=opts['force'])
+    q.save_dirty()
+    return ret
+
 def guard(ui, repo, *args, **opts):
     '''set or print guards for a patch
 
@@ -2202,6 +2213,8 @@ cmdtable = {
           ('k', 'keep', None, _('keep folded patch files'))
           ] + commands.commitopts,
          'hg qfold [-e] [-m <text>] [-l <file] PATCH...'),
+    'qgoto': (goto, [('f', 'force', None, _('overwrite any local changes'))],
+              'hg qgoto [OPT]... PATCH'),
     'qguard': (guard, [('l', 'list', None, _('list all patches and guards')),
                        ('n', 'none', None, _('drop all guards'))],
                'hg qguard [PATCH] [+GUARD]... [-GUARD]...'),
new file mode 100755
--- /dev/null
+++ b/tests/test-mq-qgoto
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+echo "[extensions]" >> $HGRCPATH
+echo "mq=" >> $HGRCPATH
+
+hg init a
+cd a
+echo a > a
+hg ci -Ama
+
+hg qnew a.patch
+echo a >> a
+hg qrefresh
+
+hg qnew b.patch
+echo b > b
+hg add b
+hg qrefresh
+
+hg qnew c.patch
+echo c > c
+hg add c
+hg qrefresh
+
+hg qgoto a.patch
+hg qgoto c.patch
+hg qgoto b.patch
new file mode 100644
--- /dev/null
+++ b/tests/test-mq-qgoto.out
@@ -0,0 +1,6 @@
+adding a
+Now at: a.patch
+applying b.patch
+applying c.patch
+Now at: c.patch
+Now at: b.patch
--- a/tests/test-mq.out
+++ b/tests/test-mq.out
@@ -30,6 +30,7 @@ list of commands:
  qdelete      remove patches from queue
  qdiff        diff of the current patch
  qfold        fold the named patches into the current patch
+ qgoto        push or pop patches until named patch is at top of stack
  qguard       set or print guards for a patch
  qheader      Print the header of the topmost or specified patch
  qimport      import a patch