1 module git2.index;
2 
3 import git2.common;
4 import git2.indexer;
5 import git2.oid;
6 import git2.strarray;
7 import git2.util;
8 import git2.types;
9 
10 extern (C):
11 
12 struct git_index_time {
13 	git_time_t seconds;
14 	uint nanoseconds;
15 }
16 
17 struct git_index_entry {
18 	git_index_time ctime;
19 	git_index_time mtime;
20 
21 	uint dev;
22 	uint ino;
23 	uint mode;
24 	uint uid;
25 	uint gid;
26 	git_off_t file_size;
27 
28 	git_oid oid;
29 
30 	ushort flags;
31 	ushort flags_extended;
32 
33 	char *path;
34 }
35 
36 enum GIT_IDXENTRY_NAMEMASK   = (0x0fff);
37 enum GIT_IDXENTRY_STAGEMASK  = (0x3000);
38 enum GIT_IDXENTRY_EXTENDED   = (0x4000);
39 enum GIT_IDXENTRY_VALID      = (0x8000);
40 enum GIT_IDXENTRY_STAGESHIFT = 12;
41 
42 auto GIT_IDXENTRY_STAGE(T)(T E) { return (((E).flags & GIT_IDXENTRY_STAGEMASK) >> GIT_IDXENTRY_STAGESHIFT); }
43 
44 enum GIT_IDXENTRY_INTENT_TO_ADD     = (1 << 13);
45 enum GIT_IDXENTRY_SKIP_WORKTREE     = (1 << 14);
46 enum GIT_IDXENTRY_EXTENDED2         = (1 << 15);
47 enum GIT_IDXENTRY_EXTENDED_FLAGS = (GIT_IDXENTRY_INTENT_TO_ADD | GIT_IDXENTRY_SKIP_WORKTREE);
48 
49 enum GIT_IDXENTRY_UPDATE            = (1 << 0);
50 enum GIT_IDXENTRY_REMOVE            = (1 << 1);
51 enum GIT_IDXENTRY_UPTODATE          = (1 << 2);
52 enum GIT_IDXENTRY_ADDED             = (1 << 3);
53 
54 enum GIT_IDXENTRY_HASHED            = (1 << 4);
55 enum GIT_IDXENTRY_UNHASHED          = (1 << 5);
56 enum GIT_IDXENTRY_WT_REMOVE         = (1 << 6);
57 enum GIT_IDXENTRY_CONFLICTED        = (1 << 7);
58 
59 enum GIT_IDXENTRY_UNPACKED          = (1 << 8);
60 enum GIT_IDXENTRY_NEW_SKIP_WORKTREE = (1 << 9);
61 
62 enum git_indexcap_t {
63 	GIT_INDEXCAP_IGNORE_CASE = 1,
64 	GIT_INDEXCAP_NO_FILEMODE = 2,
65 	GIT_INDEXCAP_NO_SYMLINKS = 4,
66 	GIT_INDEXCAP_FROM_OWNER  = ~0u
67 }
68 mixin _ExportEnumMembers!git_indexcap_t;
69 
70 alias git_index_matched_path_cb = int function(
71 	const(char)* path, const(char)* matched_pathspec, void *payload);
72 
73 enum git_index_add_option_t {
74 	GIT_INDEX_ADD_DEFAULT = 0,
75 	GIT_INDEX_ADD_FORCE = (1u << 0),
76 	GIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH = (1u << 1),
77 	GIT_INDEX_ADD_CHECK_PATHSPEC = (1u << 2),
78 }
79 mixin _ExportEnumMembers!git_index_add_option_t;
80 
81 int git_index_open(git_index **out_, const(char)* index_path);
82 int git_index_new(git_index **out_);
83 void git_index_free(git_index *index);
84 git_repository * git_index_owner(const(git_index)* index);
85 uint git_index_caps(const(git_index)* index);
86 int git_index_set_caps(git_index *index, uint caps);
87 int git_index_read(git_index *index);
88 int git_index_write(git_index *index);
89 int git_index_read_tree(git_index *index, const(git_tree)* tree);
90 int git_index_write_tree(git_oid *out_, git_index *index);
91 int git_index_write_tree_to(git_oid *out_, git_index *index, git_repository *repo);
92 size_t git_index_entrycount(const(git_index)* index);
93 void git_index_clear(git_index *index);
94 const(git_index_entry)*  git_index_get_byindex(
95 	git_index *index, size_t n);
96 const(git_index_entry)*  git_index_get_bypath(
97 	git_index *index, const(char)* path, int stage);
98 int git_index_remove(git_index *index, const(char)* path, int stage);
99 int git_index_remove_directory(
100 	git_index *index, const(char)* dir, int stage);
101 int git_index_add(git_index *index, const(git_index_entry)* source_entry);
102 int git_index_entry_stage(const(git_index_entry)* entry);
103 int git_index_add_bypath(git_index *index, const(char)* path);
104 int git_index_remove_bypath(git_index *index, const(char)* path);
105 int git_index_add_all(
106 	git_index *index,
107 	const(git_strarray)* pathspec,
108 	uint flags,
109 	git_index_matched_path_cb callback,
110 	void *payload);
111 int git_index_remove_all(
112 	git_index *index,
113 	const(git_strarray)* pathspec,
114 	git_index_matched_path_cb callback,
115 	void *payload);
116 int git_index_update_all(
117 	git_index *index,
118 	const(git_strarray)* pathspec,
119 	git_index_matched_path_cb callback,
120 	void *payload);
121 int git_index_find(size_t *at_pos, git_index *index, const(char)* path);
122 int git_index_conflict_add(
123 	git_index *index,
124 	const(git_index_entry)* ancestor_entry,
125 	const(git_index_entry)* our_entry,
126 	const(git_index_entry)* their_entry);
127 int git_index_conflict_get(
128 	const(git_index_entry)** ancestor_out,
129 	const(git_index_entry)** our_out,
130 	const(git_index_entry)** their_out,
131 	git_index *index,
132 	const(char)* path);
133 int git_index_conflict_remove(git_index *index, const(char)* path);
134 void git_index_conflict_cleanup(git_index *index);
135 int git_index_has_conflicts(const(git_index)* index);
136 int git_index_conflict_iterator_new(
137 	git_index_conflict_iterator **iterator_out,
138 	git_index *index);
139 int git_index_conflict_next(
140 	const(git_index_entry)** ancestor_out,
141 	const(git_index_entry)** our_out,
142 	const(git_index_entry)** their_out,
143 	git_index_conflict_iterator *iterator);
144 void git_index_conflict_iterator_free(
145 	git_index_conflict_iterator *iterator);