#ifndef INCLUDE_diff_patch_h__
#define INCLUDE_diff_patch_h__
#include "common.h"
#include "diff.h"
#include "diff_file.h"
#include "array.h"
#include "git2/patch.h"
typedef
struct
diff_patch_hunk {
git_diff_hunk hunk;
size_t
line_start;
size_t
line_count;
} diff_patch_hunk;
enum
{
GIT_DIFF_PATCH_ALLOCATED = (1 << 0),
GIT_DIFF_PATCH_INITIALIZED = (1 << 1),
GIT_DIFF_PATCH_LOADED = (1 << 2),
GIT_DIFF_PATCH_DIFFABLE = (1 << 3),
GIT_DIFF_PATCH_DIFFED = (1 << 4),
GIT_DIFF_PATCH_FLATTENED = (1 << 5),
};
struct
git_patch {
git_refcount rc;
git_diff *diff;
git_diff_options diff_opts;
git_diff_delta *delta;
size_t
delta_index;
git_diff_file_content ofile;
git_diff_file_content nfile;
uint32_t flags;
git_diff_binary binary;
git_array_t(diff_patch_hunk) hunks;
git_array_t(git_diff_line) lines;
size_t
content_size, context_size, header_size;
git_pool flattened;
};
extern
git_diff *git_patch__diff(git_patch *);
extern
git_diff_driver *git_patch__driver(git_patch *);
extern
void
git_patch__old_data(
char
**,
size_t
*, git_patch *);
extern
void
git_patch__new_data(
char
**,
size_t
*, git_patch *);
extern
int
git_patch__invoke_callbacks(
git_patch *patch,
git_diff_file_cb file_cb,
git_diff_binary_cb binary_cb,
git_diff_hunk_cb hunk_cb,
git_diff_line_cb line_cb,
void
*payload);
typedef
struct
git_diff_output git_diff_output;
struct
git_diff_output {
git_diff_file_cb file_cb;
git_diff_binary_cb binary_cb;
git_diff_hunk_cb hunk_cb;
git_diff_line_cb data_cb;
void
*payload;
int
error;
int
(*diff_cb)(git_diff_output *output, git_patch *patch);
};
#endif