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__
12 #include "git2/merge.h"
13 #include "git2/index.h"
14 #include "git2/sys/merge.h"
16 struct git_merge_driver_source
{
18 const char *default_driver
;
19 const git_merge_file_options
*file_opts
;
21 const git_index_entry
*ancestor
;
22 const git_index_entry
*ours
;
23 const git_index_entry
*theirs
;
26 typedef struct git_merge_driver__builtin
{
27 git_merge_driver base
;
28 git_merge_file_favor_t favor
;
29 } git_merge_driver__builtin
;
31 extern int git_merge_driver_global_init(void);
33 extern int git_merge_driver_for_path(
35 git_merge_driver
**driver_out
,
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
);
45 extern int git_merge_driver__builtin_apply(
46 git_merge_driver
*self
,
47 const char **path_out
,
50 const char *filter_name
,
51 const git_merge_driver_source
*src
);
53 /* Merge driver for text files, performs a standard three-way merge */
54 extern git_merge_driver__builtin git_merge_driver__text
;
56 /* Merge driver for union-style merging */
57 extern git_merge_driver__builtin git_merge_driver__union
;
59 /* Merge driver for unmergeable (binary) files: always produces conflicts */
60 extern git_merge_driver git_merge_driver__binary
;