merge_file.h 1.49 KB
Newer Older
Edward Thomson committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/*
 * Copyright (C) the libgit2 contributors. All rights reserved.
 *
 * This file is part of libgit2, distributed under the GNU GPL v2 with
 * a Linking Exception. For full terms see the included COPYING file.
 */
#ifndef INCLUDE_filediff_h__
#define INCLUDE_filediff_h__

#include "xdiff/xdiff.h"

#include "git2/merge.h"

typedef struct {
	const char *label;
	char *path;
	unsigned int mode;
	mmfile_t mmfile;
nulltoken committed
19

Edward Thomson committed
20 21 22 23 24 25 26
	git_odb_object *odb_object;
} git_merge_file_input;

#define GIT_MERGE_FILE_INPUT_INIT	{0}

typedef struct {
	bool automergeable;
nulltoken committed
27

Edward Thomson committed
28 29
	const char *path;
	int mode;
nulltoken committed
30

Edward Thomson committed
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
	unsigned char *data;
	size_t len;
} git_merge_file_result;

#define GIT_MERGE_FILE_RESULT_INIT	{0}

int git_merge_file_input_from_index_entry(
	git_merge_file_input *input,
	git_repository *repo,
	const git_index_entry *entry);

int git_merge_file_input_from_diff_file(
	git_merge_file_input *input,
	git_repository *repo,
	const git_diff_file *file);

int git_merge_files(
	git_merge_file_result *out,
	git_merge_file_input *ancestor,
	git_merge_file_input *ours,
	git_merge_file_input *theirs,
	git_merge_automerge_flags flags);

GIT_INLINE(void) git_merge_file_input_free(git_merge_file_input *input)
{
	assert(input);
	git__free(input->path);
	git_odb_object_free(input->odb_object);
}

GIT_INLINE(void) git_merge_file_result_free(git_merge_file_result *filediff)
{
	if (filediff == NULL)
		return;

	/* xdiff uses malloc() not git_malloc, so we use free(), not git_free() */
	if (filediff->data != NULL)
		free(filediff->data);
}

#endif