histedit: protect against duplicated entries
authorPierre-Yves David <pierre-yves.david@logilab.fr>
Thu, 18 Apr 2013 15:22:24 +0200
changeset 19047 81de87f8b480
parent 19046 36adbbe960ca
child 19048 1163ff06ce89
histedit: protect against duplicated entries Before this change one would issue rules with duplicated entries. For this to happen some other changeset had to be missing to maintain the rules length.
hgext/histedit.py
tests/test-histedit-arguments.t
--- a/hgext/histedit.py	Thu Apr 18 15:13:35 2013 +0200
+++ b/hgext/histedit.py	Thu Apr 18 15:22:24 2013 +0200
@@ -717,6 +717,7 @@
     """
     parsed = []
     expected = set(str(c) for c in ctxs)
+    seen = set()
     if len(rules) != len(expected):
         raise util.Abort(_('must specify a rule for each changeset once'))
     for r in rules:
@@ -731,6 +732,9 @@
         if ha not in expected:
             raise util.Abort(
                 _('may not use changesets other than the ones listed'))
+        if ha in seen:
+            raise util.Abort(_('duplicated command for changeset %s') % ha)
+        seen.add(ha)
         if action not in actiontable:
             raise util.Abort(_('unknown action "%s"') % action)
         parsed.append([action, ha])
--- a/tests/test-histedit-arguments.t	Thu Apr 18 15:13:35 2013 +0200
+++ b/tests/test-histedit-arguments.t	Thu Apr 18 15:22:24 2013 +0200
@@ -124,6 +124,19 @@
   abort: unknown action "coin"
   [255]
 
+Test duplicated changeset
+---------------------------------------
+
+So one is missing and one appear twice.
+
+  $ HGEDITOR=cat hg histedit "tip^^" --commands - << EOF
+  > pick eb57da33312f 2 three
+  > pick eb57da33312f 2 three
+  > pick 08d98a8350f3 4 five
+  > EOF
+  abort: duplicated command for changeset eb57da33312f
+  [255]
+
 Test short version of command
 ---------------------------------------