merge: add an option to select how incomplete hunks are rendered - #88
Merged
Conversation
Commit 31de940 (merge: keep conflict markers on their own lines, #85) changed how conflict markers are rendered when a conflicting hunk ends in an incomplete line (one without a trailing newline), inserting a newline so that every marker starts at the beginning of a line. That matched the behavior of `git merge-file`, but silently diverged from GNU `diff3 -m`, which the diffutils manual documents as appending the succeeding markers directly to the incomplete line. With this commit, the behavior is now selectable via a new two-variant enum, `IncompleteHunkStyle`, on `MergeOptions`: * `Diff3` (the default) appends markers directly to the incomplete line, matching GNU `diff3 -m` and restoring the pre-#85 output. * `Git` inserts a newline after the incomplete line, matching `git merge-file`. Also add a table-driven test covering all eight permutations of the three inputs having or lacking a trailing newline, for both styles and for both the str and bytes paths. The expected outputs were verified against GNU diff3 3.12 and git 2.55.0: git produces byte-identical output for every permutation, while GNU diff3 glues each side's succeeding marker independently.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Commit 31de940 (merge: keep conflict markers on their own lines, #85) changed how conflict markers are rendered when a conflicting hunk ends in an incomplete line (one without a trailing newline), inserting a newline so that every marker starts at the beginning of a line. That matched the behavior of
git merge-file, but silently diverged from GNUdiff3 -m, which the diffutils manual documents as appending the succeeding markers directly to the incomplete line.With this commit, the behavior is now selectable via a new two-variant enum,
IncompleteHunkStyle, onMergeOptions:Diff3(the default) appends markers directly to the incomplete line, matching GNUdiff3 -mand restoring the pre-merge: keep conflict markers on their own lines when hunks lack a trailing newline #85 output.Gitinserts a newline after the incomplete line, matchinggit merge-file.Also add a table-driven test covering all eight permutations of the three inputs having or lacking a trailing newline, for both styles and for both the str and bytes paths. The expected outputs were verified against GNU diff3 3.12 and git 2.55.0: git produces byte-identical output for every permutation, while GNU diff3 glues each side's succeeding marker independently.