changeset 7142:88f1b8081f1c

Prevent import over an applied patch (closes issue795)
author Brendan Cully <brendan@kublai.com>
date Sat, 18 Oct 2008 13:22:29 -0700
parents d834ed27199f
children 2bbdae4f39d1
files hgext/mq.py tests/test-mq tests/test-mq.out
diffstat 3 files changed, 27 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/mq.py	Sat Oct 18 11:43:45 2008 -0700
+++ b/hgext/mq.py	Sat Oct 18 13:22:29 2008 -0700
@@ -2331,6 +2331,23 @@
         repo.__class__ = mqrepo
         repo.mq = queue(ui, repo.join(""))
 
+def uisetup(ui):
+    # override import to disallow importing over patch
+    importalias, importcmd = cmdutil.findcmd(ui, 'import', commands.table)
+    for alias, cmd in commands.table.iteritems():
+        if cmd is importcmd:
+            importkey = alias
+            break
+    orig_import = importcmd[0]
+    def mqimport(ui, repo, patch1, *patches, **opts):
+        if hasattr(repo, 'abort_if_wdir_patched'):
+            repo.abort_if_wdir_patched(_('cannot import over an applied patch'),
+                                       opts.get('force'))
+            orig_import(ui, repo, patch1, *patches, **opts)
+    importcmd = list(importcmd)
+    importcmd[0] = mqimport
+    commands.table[importkey] = tuple(importcmd)
+
 seriesopts = [('s', 'summary', None, _('print first line of patch header'))]
 
 cmdtable = {
--- a/tests/test-mq	Sat Oct 18 11:43:45 2008 -0700
+++ b/tests/test-mq	Sat Oct 18 13:22:29 2008 -0700
@@ -199,6 +199,14 @@
 echo % push should fail
 hg push ../../k
 
+echo % import should fail
+hg st .
+echo foo >> ../a
+hg diff > ../../import.diff
+hg revert --no-backup ../a
+hg import ../../import.diff
+hg st
+
 echo % qunapplied
 hg qunapplied
 
--- a/tests/test-mq.out	Sat Oct 18 11:43:45 2008 -0700
+++ b/tests/test-mq.out	Sat Oct 18 13:22:29 2008 -0700
@@ -169,6 +169,8 @@
 % push should fail
 pushing to ../../k
 abort: source has mq patches applied
+% import should fail
+abort: cannot import over an applied patch
 % qunapplied
 test2.patch
 % qpush/qpop with index