diff: don't crash when diffing a revision with a deleted subrepo (issue3153)

When a user requested a diff between a revision (r1) that contained a subrepo
and another (r2) that did not, mercurial would crash if r1 was specified before
r2 but would execute the diff otherwise. This fixes this behavior by skipping
the missing subrepo in the diff.
This commit is contained in:
Renato Cunha 2011-12-14 12:28:00 -02:00
parent 034d08dce7
commit cb456a1751

View File

@ -588,8 +588,14 @@ def diffordiffstat(ui, repo, diffopts, node1, node2, match,
ctx1 = repo[node1] ctx1 = repo[node1]
ctx2 = repo[node2] ctx2 = repo[node2]
for subpath, sub in subrepo.itersubrepos(ctx1, ctx2): for subpath, sub in subrepo.itersubrepos(ctx1, ctx2):
if node2 is not None: try:
node2 = ctx2.substate[subpath][1] 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) submatch = matchmod.narrowmatcher(subpath, match)
sub.diff(diffopts, node2, submatch, changes=changes, sub.diff(diffopts, node2, submatch, changes=changes,
stat=stat, fp=fp, prefix=prefix) stat=stat, fp=fp, prefix=prefix)