From 2dd7eca45c2f95f24817ba8fc6270989df14f78e Mon Sep 17 00:00:00 2001
From: Tyrie Vella <tyrielv@gmail.com>
Date: Thu, 11 Feb 2021 13:28:49 -0800
Subject: [PATCH] Test and fix for
 https://github.com/libgit2/libgit2sharp/issues/1869

---
 LibGit2Sharp.Tests/TreeDefinitionFixture.cs | 18 ++++++++++++++++++
 LibGit2Sharp/TreeDefinition.cs              |  1 +
 2 files changed, 19 insertions(+)

diff --git a/LibGit2Sharp.Tests/TreeDefinitionFixture.cs b/LibGit2Sharp.Tests/TreeDefinitionFixture.cs
index 99d866c09..6c0c0a41a 100644
--- a/LibGit2Sharp.Tests/TreeDefinitionFixture.cs
+++ b/LibGit2Sharp.Tests/TreeDefinitionFixture.cs
@@ -587,5 +587,23 @@ public void CanAddAnExistingBlobEntryWithAnExistingTree()
                 Assert.NotNull(td["1/branch_file.txt"]);
             }
         }
+
+        [Fact]
+        public void CanRemoveADirectoryWithChildren()
+        {
+            const string blobSha = "a8233120f6ad708f843d861ce2b7228ec4e3dec6";
+            string path = SandboxBareTestRepo();
+            using (var repo = new Repository(path))
+            {
+                TreeDefinition td = new TreeDefinition();
+                var blob = repo.Lookup<Blob>(blobSha);
+                td.Add("folder/subfolder/file1", blob, Mode.NonExecutableFile);
+                td.Add("folder/file1", blob, Mode.NonExecutableFile);
+                td.Remove("folder");
+                Assert.Null(td["folder"]);
+                Tree t = repo.ObjectDatabase.CreateTree(td);
+                Assert.Null(t["folder"]);
+            }
+        }
     }
 }
diff --git a/LibGit2Sharp/TreeDefinition.cs b/LibGit2Sharp/TreeDefinition.cs
index 73c21aac7..91389f6e3 100644
--- a/LibGit2Sharp/TreeDefinition.cs
+++ b/LibGit2Sharp/TreeDefinition.cs
@@ -94,6 +94,7 @@ public virtual TreeDefinition Remove(string treeEntryPath)
             if (segments.Item2 == null)
             {
                 entries.Remove(segments.Item1);
+                unwrappedTrees.Remove(segments.Item1);
             }
 
             if (!unwrappedTrees.ContainsKey(segments.Item1))