changeset 2750:8c814c1ab31e

New self-explanatory command qrename.
author Brendan Cully <brendan@kublai.com>
date Tue, 01 Aug 2006 10:55:06 -0700
parents d13e4ffaa79d
children 7d1de4545728
files hgext/mq.py tests/test-mq.out
diffstat 2 files changed, 53 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/mq.py	Tue Aug 01 09:51:36 2006 -0400
+++ b/hgext/mq.py	Tue Aug 01 10:55:06 2006 -0700
@@ -1411,6 +1411,56 @@
     q.save_dirty()
     return 0
 
+def rename(ui, repo, patch, name=None, **opts):
+    """rename a patch
+
+    With one argument, renames the current patch to PATCH1.
+    With two arguments, renames PATCH1 to PATCH2."""
+
+    q = repo.mq
+
+    if not name:
+        name = patch
+        patch = None
+
+    if name in q.series:
+        raise util.Abort(_('A patch named %s already exists in the series file') % name)
+
+    absdest = os.path.join(q.path, name)
+    if os.path.exists(absdest):
+        raise util.Abort(_('%s already exists') % absdest)
+    
+    if patch:
+        patch = q.lookup(patch)
+    else:
+        if not q.applied:
+            ui.write(_('No patches applied\n'))
+            return
+        patch = q.lookup('qtip')
+
+    if ui.verbose:
+        ui.write('Renaming %s to %s\n' % (patch, name))
+    i = q.find_series(patch)
+    q.full_series[i] = name
+    q.read_series(q.full_series)
+    q.series_dirty = 1
+
+    info = q.isapplied(patch)
+    if info:
+        q.applied[info[0]] = info[1] + ':' + name
+    q.applied_dirty = 1
+
+    util.rename(os.path.join(q.path, patch), absdest)
+    r = q.qrepo()
+    if r:
+        wlock = r.wlock()
+        if r.dirstate.state(name) == 'r':
+            r.undelete([name], wlock)
+        r.copy(patch, name, wlock)
+        r.remove([patch], False, wlock)
+
+    q.save_dirty()
+
 def restore(ui, repo, rev, **opts):
     """restore the queue state saved by a rev"""
     rev = repo.lookup(rev)
@@ -1552,6 +1602,8 @@
           ('l', 'logfile', '', _('change commit message with <file> content')),
           ('s', 'short', None, 'short refresh')],
          'hg qrefresh [-e] [-m TEXT] [-l FILE] [-s]'),
+    'qrename':
+        (rename, [], 'hg qrename PATCH1 [PATCH2]'),
     "qrestore":
         (restore,
          [('d', 'delete', None, 'delete save entry'),
--- a/tests/test-mq.out	Tue Aug 01 09:51:36 2006 -0400
+++ b/tests/test-mq.out	Tue Aug 01 10:55:06 2006 -0700
@@ -39,6 +39,7 @@
  qprev        print the name of the previous patch
  qpush        push the next patch onto the stack
  qrefresh     update the current patch
+ qrename      rename a patch
  qrestore     restore the queue state saved by a rev
  qsave        save current queue state
  qseries      print the entire series file