I checked code in BlobFixture.cs and found some tests about reading file's contents like below.
using (var repo = new Repository(BareTestRepoPath))
{
var blob = repo.Lookup<Blob>("a8233120f6ad708f843d861ce2b7228ec4e3dec6");
var contentStream = blob.GetContentStream();
Assert.Equal(blob.Size, contentStream.Length);
using (var tr = new StreamReader(contentStream, Encoding.UTF8))
{
string content = tr.ReadToEnd();
Assert.Equal("hey there\n", content);
}
}
But I cannot find a test that getting file's contents based on file's name. Is it possible to do that, if so how?
Each Tree holds a collection of TreeEntry. A TreeEntry holds some metadata (name, mode, oid, ...) about a pointed at GitObject. The GitObject can be accessed through the Target property of a TreeEntry instance.
Most of the time, a TreeEntry will point to a Blob or another Tree.
The Tree type exposes an indexer which accepts a path to easily retrieve the finally pointed at TreeEntry. As a convenience method, the Commit exposes such an indexer as well.
Thus your code could be expressed this way.
using (var repo = new Repository(BareTestRepoPath))
{
var commit = repo.Lookup<Commit>("deadbeefcafe"); // or any other way to retreive a specific commit
var treeEntry = commit["path/to/my/file.txt");
Debug.Assert(treeEntry.TargetType == TreeEntryTargetType.Blob);
var blob = (Blob)treeEntry.Target;
var contentStream = blob.GetContentStream();
Assert.Equal(blob.Size, contentStream.Length);
using (var tr = new StreamReader(contentStream, Encoding.UTF8))
{
string content = tr.ReadToEnd();
Assert.Equal("hey there\n", content);
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With