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