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 }