diff --git a/mercurial/changegroup.py b/mercurial/changegroup.py index 4186d359046a87aa303132894dec49bbfb1fd87f_bWVyY3VyaWFsL2NoYW5nZWdyb3VwLnB5..ca8d2b73155d30d7402391cb48ab6727cd33f9e7_bWVyY3VyaWFsL2NoYW5nZWdyb3VwLnB5 100644 --- a/mercurial/changegroup.py +++ b/mercurial/changegroup.py @@ -778,7 +778,10 @@ 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(), {}) @@ -783,7 +786,7 @@ 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 diff --git a/tests/test-treemanifest.t b/tests/test-treemanifest.t index 4186d359046a87aa303132894dec49bbfb1fd87f_dGVzdHMvdGVzdC10cmVlbWFuaWZlc3QudA==..ca8d2b73155d30d7402391cb48ab6727cd33f9e7_dGVzdHMvdGVzdC10cmVlbWFuaWZlc3QudA== 100644 --- a/tests/test-treemanifest.t +++ b/tests/test-treemanifest.t @@ -332,6 +332,21 @@ $ grep treemanifest empty-repo/.hg/requires treemanifest +Pushing to an empty repo works + + $ hg --config experimental.treemanifest=1 init clone + $ grep treemanifest clone/.hg/requires + treemanifest + $ hg push -R repo clone + pushing to clone + searching for changes + adding changesets + adding manifests + adding file changes + added 11 changesets with 15 changes to 10 files (+3 heads) + $ grep treemanifest clone/.hg/requires + treemanifest + Create deeper repo with tree manifests. $ hg --config experimental.treemanifest=True init deeprepo