diff -r 4186d359046a -r ca8d2b73155d mercurial/changegroup.py --- a/mercurial/changegroup.py Fri Jan 22 12:08:20 2016 -0600 +++ b/mercurial/changegroup.py Wed Jan 27 10:24:25 2016 -0500 @@ -778,12 +778,15 @@ if 'treemanifest' in repo.requirements: submfs = {'/': mdata} for dn, bn in _moddirs(mfchangedfiles[x]): - submf = submfs[dn] - submf = submf._dirs[bn] + try: + submf = submfs[dn] + submf = submf._dirs[bn] + except KeyError: + continue # deleted directory, so nothing to send submfs[submf.dir()] = submf tmfclnodes = tmfnodes.setdefault(submf.dir(), {}) - tmfclnodes.setdefault(submf._node, clnode) - if clrevorder[clnode] < clrevorder[fclnode]: + tmfclnode = tmfclnodes.setdefault(submf._node, clnode) + if clrevorder[clnode] < clrevorder[tmfclnode]: tmfclnodes[n] = clnode return clnode