LibDiff: Handle parsing patches containing timestamps separated by \t

This is still a very naive implementation and there are plenty of other
cases that we should handle (like a quoted path) - but just looking for
a tab handles the common case.
This commit is contained in:
Shannon Booth 2024-03-02 21:49:50 +13:00 committed by Andreas Kling
parent 3e3a200eee
commit 3e61d20b40
2 changed files with 19 additions and 1 deletions

View file

@ -261,3 +261,18 @@ TEST_CASE(patch_remove_file_trailing_garbage)
EXPECT_FILE_EQ(ByteString::formatted("{}/a", s_test_dir), "2\n"sv);
}
TEST_CASE(patch_with_timestamp_separated_by_tab)
{
PatchSetup setup;
auto patch = R"(
--- /dev/null 2024-03-02 20:19:31.462146900 +1300
+++ 1 2024-03-02 20:56:57.922136203 +1300
@@ -0,0 +1 @@
+a
)"sv;
run_patch(ExpectSuccess::Yes, {}, patch, "patching file 1\n"sv);
EXPECT_FILE_EQ(ByteString::formatted("{}/1", s_test_dir), "a\n"sv);
}

View file

@ -61,7 +61,10 @@ bool Parser::consume_line_number(size_t& number)
ErrorOr<String> Parser::parse_file_line(Optional<size_t> const& strip_count)
{
// FIXME: handle parsing timestamps as well.
auto path = consume_line();
auto line = consume_line();
GenericLexer line_parser(line);
auto path = line_parser.consume_until('\t');
// No strip count given. Default to basename of file.
if (!strip_count.has_value())