public void CanGetFilteredContentInBareRepo() { ObjectId id = new ObjectId("799770d1cff46753a57db7a066159b5610da6e3a"); BlobFilterOptions options = new BlobFilterOptions() { Flags = BlobFilterFlags.CheckForBinary | BlobFilterFlags.NoSystemAttributes | BlobFilterFlags.AttributesFromHead }; using (Repository repo = SandboxRepository("crlf.git")) using (Blob b = repo.Objects.Lookup <Blob>(id)) { using (GitBuffer buf = b.GetFilteredContent("file.bin", options)) { Assert.Equal(15, buf.Length); Assert.True(buf.Content.SequenceEqual(new ReadOnlySpan <byte>(new byte[] { 0x6c, 0x66, 0x0a, 0x6c, 0x66, 0x0a, 0x6c, 0x66, 0x0a, 0x6c, 0x66, 0x0a, 0x6c, 0x66, 0x0a }))); Assert.Equal(15, buf.Content.Length); } using (GitBuffer buf = b.GetFilteredContent("file.crlf", options)) { Assert.Equal(20, buf.Length); Assert.True(buf.Content.SequenceEqual(new ReadOnlySpan <byte>(new byte[] { 0x6c, 0x66, 0x0d, 0x0a, 0x6c, 0x66, 0x0d, 0x0a, 0x6c, 0x66, 0x0d, 0x0a, 0x6c, 0x66, 0x0d, 0x0a, 0x6c, 0x66, 0x0d, 0x0a }))); Assert.Equal(20, buf.Content.Length); } using (GitBuffer buf = b.GetFilteredContent("file.lf", options)) { Assert.Equal(15, buf.Length); Assert.True(buf.Content.SequenceEqual(new ReadOnlySpan <byte>(new byte[] { 0x6c, 0x66, 0x0a, 0x6c, 0x66, 0x0a, 0x6c, 0x66, 0x0a, 0x6c, 0x66, 0x0a, 0x6c, 0x66, 0x0a }))); Assert.Equal(15, buf.Content.Length); } } }
public void CanFilterBufferToOdbInBareRepository() { var id = new ObjectId("799770d1cff46753a57db7a066159b5610da6e3a"); var flags = FilterFlags.NoSystemAttributes | FilterFlags.AttributesFromHead; var blobFilterOptions = new BlobFilterOptions(); blobFilterOptions.Flags = BlobFilterFlags.NoSystemAttributes | BlobFilterFlags.AttributesFromHead; using (Repository repo = SandboxRepository("crlf.git")) using (Blob b = repo.Objects.Lookup <Blob>(id)) using (FilterList cleanFilter = repo.LoadFilterList(b, "file.crlf", FilterMode.ToObjectDatabase, flags)) { using (GitBuffer inputBuffer = b.GetFilteredContent("file.crlf", blobFilterOptions)) { Assert.Equal(20, inputBuffer.Length); Assert.True(inputBuffer.Content.SequenceEqual(new ReadOnlySpan <byte>(new byte[] { 0x6c, 0x66, 0x0d, 0x0a, 0x6c, 0x66, 0x0d, 0x0a, 0x6c, 0x66, 0x0d, 0x0a, 0x6c, 0x66, 0x0d, 0x0a, 0x6c, 0x66, 0x0d, 0x0a }))); Assert.Equal(20, inputBuffer.Content.Length); // No filtering is configured using (GitBuffer outputBuffer = cleanFilter.Apply(inputBuffer)) { Assert.Equal(15, outputBuffer.Length); Assert.True(outputBuffer.Content.SequenceEqual(new ReadOnlySpan <byte>(new byte[] { 0x6c, 0x66, 0x0a, 0x6c, 0x66, 0x0a, 0x6c, 0x66, 0x0a, 0x6c, 0x66, 0x0a, 0x6c, 0x66, 0x0a }))); Assert.Equal(15, outputBuffer.Content.Length); } } } }
public unsafe GitBuffer GetFilteredContent(string path, BlobFilterOptions options) { Ensure.ArgumentNotNull(path, "path"); Ensure.ArgumentNotNull(options, "options"); GitBuffer buf = new GitBuffer(); git_buf nativeBuffer = buf.NativeBuffer; Ensure.NativeSuccess(() => { git_blob_filter_options nativeOptions = options.ToNative(); return(libgit2.git_blob_filter(nativeBuffer, NativeBlob, path, &nativeOptions)); }, this); return(buf); }