1 module git2.status;
2 
3 import git2.common;
4 import git2.diff;
5 import git2.strarray;
6 import git2.util;
7 import 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 
26 	GIT_STATUS_IGNORED          = (1u << 14),
27 }
28 mixin _ExportEnumMembers!git_status_t;
29 
30 alias git_status_cb = int function(
31 	const(char)* path, uint status_flags, void *payload);
32 
33 enum git_status_show_t {
34 	GIT_STATUS_SHOW_INDEX_AND_WORKDIR = 0,
35 	GIT_STATUS_SHOW_INDEX_ONLY = 1,
36 	GIT_STATUS_SHOW_WORKDIR_ONLY = 2,
37 	GIT_STATUS_SHOW_INDEX_THEN_WORKDIR = 3,
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 }
54 mixin _ExportEnumMembers!git_status_opt_t;
55 
56 enum GIT_STATUS_OPT_DEFAULTS =
57 	(git_status_opt_t.GIT_STATUS_OPT_INCLUDE_IGNORED |
58 	git_status_opt_t.GIT_STATUS_OPT_INCLUDE_UNTRACKED |
59 	git_status_opt_t.GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS);
60 
61 struct git_status_options {
62 	uint      version_;
63 	git_status_show_t show;
64 	uint      flags;
65 	git_strarray      pathspec;
66 }
67 
68 enum GIT_STATUS_OPTIONS_VERSION = 1;
69 enum git_status_options GIT_STATUS_OPTIONS_INIT = { GIT_STATUS_OPTIONS_VERSION };
70 
71 struct git_status_entry {
72 	git_status_t status;
73 	git_diff_delta *head_to_index;
74 	git_diff_delta *index_to_workdir;
75 }
76 
77 int git_status_foreach(
78 	git_repository *repo,
79 	git_status_cb callback,
80 	void *payload);
81 int git_status_foreach_ext(
82 	git_repository *repo,
83 	const(git_status_options)* opts,
84 	git_status_cb callback,
85 	void *payload);
86 int git_status_file(
87 	uint *status_flags,
88 	git_repository *repo,
89 	const(char)* path);
90 int git_status_list_new(
91 	git_status_list **out_,
92 	git_repository *repo,
93 	const(git_status_options)* opts);
94 size_t git_status_list_entrycount(
95 	git_status_list *statuslist);
96 const(git_status_entry)*  git_status_byindex(
97 	git_status_list *statuslist,
98 	size_t idx);
99 void git_status_list_free(
100 	git_status_list *statuslist);
101 int git_status_should_ignore(
102 	int *ignored,
103 	git_repository *repo,
104 	const(char)* path);