mercurial/cmdutil.py
branchstable
changeset 15634 cfc15cbecc5e
parent 15600 195dbd1cef0c
child 15636 4841035f37b6
child 15698 43e068c15619
--- a/mercurial/cmdutil.py	Thu Dec 15 11:13:38 2011 +0100
+++ b/mercurial/cmdutil.py	Wed Dec 14 12:28:00 2011 -0200
@@ -588,8 +588,14 @@
         ctx1 = repo[node1]
         ctx2 = repo[node2]
         for subpath, sub in subrepo.itersubrepos(ctx1, ctx2):
-            if node2 is not None:
-                node2 = ctx2.substate[subpath][1]
+            try:
+                if node2 is not None:
+                    node2 = ctx2.substate[subpath][1]
+            except KeyError:
+                # A subrepo that existed in node1 was deleted between node1 and
+                # node2 (inclusive). Thus, ctx2's substate won't contain that
+                # subpath. The best we can do is to ignore it.
+                node2 = None
             submatch = matchmod.narrowmatcher(subpath, match)
             sub.diff(diffopts, node2, submatch, changes=changes,
                      stat=stat, fp=fp, prefix=prefix)