1 /* 2 * Copyright Sönke Ludwig 2014. 3 * Distributed under the Boost Software License, Version 1.0. 4 * (See accompanying file LICENSE_1_0.txt or copy at 5 * http://www.boost.org/LICENSE_1_0.txt) 6 */ 7 module git.blob; 8 9 import git.commit; 10 import git.oid; 11 import git.repository; 12 import git.types; 13 import git.util; 14 import git.version_; 15 16 import deimos.git2.blob; 17 import deimos.git2.errors; 18 import deimos.git2.types; 19 20 import std.conv : to; 21 import std..string : toStringz; 22 23 24 GitBlob lookupBlob(GitRepo repo, GitOid oid) 25 { 26 git_blob* ret; 27 require(git_blob_lookup(&ret, repo.cHandle, &oid._get_oid()) == 0); 28 return GitBlob(repo, ret); 29 } 30 31 GitBlob lookupBlobPrefix(GitRepo repo, GitOid oid, size_t oid_length) 32 { 33 git_blob* ret; 34 require(git_blob_lookup_prefix(&ret, repo.cHandle, &oid._get_oid(), oid_length) == 0); 35 return GitBlob(repo, ret); 36 } 37 38 GitOid createBlob(GitRepo repo, in ubyte[] buffer) 39 { 40 GitOid ret; 41 require(git_blob_create_frombuffer(&ret._get_oid(), repo.cHandle, buffer.ptr, buffer.length) == 0); 42 return ret; 43 } 44 45 /*GitOid createBlob(R)(GitRepo repo, R input_range) 46 if (isInputRange!R) 47 { 48 alias git_blob_chunk_cb = int function(char *content, size_t max_length, void *payload); 49 int git_blob_create_fromchunks( 50 git_oid *id, 51 git_repository *repo, 52 const(char)* hintpath, 53 git_blob_chunk_cb callback, 54 void *payload); 55 56 }*/ 57 58 GitOid createBlobFromWorkDir(GitRepo repo, string relative_path) 59 { 60 GitOid ret; 61 require(git_blob_create_fromworkdir(&ret._get_oid(), repo.cHandle, relative_path.toStringz()) == 0); 62 return ret; 63 } 64 65 GitOid createBlobFromDisk(GitRepo repo, string path) 66 { 67 GitOid ret; 68 require(git_blob_create_fromdisk(&ret._get_oid(), repo.cHandle, path.toStringz()) == 0); 69 return ret; 70 } 71 72 73 struct GitBlob { 74 package this(GitRepo repo, git_blob* blob) 75 { 76 _repo = repo; 77 _data = Data(blob); 78 } 79 80 @property GitRepo owner() { return _repo; } 81 @property GitOid id() { return GitOid(*git_blob_id(this.cHandle)); } 82 83 @property const(ubyte)[] rawContent() 84 { 85 auto ptr = git_blob_rawcontent(this.cHandle); 86 auto length = git_blob_rawsize(this.cHandle); 87 return cast(const(ubyte)[])ptr[0 .. length]; 88 } 89 90 @property bool isBinary() { return requireBool(git_blob_is_binary(this.cHandle)); } 91 92 /*ubyte[] getFilteredContent() 93 { 94 int git_blob_filtered_content(git_buf *out_, git_blob *blob, const(char)* as_path, int check_for_binary_data); 95 }*/ 96 97 mixin RefCountedGitObject!(git_blob, git_blob_free); 98 private GitRepo _repo; 99 }