mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-10 00:49:33 +00:00
93 lines
2.2 KiB
C
93 lines
2.2 KiB
C
/*
|
|
* 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_diff_output_h__
|
|
#define INCLUDE_diff_output_h__
|
|
|
|
#include "git2/blob.h"
|
|
#include "diff.h"
|
|
#include "map.h"
|
|
#include "xdiff/xdiff.h"
|
|
|
|
#define MAX_DIFF_FILESIZE 0x20000000
|
|
|
|
enum {
|
|
GIT_DIFF_PATCH_ALLOCATED = (1 << 0),
|
|
GIT_DIFF_PATCH_PREPPED = (1 << 1),
|
|
GIT_DIFF_PATCH_LOADED = (1 << 2),
|
|
GIT_DIFF_PATCH_DIFFABLE = (1 << 3),
|
|
GIT_DIFF_PATCH_DIFFED = (1 << 4),
|
|
};
|
|
|
|
/* context for performing diffs */
|
|
typedef struct {
|
|
git_repository *repo;
|
|
git_diff_list *diff;
|
|
const git_diff_options *opts;
|
|
git_diff_file_cb file_cb;
|
|
git_diff_hunk_cb hunk_cb;
|
|
git_diff_data_cb data_cb;
|
|
void *payload;
|
|
int error;
|
|
git_diff_range range;
|
|
xdemitconf_t xdiff_config;
|
|
xpparam_t xdiff_params;
|
|
} diff_context;
|
|
|
|
/* cached information about a single span in a diff */
|
|
typedef struct diff_patch_line diff_patch_line;
|
|
struct diff_patch_line {
|
|
const char *ptr;
|
|
size_t len;
|
|
int lines, oldno, newno;
|
|
char origin;
|
|
};
|
|
|
|
/* cached information about a hunk in a diff */
|
|
typedef struct diff_patch_hunk diff_patch_hunk;
|
|
struct diff_patch_hunk {
|
|
git_diff_range range;
|
|
char header[128];
|
|
size_t header_len;
|
|
size_t line_start;
|
|
size_t line_count;
|
|
};
|
|
|
|
struct git_diff_patch {
|
|
git_refcount rc;
|
|
git_diff_list *diff; /* for refcount purposes, maybe NULL for blob diffs */
|
|
git_diff_delta *delta;
|
|
diff_context *ctxt; /* only valid while generating patch */
|
|
git_iterator_type_t old_src;
|
|
git_iterator_type_t new_src;
|
|
git_blob *old_blob;
|
|
git_blob *new_blob;
|
|
git_map old_data;
|
|
git_map new_data;
|
|
uint32_t flags;
|
|
diff_patch_hunk *hunks;
|
|
size_t hunks_asize, hunks_size;
|
|
diff_patch_line *lines;
|
|
size_t lines_asize, lines_size;
|
|
};
|
|
|
|
/* context for performing diff on a single delta */
|
|
typedef struct {
|
|
git_diff_patch *patch;
|
|
uint32_t prepped : 1;
|
|
uint32_t loaded : 1;
|
|
uint32_t diffable : 1;
|
|
uint32_t diffed : 1;
|
|
} diff_delta_context;
|
|
|
|
extern int git_diff__paired_foreach(
|
|
git_diff_list *idx2head,
|
|
git_diff_list *wd2idx,
|
|
int (*cb)(git_diff_delta *i2h, git_diff_delta *w2i, void *payload),
|
|
void *payload);
|
|
|
|
#endif
|