12int GitTextDiff::print_diff_file(
const git_diff_delta* delta,
float,
void* payload) {
18 std::string old_file =
"--- a/";
19 old_file += delta->old_file.path;
22 std::string new_file =
"+++ b/";
23 new_file += delta->new_file.path;
26 data->
output->write(old_file.data(), old_file.size());
27 data->output->write(new_file.data(), new_file.size());
32int GitTextDiff::print_diff_hunk(
const git_diff_delta*,
const git_diff_hunk* hunk,
void* payload) {
40 std::string header(hunk->header, hunk->header_len);
43 data->output->write(header.data(), header.size());
48int GitTextDiff::print_diff_line(
49 const git_diff_delta* ,
50 const git_diff_hunk* ,
51 const git_diff_line* line,
57 if (!data->output || line->content_len <= 0) {
62 std::string output_line;
63 std::string content(line->content, line->content_len);
65 switch (line->origin) {
66 case GIT_DIFF_LINE_ADDITION:
69 case GIT_DIFF_LINE_DELETION:
72 case GIT_DIFF_LINE_CONTEXT:
73 output_line = std::string(
" ") + content;
76 output_line = content;
85 data->output->write(output_line.data(), output_line.size());
90 std::string_view first_text,
91 std::string_view first_name,
92 std::string_view second_text,
93 std::string_view second_name,
98 git_diff_options diff_options = GIT_DIFF_OPTIONS_INIT;
102 int error = git_diff_buffers(
110 &GitTextDiff::print_diff_file,
112 &GitTextDiff::print_diff_hunk,
113 &GitTextDiff::print_diff_line,
117 git_libgit2_shutdown();
121 .has_difference = payload.printed,
static DiffResult compare(std::string_view first_text, std::string_view first_name, std::string_view second_text, std::string_view second_name, std::ostream &output)