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_SAFE_CREATE = (1u << 1),
15 	GIT_CHECKOUT_FORCE = (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_UPDATE_SUBMODULES = (1u << 16),
28 	GIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED = (1u << 17),
29 }
30 mixin _ExportEnumMembers!git_checkout_strategy_t;
31 
32 enum git_checkout_notify_t {
33 	GIT_CHECKOUT_NOTIFY_NONE      = 0,
34 	GIT_CHECKOUT_NOTIFY_CONFLICT  = (1u << 0),
35 	GIT_CHECKOUT_NOTIFY_DIRTY     = (1u << 1),
36 	GIT_CHECKOUT_NOTIFY_UPDATED   = (1u << 2),
37 	GIT_CHECKOUT_NOTIFY_UNTRACKED = (1u << 3),
38 	GIT_CHECKOUT_NOTIFY_IGNORED   = (1u << 4),
39 
40 	GIT_CHECKOUT_NOTIFY_ALL       = 0x0FFFFu
41 }
42 mixin _ExportEnumMembers!git_checkout_notify_t;
43 
44 alias git_checkout_notify_cb = int function(
45 	git_checkout_notify_t why,
46 	const(char)* path,
47 	const(git_diff_file)* baseline,
48 	const(git_diff_file)* target,
49 	const(git_diff_file)* workdir,
50 	void *payload);
51 
52 alias git_checkout_progress_cb = void function(
53 	const(char)* path,
54 	size_t completed_steps,
55 	size_t total_steps,
56 	void *payload);
57 
58 struct git_checkout_opts {
59 	uint version_ = GIT_CHECKOUT_OPTS_VERSION;
60 
61 	uint checkout_strategy;
62 
63 	int disable_filters;
64 	uint dir_mode;
65 	uint file_mode;
66 	int file_open_flags;
67 	uint notify_flags;
68 	git_checkout_notify_cb notify_cb;
69 	void *notify_payload;
70 	git_checkout_progress_cb progress_cb;
71 	void *progress_payload;
72 	git_strarray paths;
73 	git_tree *baseline;
74 	const(char)* target_directory;
75 	const(char)* our_label;
76 	const(char)* their_label;
77 }
78 
79 enum GIT_CHECKOUT_OPTS_VERSION = 1;
80 enum git_checkout_opts GIT_CHECKOUT_OPTS_INIT = { GIT_CHECKOUT_OPTS_VERSION };
81 
82 int git_checkout_head(
83 	git_repository *repo,
84 	const(git_checkout_opts)* opts);
85 int git_checkout_index(
86 	git_repository *repo,
87 	git_index *index,
88 	const(git_checkout_opts)* opts);
89 int git_checkout_tree(
90 	git_repository *repo,
91 	const(git_object)* treeish,
92 	const(git_checkout_opts)* opts);