1 module deimos.git2.status;
2 
3 import deimos.git2.common;
4 import deimos.git2.diff;
5 import deimos.git2.strarray;
6 import deimos.git2.util;
7 import deimos.git2.types;
8 
9 extern (C):
10 
11 enum git_status_t {
12 	GIT_STATUS_CURRENT = 0,
13 
14 	GIT_STATUS_INDEX_NEW        = (1u << 0),
15 	GIT_STATUS_INDEX_MODIFIED   = (1u << 1),
16 	GIT_STATUS_INDEX_DELETED    = (1u << 2),
17 	GIT_STATUS_INDEX_RENAMED    = (1u << 3),
18 	GIT_STATUS_INDEX_TYPECHANGE = (1u << 4),
19 
20 	GIT_STATUS_WT_NEW           = (1u << 7),
21 	GIT_STATUS_WT_MODIFIED      = (1u << 8),
22 	GIT_STATUS_WT_DELETED       = (1u << 9),
23 	GIT_STATUS_WT_TYPECHANGE    = (1u << 10),
24 	GIT_STATUS_WT_RENAMED       = (1u << 11),
25 	GIT_STATUS_WT_UNREADABLE    = (1u << 12),
26 	GIT_STATUS_IGNORED          = (1u << 14),
27 	GIT_STATUS_CONFLICTED       = (1u << 15),
28 }
29 mixin _ExportEnumMembers!git_status_t;
30 
31 alias git_status_cb = int function(
32 	const(char)* path, uint status_flags, void *payload);
33 
34 enum git_status_show_t {
35 	GIT_STATUS_SHOW_INDEX_AND_WORKDIR = 0,
36 	GIT_STATUS_SHOW_INDEX_ONLY = 1,
37 	GIT_STATUS_SHOW_WORKDIR_ONLY = 2,
38 }
39 mixin _ExportEnumMembers!git_status_show_t;
40 
41 enum git_status_opt_t {
42     GIT_STATUS_OPT_INCLUDE_UNTRACKED               = (1u << 0),
43     GIT_STATUS_OPT_INCLUDE_IGNORED                 = (1u << 1),
44     GIT_STATUS_OPT_INCLUDE_UNMODIFIED              = (1u << 2),
45     GIT_STATUS_OPT_EXCLUDE_SUBMODULES              = (1u << 3),
46     GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS          = (1u << 4),
47     GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH          = (1u << 5),
48     GIT_STATUS_OPT_RECURSE_IGNORED_DIRS            = (1u << 6),
49     GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX           = (1u << 7),
50     GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR        = (1u << 8),
51     GIT_STATUS_OPT_SORT_CASE_SENSITIVELY           = (1u << 9),
52     GIT_STATUS_OPT_SORT_CASE_INSENSITIVELY         = (1u << 10),
53     GIT_STATUS_OPT_RENAMES_FROM_REWRITES           = (1u << 11),
54     GIT_STATUS_OPT_NO_REFRESH                      = (1u << 12),
55     GIT_STATUS_OPT_UPDATE_INDEX                    = (1u << 13),
56     GIT_STATUS_OPT_INCLUDE_UNREADABLE              = (1u << 14),
57     GIT_STATUS_OPT_INCLUDE_UNREADABLE_AS_UNTRACKED = (1u << 15),
58 }
59 mixin _ExportEnumMembers!git_status_opt_t;
60 
61 enum GIT_STATUS_OPT_DEFAULTS =
62 	(git_status_opt_t.GIT_STATUS_OPT_INCLUDE_IGNORED |
63 	git_status_opt_t.GIT_STATUS_OPT_INCLUDE_UNTRACKED |
64 	git_status_opt_t.GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS);
65 
66 struct git_status_options {
67 	uint      version_;
68 	git_status_show_t show;
69 	uint      flags;
70 	git_strarray      pathspec;
71 }
72 
73 enum GIT_STATUS_OPTIONS_VERSION = 1;
74 enum git_status_options GIT_STATUS_OPTIONS_INIT = { GIT_STATUS_OPTIONS_VERSION };
75 
76 struct git_status_entry {
77 	git_status_t status;
78 	git_diff_delta *head_to_index;
79 	git_diff_delta *index_to_workdir;
80 }
81 
82 int git_status_foreach(
83 	git_repository *repo,
84 	git_status_cb callback,
85 	void *payload);
86 int git_status_foreach_ext(
87 	git_repository *repo,
88 	const(git_status_options)* opts,
89 	git_status_cb callback,
90 	void *payload);
91 int git_status_file(
92 	uint *status_flags,
93 	git_repository *repo,
94 	const(char)* path);
95 int git_status_list_new(
96 	git_status_list **out_,
97 	git_repository *repo,
98 	const(git_status_options)* opts);
99 size_t git_status_list_entrycount(
100 	git_status_list *statuslist);
101 const(git_status_entry)*  git_status_byindex(
102 	git_status_list *statuslist,
103 	size_t idx);
104 void git_status_list_free(
105 	git_status_list *statuslist);
106 int git_status_should_ignore(
107 	int *ignored,
108 	git_repository *repo,
109 	const(char)* path);
110 int git_status_init_options(git_status_options *opts, uint version_);