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