1 module deimos.git2.repository;
2 
3 import std.conv;
4 
5 import deimos.git2.buffer;
6 import deimos.git2.common;
7 import deimos.git2.buffer;
8 import deimos.git2.oid;
9 import deimos.git2.util;
10 import deimos.git2.types;
11 
12 extern (C):
13 
14 int git_repository_open(git_repository **out_, const(char)* path);
15 int git_repository_wrap_odb(git_repository **out_, git_odb *odb);
16 int git_repository_discover(
17 		git_buf* out_,
18 		const(char)* start_path,
19 		int across_fs,
20 		const(char)* ceiling_dirs);
21 
22 enum git_repository_open_flag_t {
23 	GIT_REPOSITORY_OPEN_NO_SEARCH = (1 << 0),
24 	GIT_REPOSITORY_OPEN_CROSS_FS  = (1 << 1),
25 	GIT_REPOSITORY_OPEN_BARE      = (1 << 2),
26 	GIT_REPOSITORY_OPEN_NO_DOTGIT = (1 << 3),
27 	GIT_REPOSITORY_OPEN_FROM_ENV  = (1 << 4),
28 }
29 mixin _ExportEnumMembers!git_repository_open_flag_t;
30 
31 int git_repository_open_ext(
32 	git_repository **out_,
33 	const(char)* path,
34 	uint flags,
35 	const(char)* ceiling_dirs);
36 int git_repository_open_bare(git_repository **out_, const(char)* bare_path);
37 void git_repository_free(git_repository *repo);
38 int git_repository_init(
39 	git_repository **out_,
40 	const(char)* path,
41 	uint is_bare);
42 
43 enum git_repository_init_flag_t {
44 	GIT_REPOSITORY_INIT_BARE              = (1u << 0),
45 	GIT_REPOSITORY_INIT_NO_REINIT         = (1u << 1),
46 	GIT_REPOSITORY_INIT_NO_DOTGIT_DIR     = (1u << 2),
47 	GIT_REPOSITORY_INIT_MKDIR             = (1u << 3),
48 	GIT_REPOSITORY_INIT_MKPATH            = (1u << 4),
49 	GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE = (1u << 5),
50 	GIT_REPOSITORY_INIT_RELATIVE_GITLINK  = (1u << 6),
51 }
52 mixin _ExportEnumMembers!git_repository_init_flag_t;
53 
54 enum git_repository_init_mode_t {
55 	GIT_REPOSITORY_INIT_SHARED_UMASK = octal!0,
56 	GIT_REPOSITORY_INIT_SHARED_GROUP = octal!2775,
57 	GIT_REPOSITORY_INIT_SHARED_ALL   = octal!2777,
58 }
59 mixin _ExportEnumMembers!git_repository_init_mode_t;
60 
61 struct git_repository_init_options {
62 	uint version_ = GIT_REPOSITORY_INIT_OPTIONS_VERSION;
63 	uint32_t    flags;
64 	uint32_t    mode;
65 	const(char)* workdir_path;
66 	const(char)* description;
67 	const(char)* template_path;
68 	const(char)* initial_head;
69 	const(char)* origin_url;
70 }
71 
72 enum GIT_REPOSITORY_INIT_OPTIONS_VERSION = 1;
73 enum git_repository_init_options GIT_REPOSITORY_INIT_OPTIONS_INIT = { GIT_REPOSITORY_INIT_OPTIONS_VERSION };
74 
75 int git_repository_init_init_options(
76 	git_repository_init_options* opts,
77 	uint version_);
78 int git_repository_init_ext(
79 	git_repository **out_,
80 	const(char)* repo_path,
81 	git_repository_init_options *opts);
82 int git_repository_head(git_reference **out_, git_repository *repo);
83 int git_repository_head_detached(git_repository *repo);
84 int git_repository_head_unborn(git_repository *repo);
85 int git_repository_is_empty(git_repository *repo);
86 const(char)*  git_repository_path(git_repository *repo);
87 const(char)*  git_repository_workdir(git_repository *repo);
88 int git_repository_set_workdir(
89 	git_repository *repo, const(char)* workdir, int update_gitlink);
90 int git_repository_is_bare(git_repository *repo);
91 int git_repository_config(git_config **out_, git_repository *repo);
92 int git_repository_config_snapshot(git_config **out_, git_repository *repo);
93 int git_repository_odb(git_odb **out_, git_repository *repo);
94 int git_repository_refdb(git_refdb **out_, git_repository *repo);
95 int git_repository_index(git_index **out_, git_repository *repo);
96 int git_repository_message(git_buf* out_, git_repository *repo);
97 int git_repository_message_remove(git_repository *repo);
98 int git_repository_state_cleanup(git_repository *repo);
99 
100 alias git_repository_fetchhead_foreach_cb = int function(const(char)* ref_name,
101 	const(char)* remote_url,
102 	const(git_oid)* oid,
103 	uint is_merge,
104 	void *payload);
105 
106 int git_repository_fetchhead_foreach(
107 	git_repository *repo,
108 	git_repository_fetchhead_foreach_cb callback,
109 	void *payload);
110 
111 alias git_repository_mergehead_foreach_cb = int function(const(git_oid)* oid,
112 	void *payload);
113 
114 int git_repository_mergehead_foreach(
115 	git_repository *repo,
116 	git_repository_mergehead_foreach_cb callback,
117 	void *payload);
118 int git_repository_hashfile(
119 	git_oid *out_,
120 	git_repository *repo,
121 	const(char)* path,
122 	git_otype type,
123 	const(char)* as_path);
124 int git_repository_set_head(
125 	git_repository* repo,
126 	const(char)* refname);
127 int git_repository_set_head_detached(
128 	git_repository* repo,
129 	const(git_oid)* commitish);
130 int git_repository_detach_head(
131 	git_repository* repo);
132 
133 enum git_repository_state_t {
134 	GIT_REPOSITORY_STATE_NONE,
135 	GIT_REPOSITORY_STATE_MERGE,
136 	GIT_REPOSITORY_STATE_REVERT,
137 	GIT_REPOSITORY_STATE_REVERT_SEQUENCE,
138 	GIT_REPOSITORY_STATE_CHERRYPICK,
139 	GIT_REPOSITORY_STATE_CHERRYPICK_SEQUENCE,
140 	GIT_REPOSITORY_STATE_BISECT,
141 	GIT_REPOSITORY_STATE_REBASE,
142 	GIT_REPOSITORY_STATE_REBASE_INTERACTIVE,
143 	GIT_REPOSITORY_STATE_REBASE_MERGE,
144 	GIT_REPOSITORY_STATE_APPLY_MAILBOX,
145 	GIT_REPOSITORY_STATE_APPLY_MAILBOX_OR_REBASE,
146 }
147 mixin _ExportEnumMembers!git_repository_state_t;
148 
149 int git_repository_state(git_repository *repo);
150 int git_repository_set_namespace(git_repository *repo, const(char)* nmspace);
151 const(char)*  git_repository_get_namespace(git_repository *repo);
152 int git_repository_is_shallow(git_repository *repo);
153 int git_repository_ident(const(char) **name, const(char) **email, const(git_repository)* repo);
154 int git_repository_set_ident(git_repository* repo, const(char)* name, const(char)* email);