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,
50 static std::optional<Diff>
createFromBuffer(std::string_view buffer) noexcept;
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);
81 int forEach(
const ForEachCB &forEachCB)
const;
88 int print(git_diff_format_t format,
const PrintCB &printCB)
const;
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);
bool findSimilar(const git_diff_find_options *options=nullptr) const noexcept
Find similar files in the Diff (in-place)
Definition: Diff.h:69
GitTy * diff() const noexcept
Get the stored pointer to libgit2's git_diff.
Definition: Diff.h:94
int print(git_diff_format_t format, const PrintCB &printCB) const
Invoke forEachCB callbacks for each file, hunk, ... in the diff.
static std::optional< Diff > createFromBuffer(std::string_view buffer) noexcept
Create a new Diff from buffer.
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
size_t numDeltas() const noexcept
Get count of deltas in this Diff.
Definition: Diff.h:53
std::optional< Buf > toBuf(git_diff_format_t format) const noexcept
Convert to Buf.
The most important Git class.
Definition: Repo.h:45
const git_diff_delta * getDelta(size_t idx) const noexcept
Get a delta on the idx-th position.
Definition: Diff.h:59
bool isSortedICase() const noexcept
Return true if ignore-case-sorted.
Definition: Diff.h:74
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
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:29
const std::function< int(const git_diff_delta &delta, const git_diff_binary &bin)> binary
Callback for each binary bin.
Definition: Diff.h:38
size_t numDeltas(const git_delta_t &type) const noexcept
Get count of deltas with the type (GIT_DELTA_ADDED, ...)
Definition: Diff.h:55
Callbacks for forEach()
Definition: Diff.h:32
int forEach(const ForEachCB &forEachCB) const
Invoke forEachCB callbacks for each file, hunk, ... in the diff.
const std::function< int(const git_diff_delta &delta, const git_diff_hunk &hunk)> hunk
Callback for each hunk.
Definition: Diff.h:41
Diff is a representation of a git diff.
Definition: Diff.h:21