6

I have decided to try and migrate my project from using GitSharp to LibGit2Sharp since GitSharp is no longer actively maintained. With GitSharp I was able to access the raw bytes of any file checked into my repo given a branch. I cannot locate any documentation or example code of how this is done using LibGit2Sharp.

Can someone give me and example of how this is done?

Nick
  • 19,198
  • 51
  • 185
  • 312

1 Answers1

3

The Blob type exposes a Content property that returns a byte[].

The following test in extracted from the BlobFixture.cs file and demonstrates usage of this property.

[Test]
public void CanReadBlobContent()
{
    using (var repo = new Repository(BareTestRepoPath))
    {
        var blob = repo.Lookup<Blob>("a8233120f6ad708f843d861ce2b7228ec4e3dec6");
        byte[] bytes = blob.Content;
        bytes.Length.ShouldEqual(10);

        string content = Encoding.UTF8.GetString(bytes);
        content.ShouldEqual("hey there\n");
    }
}

In this particular test, the Blob GitObject is directly retrieved through the LookUp() method. You can also access Blobs from the Files property of a Tree.

Regarding your more specific request, the following unit test should show you how to access the raw bytes of a Blob from the tip of a Branch.

[Test]
public void CanRetrieveABlobContentFromTheTipOfABranch()
{
    using (var repo = new Repository(BareTestRepoPath))
    {
        Branch branch = repo.Branches["br2"];
        Commit tip = branch.Tip;
        Blob blob = (Blob)tip["README"].Target;
        byte[] content = blob.Content;

        content.Length.ShouldEqual(10);
    }
}

Note: This test shows another way of accessing a Blob (as an abstract TreeEntry). Thus, the use of the cast.

nulltoken
  • 64,429
  • 20
  • 138
  • 130