1 /*
2  * Copyright (C) the libgit2 contributors. All rights reserved.
3  *
4  * This file is part of libgit2, distributed under the GNU GPL v2 with
5  * a Linking Exception. For full terms see the included COPYING file.
6  */
7 #ifndef INCLUDE_merge_driver_h__
8 #define INCLUDE_merge_driver_h__
9 
10 #include "common.h"
11 
12 #include "git2/merge.h"
13 #include "git2/index.h"
14 #include "git2/sys/merge.h"
15 
16 struct git_merge_driver_source {
17 	git_repository *repo;
18 	const char *default_driver;
19 	const git_merge_file_options *file_opts;
20 
21 	const git_index_entry *ancestor;
22 	const git_index_entry *ours;
23 	const git_index_entry *theirs;
24 };
25 
26 typedef struct git_merge_driver__builtin {
27 	git_merge_driver base;
28 	git_merge_file_favor_t favor;
29 } git_merge_driver__builtin;
30 
31 extern int git_merge_driver_global_init(void);
32 
33 extern int git_merge_driver_for_path(
34 	char **name_out,
35 	git_merge_driver **driver_out,
36 	git_repository *repo,
37 	const char *path);
38 
39 /* Merge driver configuration */
40 extern int git_merge_driver_for_source(
41 	const char **name_out,
42 	git_merge_driver **driver_out,
43 	const git_merge_driver_source *src);
44 
45 extern int git_merge_driver__builtin_apply(
46 	git_merge_driver *self,
47 	const char **path_out,
48 	uint32_t *mode_out,
49 	git_buf *merged_out,
50 	const char *filter_name,
51 	const git_merge_driver_source *src);
52 
53 /* Merge driver for text files, performs a standard three-way merge */
54 extern git_merge_driver__builtin git_merge_driver__text;
55 
56 /* Merge driver for union-style merging */
57 extern git_merge_driver__builtin git_merge_driver__union;
58 
59 /* Merge driver for unmergeable (binary) files: always produces conflicts */
60 extern git_merge_driver git_merge_driver__binary;
61 
62 #endif
63