2 * Copyright (C) the libgit2 contributors. All rights reserved.
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.
7 #ifndef INCLUDE_merge_driver_h__
8 #define INCLUDE_merge_driver_h__
10 #include "git2/merge.h"
11 #include "git2/index.h"
12 #include "git2/sys/merge.h"
14 struct git_merge_driver_source
{
16 const char *default_driver
;
17 const git_merge_file_options
*file_opts
;
19 const git_index_entry
*ancestor
;
20 const git_index_entry
*ours
;
21 const git_index_entry
*theirs
;
24 typedef struct git_merge_driver__builtin
{
25 git_merge_driver base
;
26 git_merge_file_favor_t favor
;
27 } git_merge_driver__builtin
;
29 extern int git_merge_driver_global_init(void);
31 extern int git_merge_driver_for_path(
33 git_merge_driver
**driver_out
,
37 /* Merge driver configuration */
38 extern int git_merge_driver_for_source(
39 const char **name_out
,
40 git_merge_driver
**driver_out
,
41 const git_merge_driver_source
*src
);
43 extern int git_merge_driver__builtin_apply(
44 git_merge_driver
*self
,
45 const char **path_out
,
48 const char *filter_name
,
49 const git_merge_driver_source
*src
);
51 /* Merge driver for text files, performs a standard three-way merge */
52 extern git_merge_driver__builtin git_merge_driver__text
;
54 /* Merge driver for union-style merging */
55 extern git_merge_driver__builtin git_merge_driver__union
;
57 /* Merge driver for unmergeable (binary) files: always produces conflicts */
58 extern git_merge_driver git_merge_driver__binary
;