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