]> git.ipfire.org Git - thirdparty/git.git/blob - unpack-trees.h
unpack-trees: split display_error_msgs() into two
[thirdparty/git.git] / unpack-trees.h
1 #ifndef UNPACK_TREES_H
2 #define UNPACK_TREES_H
3
4 #include "cache.h"
5 #include "argv-array.h"
6 #include "string-list.h"
7 #include "tree-walk.h"
8
9 #define MAX_UNPACK_TREES MAX_TRAVERSE_TREES
10
11 struct cache_entry;
12 struct unpack_trees_options;
13 struct pattern_list;
14
15 typedef int (*merge_fn_t)(const struct cache_entry * const *src,
16 struct unpack_trees_options *options);
17
18 enum unpack_trees_error_types {
19 ERROR_WOULD_OVERWRITE = 0,
20 ERROR_NOT_UPTODATE_FILE,
21 ERROR_NOT_UPTODATE_DIR,
22 ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN,
23 ERROR_WOULD_LOSE_UNTRACKED_REMOVED,
24 ERROR_BIND_OVERLAP,
25 ERROR_WOULD_LOSE_SUBMODULE,
26
27 NB_UNPACK_TREES_ERROR_TYPES,
28
29 WARNING_SPARSE_NOT_UPTODATE_FILE,
30 WARNING_SPARSE_ORPHANED_NOT_OVERWRITTEN,
31
32 NB_UNPACK_TREES_WARNING_TYPES,
33 };
34
35 /*
36 * Sets the list of user-friendly error messages to be used by the
37 * command "cmd" (either merge or checkout), and show_all_errors to 1.
38 */
39 void setup_unpack_trees_porcelain(struct unpack_trees_options *opts,
40 const char *cmd);
41
42 /*
43 * Frees resources allocated by setup_unpack_trees_porcelain().
44 */
45 void clear_unpack_trees_porcelain(struct unpack_trees_options *opts);
46
47 struct unpack_trees_options {
48 unsigned int reset,
49 merge,
50 update,
51 clone,
52 index_only,
53 nontrivial_merge,
54 trivial_merges_only,
55 verbose_update,
56 aggressive,
57 skip_unmerged,
58 initial_checkout,
59 diff_index_cached,
60 debug_unpack,
61 skip_sparse_checkout,
62 quiet,
63 exiting_early,
64 show_all_errors,
65 dry_run;
66 const char *prefix;
67 int cache_bottom;
68 struct dir_struct *dir;
69 struct pathspec *pathspec;
70 merge_fn_t fn;
71 const char *msgs[NB_UNPACK_TREES_WARNING_TYPES];
72 struct argv_array msgs_to_free;
73 /*
74 * Store error messages in an array, each case
75 * corresponding to a error message type
76 */
77 struct string_list unpack_rejects[NB_UNPACK_TREES_WARNING_TYPES];
78
79 int head_idx;
80 int merge_size;
81
82 struct cache_entry *df_conflict_entry;
83 void *unpack_data;
84
85 struct index_state *dst_index;
86 struct index_state *src_index;
87 struct index_state result;
88
89 struct pattern_list *pl; /* for internal use */
90 };
91
92 int unpack_trees(unsigned n, struct tree_desc *t,
93 struct unpack_trees_options *options);
94
95 enum update_sparsity_result {
96 UPDATE_SPARSITY_SUCCESS = 0,
97 UPDATE_SPARSITY_WARNINGS = 1,
98 UPDATE_SPARSITY_INDEX_UPDATE_FAILURES = -1,
99 UPDATE_SPARSITY_WORKTREE_UPDATE_FAILURES = -2
100 };
101
102 enum update_sparsity_result update_sparsity(struct unpack_trees_options *options);
103
104 int verify_uptodate(const struct cache_entry *ce,
105 struct unpack_trees_options *o);
106
107 int threeway_merge(const struct cache_entry * const *stages,
108 struct unpack_trees_options *o);
109 int twoway_merge(const struct cache_entry * const *src,
110 struct unpack_trees_options *o);
111 int bind_merge(const struct cache_entry * const *src,
112 struct unpack_trees_options *o);
113 int oneway_merge(const struct cache_entry * const *src,
114 struct unpack_trees_options *o);
115
116 #endif