mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-07 14:15:54 +00:00

Ensure that `git_patch_from_diff` can return the patch for parsed diffs, not just generate a patch for a generated diff.
69 lines
1.9 KiB
C
69 lines
1.9 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_patch_generate_h__
|
|
#define INCLUDE_patch_generate_h__
|
|
|
|
#include "common.h"
|
|
#include "diff.h"
|
|
#include "diff_file.h"
|
|
#include "patch.h"
|
|
|
|
enum {
|
|
GIT_PATCH_GENERATED_ALLOCATED = (1 << 0),
|
|
GIT_PATCH_GENERATED_INITIALIZED = (1 << 1),
|
|
GIT_PATCH_GENERATED_LOADED = (1 << 2),
|
|
/* the two sides are different */
|
|
GIT_PATCH_GENERATED_DIFFABLE = (1 << 3),
|
|
/* the difference between the two sides has been computed */
|
|
GIT_PATCH_GENERATED_DIFFED = (1 << 4),
|
|
GIT_PATCH_GENERATED_FLATTENED = (1 << 5),
|
|
};
|
|
|
|
struct git_patch_generated {
|
|
struct git_patch base;
|
|
|
|
git_diff *diff; /* for refcount purposes, maybe NULL for blob diffs */
|
|
size_t delta_index;
|
|
git_diff_file_content ofile;
|
|
git_diff_file_content nfile;
|
|
uint32_t flags;
|
|
git_pool flattened;
|
|
};
|
|
|
|
typedef struct git_patch_generated git_patch_generated;
|
|
|
|
extern git_diff_driver *git_patch_generated_driver(git_patch_generated *);
|
|
|
|
extern void git_patch_generated_old_data(
|
|
char **, size_t *, git_patch_generated *);
|
|
extern void git_patch_generated_new_data(
|
|
char **, size_t *, git_patch_generated *);
|
|
extern int git_patch_generated_from_diff(
|
|
git_patch **, git_diff *, size_t);
|
|
|
|
typedef struct git_patch_generated_output git_patch_generated_output;
|
|
|
|
struct git_patch_generated_output {
|
|
/* these callbacks are issued with the diff data */
|
|
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;
|
|
|
|
/* this records the actual error in cases where it may be obscured */
|
|
int error;
|
|
|
|
/* this callback is used to do the diff and drive the other callbacks.
|
|
* see diff_xdiff.h for how to use this in practice for now.
|
|
*/
|
|
int (*diff_cb)(git_patch_generated_output *output,
|
|
git_patch_generated *patch);
|
|
};
|
|
|
|
#endif
|