Skip to content

Commit b36dfc6

Browse files
committed
Fix indexing into tree with trailing slash
1 parent eaa698d commit b36dfc6

2 files changed

Lines changed: 28 additions & 2 deletions

File tree

LibGit2Sharp.Tests/TreeFixture.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,31 @@ public void CanRetrieveTreeEntryPath()
241241
}
242242
}
243243

244+
[Fact]
245+
public void CanUseTrailingSlashToIndexIntoSubtree()
246+
{
247+
var path = SandboxBareTestRepo();
248+
using (var repo = new Repository(path))
249+
{
250+
var tree = repo.Lookup<Tree>(sha);
251+
Assert.False(tree.IsMissing);
252+
253+
var treeEntry1 = tree["1/"];
254+
var treeEntry2 = tree["1"];
255+
256+
Assert.NotNull(treeEntry1);
257+
Assert.NotNull(treeEntry1.Target);
258+
Assert.NotNull(treeEntry2);
259+
Assert.NotNull(treeEntry2.Target);
260+
261+
Assert.Equal(treeEntry1.Name, treeEntry2.Name);
262+
Assert.Equal(treeEntry1.TargetType, treeEntry2.TargetType);
263+
Assert.Equal(treeEntry1.Target.Sha, treeEntry2.Target.Sha);
264+
Assert.Equal(treeEntry1.Mode, treeEntry2.Mode);
265+
Assert.Equal(treeEntry1.Path, treeEntry2.Path);
266+
}
267+
}
268+
244269
[Fact]
245270
public void CanParseSymlinkTreeEntries()
246271
{

LibGit2Sharp/Tree.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,9 @@ private unsafe TreeEntry RetrieveFromPath(string relativePath)
6868
return null;
6969
}
7070

71-
string filename = relativePath.Split('/').Last();
72-
string parentPath = relativePath.Substring(0, relativePath.Length - filename.Length);
71+
string trimmed = relativePath.TrimEnd('/');
72+
string filename = trimmed.Split('/').Last();
73+
string parentPath = trimmed.Substring(0, trimmed.Length - filename.Length);
7374
return new TreeEntry(treeEntry, Id, repo, Tree.CombinePath(path, parentPath));
7475
}
7576
}

0 commit comments

Comments
 (0)