10#include "../helpers/Unique.h"
22 using GitTy = git_diff;
28 using PrintCB = std::function<int(
const git_diff_delta &delta,
const git_diff_hunk *hunk,
29 const git_diff_line &line)>;
34 const std::function<int(
const git_diff_delta &delta,
35 float progress)>
file =
nullptr;
37 const std::function<int(
const git_diff_delta &delta,
38 const git_diff_binary &bin)>
binary =
nullptr;
40 const std::function<int(
const git_diff_delta &delta,
43 const std::function<int(
const git_diff_delta &delta,
const git_diff_hunk &
hunk,
53 size_t numDeltas() const noexcept {
return git_diff_num_deltas(
diff()); }
55 size_t numDeltas(
const git_delta_t &type)
const noexcept {
56 return git_diff_num_deltas_of_type(
diff(), type);
59 const git_diff_delta *
getDelta(
size_t idx)
const noexcept {
60 return git_diff_get_delta(
diff(), idx);
69 bool findSimilar(
const git_diff_find_options *options =
nullptr) const noexcept {
70 return !git_diff_find_similar(
diff(), options);
91 std::optional<Buf>
toBuf(git_diff_format_t format)
const noexcept;
94 GitTy *
diff() const noexcept {
return m_diff.get(); }
96 operator GitTy *()
const noexcept {
return diff(); }
100 static int fileCB(
const git_diff_delta *delta,
float progress,
void *payload);
101 static int binaryCB(
const git_diff_delta *delta,
const git_diff_binary *binary,
103 static int hunkCB(
const git_diff_delta *delta,
const git_diff_hunk *hunk,
void *payload);
104 static int lineCB(
const git_diff_delta *delta,
const git_diff_hunk *hunk,
105 const git_diff_line *line,
void *payload);
106 static int printCB(
const git_diff_delta *delta,
const git_diff_hunk *hunk,
107 const git_diff_line *line,
void *payload);
Diff is a representation of a git diff.
Definition Diff.h:21
bool isSortedICase() const noexcept
Return true if ignore-case-sorted.
Definition Diff.h:74
GitTy * diff() const noexcept
Get the stored pointer to libgit2's git_diff.
Definition Diff.h:94
static std::optional< Diff > createFromBuffer(std::string_view buffer) noexcept
Create a new Diff from buffer.
const git_diff_delta * getDelta(size_t idx) const noexcept
Get a delta on the idx-th position.
Definition Diff.h:59
std::optional< Buf > toBuf(git_diff_format_t format) const noexcept
Convert to Buf.
int print(git_diff_format_t format, const PrintCB &printCB) const
Invoke forEachCB callbacks for each file, hunk, ... in the diff.
int forEach(const ForEachCB &forEachCB) const
Invoke forEachCB callbacks for each file, hunk, ... in the diff.
size_t numDeltas(const git_delta_t &type) const noexcept
Get count of deltas with the type (GIT_DELTA_ADDED, ...).
Definition Diff.h:55
std::function< int(const git_diff_delta &delta, const git_diff_hunk *hunk, const git_diff_line &line)> PrintCB
Callback for print().
Definition Diff.h:28
size_t numDeltas() const noexcept
Get count of deltas in this Diff.
Definition Diff.h:53
bool findSimilar(const git_diff_find_options *options=nullptr) const noexcept
Find similar files in the Diff (in-place).
Definition Diff.h:69
The most important Git class.
Definition Repo.h:45
Callbacks for forEach().
Definition Diff.h:32
const std::function< int(const git_diff_delta &delta, const git_diff_hunk &hunk, const git_diff_line &line)> line
Callback for each line.
Definition Diff.h:44
const std::function< int(const git_diff_delta &delta, const git_diff_binary &bin)> binary
Callback for each binary bin.
Definition Diff.h:38
const std::function< int(const git_diff_delta &delta, const git_diff_hunk &hunk)> hunk
Callback for each hunk.
Definition Diff.h:41
const std::function< int(const git_diff_delta &delta, float progress)> file
Callback for each file (old_file and new_file in delta).
Definition Diff.h:35
Wrapper around std::unique_ptr for easier re-definition of free.
Definition Unique.h:41