1 module deimos.git2.checkout;
2 
3 import deimos.git2.common;
4 import deimos.git2.diff;
5 import deimos.git2.strarray;
6 import deimos.git2.types;
7 import deimos.git2.util;
8 
9 extern (C):
10 
11 enum git_checkout_strategy_t {
12 	GIT_CHECKOUT_NONE = 0,
13 	GIT_CHECKOUT_SAFE = (1u << 0),
14 	GIT_CHECKOUT_FORCE = (1u << 1),
15 	GIT_CHECKOUT_RECREATE_MISSING = (1u << 2),
16 	GIT_CHECKOUT_ALLOW_CONFLICTS = (1u << 4),
17 	GIT_CHECKOUT_REMOVE_UNTRACKED = (1u << 5),
18 	GIT_CHECKOUT_REMOVE_IGNORED = (1u << 6),
19 	GIT_CHECKOUT_UPDATE_ONLY = (1u << 7),
20 	GIT_CHECKOUT_DONT_UPDATE_INDEX = (1u << 8),
21 	GIT_CHECKOUT_NO_REFRESH = (1u << 9),
22 	GIT_CHECKOUT_SKIP_UNMERGED = (1u << 10),
23 	GIT_CHECKOUT_USE_OURS = (1u << 11),
24 	GIT_CHECKOUT_USE_THEIRS = (1u << 12),
25 	GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH = (1u << 13),
26 	GIT_CHECKOUT_SKIP_LOCKED_DIRECTORIES = (1u << 18),
27 	GIT_CHECKOUT_DONT_OVERWRITE_IGNORED = (1u << 19),
28 	GIT_CHECKOUT_CONFLICT_STYLE_MERGE = (1u << 20),
29 	GIT_CHECKOUT_CONFLICT_STYLE_DIFF3 = (1u << 21),
30 	GIT_CHECKOUT_DONT_REMOVE_EXISTING = (1u << 22),
31     GIT_CHECKOUT_DONT_WRITE_INDEX = (1u << 23),
32 	GIT_CHECKOUT_UPDATE_SUBMODULES = (1u << 16),
33 	GIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED = (1u << 17),
34 }
35 mixin _ExportEnumMembers!git_checkout_strategy_t;
36 
37 enum git_checkout_notify_t {
38 	GIT_CHECKOUT_NOTIFY_NONE      = 0,
39 	GIT_CHECKOUT_NOTIFY_CONFLICT  = (1u << 0),
40 	GIT_CHECKOUT_NOTIFY_DIRTY     = (1u << 1),
41 	GIT_CHECKOUT_NOTIFY_UPDATED   = (1u << 2),
42 	GIT_CHECKOUT_NOTIFY_UNTRACKED = (1u << 3),
43 	GIT_CHECKOUT_NOTIFY_IGNORED   = (1u << 4),
44 
45 	GIT_CHECKOUT_NOTIFY_ALL       = 0x0FFFFu
46 }
47 mixin _ExportEnumMembers!git_checkout_notify_t;
48 
49 struct git_checkout_perfdata {
50     size_t mkdir_calls;
51     size_t stat_calls;
52     size_t chmod_calls;
53 }
54 
55 alias git_checkout_notify_cb = int function(
56 	git_checkout_notify_t why,
57 	const(char)* path,
58 	const(git_diff_file)* baseline,
59 	const(git_diff_file)* target,
60 	const(git_diff_file)* workdir,
61 	void *payload);
62 
63 alias git_checkout_perfdata_cb = void function(
64 	const(git_checkout_perfdata)* perfdata,
65 	void *payload
66 );
67 
68 alias git_checkout_progress_cb = void function(
69 	const(char)* path,
70 	size_t completed_steps,
71 	size_t total_steps,
72 	void *payload);
73 
74 struct git_checkout_options {
75 	uint version_ = GIT_CHECKOUT_OPTIONS_VERSION;
76 
77 	uint checkout_strategy;
78 
79 	int disable_filters;
80 	uint dir_mode;
81 	uint file_mode;
82 	int file_open_flags;
83 	uint notify_flags;
84 	git_checkout_notify_cb notify_cb;
85 	void *notify_payload;
86 	git_checkout_progress_cb progress_cb;
87 	void *progress_payload;
88 	git_strarray paths;
89 	git_tree *baseline;
90 	git_index *baseline_index;
91 
92 	const(char)* target_directory;
93 
94 	const(char)* ancestor_label;
95 	const(char)* our_label;
96 	const(char)* their_label;
97 
98 	git_checkout_perfdata_cb perfdata_cb;
99 	void *perfdata_payload;
100 }
101 
102 enum GIT_CHECKOUT_OPTIONS_VERSION = 1;
103 enum git_checkout_options GIT_CHECKOUT_OPTIONS_INIT = { GIT_CHECKOUT_OPTIONS_VERSION };
104 
105 int git_checkout_init_options(
106 	git_checkout_options *opts,
107 	uint version_);
108 int git_checkout_head(
109 	git_repository *repo,
110 	const(git_checkout_options)* opts);
111 int git_checkout_index(
112 	git_repository *repo,
113 	git_index *index,
114 	const(git_checkout_options)* opts);
115 int git_checkout_tree(
116 	git_repository *repo,
117 	const(git_object)* treeish,
118 	const(git_checkout_options)* opts);