Commit Briefs

cd0adebad1 Stefan Sperling

update diff README; it was heavily outdated (main)


edc37d001a Omar Polo

fix some typos; ok tb@ stsp@


b5a9c15f4d Stefan Sperling

print trailing 'No newline at EOF' message for final chunk only

This makes test 126 pass.


35d0481840 Stefan Sperling

add a test which triggers redundant 'No newline at end of file' messages

The message appears after each hunk, but should only appear at the end of the entire diff. Regression introduced in commit 4125b1eff8d9dfcd961dc70ebbd5d54c97bdc3f6 "diff: handle missing new lines in trailing context" problem noticed by op@


dc306c6bd8 Stefan Sperling

back out "improve accuracy of function prototype in hunk headers"

which was commit 8993f42562696079866fc2dec7191877b6cc1f18 This commit introduced a regression where hunk headers would contain lines taken from below or within a change. Reported by tb@ and sthen@. There is some confusion around how the -p feature was documented: -p With unified and context diffs, show with each change the first 40 characters of the last line before the context beginning with a letter, an underscore or a dollar sign. For C source code following standard layout conventions, this will show the prototype of the function the change applies to. The original behaviour matches "the last line before the context beginning with a letter ...". The new (reverted) behaviour sometimes matches "will show the prototype of the function the change applies to". This did always happen as intended, as seen when some .c files in the OpenBSD src tree were changed. The new behaviour was also worse for Makefiles in the OpenBSD ports tree. Let's revert to the traditional -p behaviour until a better fix is found. Details: https://marc.gameoftrees.org/mail/1692696001.69872_0.html https://marc.info/?l=gameoftrees&m=169269624516330&w=2 ok tb@


f46fa9b5e7 Christian Weisgerber

do not treat \r\n line endings as special

Previously, we would go out of our way to handle both \n and \r\n line endings as equivalent. However, for files with \r\n line endings, this results in diffs that omit the final \r and therefore cannot be applied with patch(1) on Unix platforms. ok stsp


e78a8d73c2 Mark Jamsek

make diff_chunk_type() public and clarify comment

As discussed with stsp, reword an easily misunderstood comment, and move diff_chunk_type() into the public diff API to improve caller efficiency. ok stsp@


f26db7cd28 Mark Jamsek

add public APIs to enable chunk byte offset retrieval

Prompted by changes to conflict marker detection in got.git, add chunk offset getters for both left- and right-hand side files. This facilitates more efficient caller diff_result use by directly seeking to a given chunk rather than counting lines. ok stsp@


1dce05e8f9 Omar Polo

always cast ctype' is*() arguments to unsigned char

Almost all had already an unsigned argument (uint8_t or unsigned char), but cast anyway in case the types are changed in the future. ok stsp@



674563ab13 tj

Don't return errno when fread fails

fread doesn't consistently set errno on failure. - On OpenBSD fread sets errno on possible argument overflows, but this doesn't occur on other platforms. rfread doesn't set errno on EOF or other failures. - ferror does not set errno on failure. Returning errno here is possibly inconsistent. Return EIO here instead. ok stsp@


92698c5e98 tj

Remove duplicate definitions

ok op@


c737b93b77 tj

fread cannot return -1

fread returns a size_t and can never be -1. fread can signal parameter errors on some platforms, but this isn't portable. Remove this check and break out of the loop when fread returns 0. ok op@


4125b1eff8 tj

diff: handle missing new lines in trailing context

If there is a missing new line in the context we currently miss it and fail to print the warning. This trips up patch and leads to failures. Catch these cases in for unidiff output and add a test case. ok stsp@


9f5da0913a tj

diff: Add API for consumers to check if diff is printable

Programs using the libdiff API they can need to know if the diff contained anything that would be printed, or would be empty. Expose the same check that the output functions do as a function call. ok stsp@




8993f42562 Mark Jamsek

improve accuracy of function prototype in hunk headers

Initial diff by Tom Jones with fixes from stsp. ok stsp@


9230203d37 Stefan Sperling

fix updating of line-offsets output info in plain output mode

reviewed by tom jones



1f690ebe65 Mark Jamsek

sync files from got.git 336075a42a5ae0fa322db734c481d21998e82bb8

ok tb@


7a38b3a33f Mark Jamsek

fix build broken in previous commit 35eae7fa6b782ae1

Macro line was wrapped without continuation character. ok tb@


35eae7fa6b Mark Jamsek

remove gcc ternary if extension

ok stsp@


b1aa94aab8 Stefan Sperling

add support for classic diff(1) output; patch by Tom Jones


9343b92549 Mark Jamsek

collect line type metadata when generating diff

Similar to line offsets, create an array of line types (i.e., hunk, context, minus, plus) for each line output in the diff. ok stsp@