From 8c8b24d877ea640b756f3e911a5e013ca0a476d3 Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Mon, 3 Jul 2023 18:08:35 +1200 Subject: [PATCH] diff: Add support for writing diffs in context format --- Userland/Utilities/diff.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Userland/Utilities/diff.cpp b/Userland/Utilities/diff.cpp index d8fa733294..41d1bf1220 100644 --- a/Userland/Utilities/diff.cpp +++ b/Userland/Utilities/diff.cpp @@ -20,12 +20,14 @@ ErrorOr serenity_main(Main::Arguments arguments) Core::ArgsParser parser; bool unified = false; + bool context = false; StringView filename1; StringView filename2; parser.add_positional_argument(filename1, "First file to compare", "file1", Core::ArgsParser::Required::Yes); parser.add_positional_argument(filename2, "Second file to compare", "file2", Core::ArgsParser::Required::Yes); parser.add_option(unified, "Write diff in unified format", nullptr, 'u'); + parser.add_option(context, "Write diff in context format", nullptr, 'c'); parser.parse(arguments); auto file1 = TRY(Core::File::open(filename1, Core::File::OpenMode::Read)); @@ -34,13 +36,17 @@ ErrorOr serenity_main(Main::Arguments arguments) auto const color_output = TRY(Core::System::isatty(STDOUT_FILENO)) ? Diff::ColorOutput::Yes : Diff::ColorOutput::No; - size_t context = unified ? 3 : 0; - auto hunks = TRY(Diff::from_text(TRY(file1->read_until_eof()), TRY(file2->read_until_eof()), context)); + size_t number_context_lines = unified || context ? 3 : 0; + auto hunks = TRY(Diff::from_text(TRY(file1->read_until_eof()), TRY(file2->read_until_eof()), number_context_lines)); if (unified) { TRY(Diff::write_unified_header(filename1, filename2, *out)); for (auto const& hunk : hunks) TRY(Diff::write_unified(hunk, *out, color_output)); + } else if (context) { + TRY(Diff::write_context_header(filename1, filename2, *out)); + for (auto const& hunk : hunks) + TRY(Diff::write_context(hunk, *out, color_output)); } else { for (auto const& hunk : hunks) TRY(Diff::write_normal(hunk, *out, color_output));