Files
Charlie Marsh 21aa552e87 Add a line-ending preservation mode to apply_patch (#37757)
## Why

Updating a file with `apply_patch` historically normalized its contents to LF,
which can rewrite line endings outside the requested change.

## What changed

- Add an opt-in `PreserveLineEndings` update mode and thread it through patch
  verification, application, and the standalone executable. Existing APIs keep
  the LF-normalizing mode by default.
- Retain the original endings of untouched and context lines, including in
  mixed-ending files, and use the file's first line ending for inserted or
  replaced lines.
- Track patch context separately from identical changed lines so preservation
  does not alter replacement ordering or matching.

## Testing

Add coverage for CRLF, CR, mixed endings, trailing blank lines, repeated lines,
EOF overlap rejection, and legacy LF normalization.

GitOrigin-RevId: 085f0cbc57e0965aa62c6a2d0e80870424e762f5
2026-08-10 01:39:55 +00:00
..

Overview

This directory is a collection of end to end tests for the apply-patch specification, meant to be easily portable to other languages or platforms.

Specification

Each test case is one directory, composed of input state (input/), the patch operation (patch.txt), and the expected final state (expected/). This structure is designed to keep tests simple (i.e. test exactly one patch at a time) while still providing enough flexibility to test any given operation across files.

Here's what this would look like for a simple test apply-patch test case to create a new file:

001_add/
  input/
    foo.md
  expected/
    foo.md
    bar.md
  patch.txt