Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
58b2547
Make patch arguments more extensible in apply_patch()
kerneltoast Oct 17, 2025
97296d1
Simplify original file creation in output_delta()
kerneltoast Oct 31, 2025
1a5dd85
Exclude newline character from colorized output
kerneltoast Nov 14, 2025
3a6e39d
Fix content skipping for patch2 in index_patch_generic()
kerneltoast Nov 14, 2025
a196af6
Implement an advanced fuzzy diffing feature for interdiff
kerneltoast Feb 19, 2026
797ffec
interdiff: Fix incorrect base file direction in fuzzy mode
kerneltoast Dec 2, 2025
f2d0bb4
interdiff: Fix bogus hunk removal in split_patch_hunks()
kerneltoast Dec 2, 2025
9059013
interdiff: Use -N on patch all the time
kerneltoast Jan 24, 2026
4f507d0
interdiff: Begin fixing the direction of delta differences in fuzzy mode
kerneltoast Dec 23, 2025
89544e4
interdiff: Fix hunk lookup to use actual applied position, not adjust…
kerneltoast Jan 16, 2026
0a30eff
interdiff: Stop modifying file strings in-place
kerneltoast Jan 24, 2026
1702c79
interdiff: Add run_diff() helper function
kerneltoast Feb 4, 2026
9fafcd9
interdiff: Add skip_header_lines() helper function
kerneltoast Feb 21, 2026
ac04fa3
interdiff: Separate delta and context differences in fuzzy mode
kerneltoast Feb 21, 2026
e199650
interdiff: Show files only in one patch under fuzzy mode headers
kerneltoast Feb 21, 2026
8c7e18b
interdiff: Filter spurious edge lines from context differences
kerneltoast Feb 21, 2026
7df90d1
interdiff: Add get_fuzz() helper function
kerneltoast Feb 19, 2026
f1cbb06
interdiff: Fix crash in ctx_lookahead() on trailing "+" lines
kerneltoast Feb 23, 2026
9ade8a2
interdiff: Fix split hunk context imbalance causing patch rejections
kerneltoast Feb 24, 2026
abc4b53
Rename README.md to README
kerneltoast Feb 21, 2026
4f6f12f
Update README build instructions and add testing section
kerneltoast Feb 21, 2026
626b7ec
interdiff: Handle '\ No newline' markers in split_patch_hunks
kerneltoast Feb 24, 2026
2c2f30d
interdiff: Fix newline stripping for reverted patches in create_orig
kerneltoast Feb 24, 2026
4793d24
interdiff: Skip fuzzy processing for file creations and deletions
kerneltoast Feb 24, 2026
edded43
interdiff: Suppress false 'doesn't contain a patch' for non-diff patches
kerneltoast Feb 24, 2026
70404ee
tests: Add fuzzy mode tests for interdiff
kerneltoast Feb 24, 2026
24c5b45
tests: Add stress-test script for fuzzy mode
kerneltoast Feb 24, 2026
b0090af
interdiff: Fix memory leak of parsed filename on early exit
kerneltoast Feb 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,21 @@ TESTS = tests/newline1/run-test \
tests/git-deleted-file/run-test \
tests/git-pure-rename/run-test \
tests/git-diff-edge-cases/run-test \
tests/malformed-diff-headers/run-test
tests/malformed-diff-headers/run-test \
tests/fuzzy1/run-test \
tests/fuzzy2/run-test \
tests/fuzzy3/run-test \
tests/fuzzy4/run-test \
tests/fuzzy5/run-test \
tests/fuzzy6/run-test \
tests/fuzzy7/run-test \
tests/fuzzy8/run-test \
tests/fuzzy9/run-test \
tests/fuzzy10/run-test \
tests/fuzzy11/run-test \
tests/fuzzy12/run-test \
tests/fuzzy13/run-test \
tests/fuzzy14/run-test

# Scanner tests (only when scanner-patchfilter is enabled)
if USE_SCANNER_PATCHFILTER
Expand Down
54 changes: 47 additions & 7 deletions README.md → README
Original file line number Diff line number Diff line change
Expand Up @@ -57,20 +57,60 @@ Patchutils is a small collection of programs that operate on patch files. It pro

- **svndiff** / **svndiffview** - Subversion-specific diff viewing tools.

## Installation

Patchutils uses the standard GNU autotools build system:
## Building from the Git repository

```bash
./gnulib-update.sh
./bootstrap
./configure
make
make -j$(nproc)
```

The `gnulib-update.sh` and `./bootstrap` steps are only needed once
(or when `configure.ac` / `Makefile.am` change). After that, just
`./configure && make` is sufficient.

This requires **automake**, **autoconf**, and **gnulib-devel** to be
installed on your system.

## Installation

```bash
make install
```

## Building from the Git repository
## Testing

```bash
make check
```

Run a single test:

```bash
make check TESTS=tests/addhunk1/run-test
```

### Stress-testing fuzzy mode

The `tests/stress-test-fuzzy.sh` script mass-tests `interdiff --fuzzy`
by comparing every commit in a git range against itself. Since both
inputs are identical, any output from interdiff indicates a bug. This
is effective against any git repository, but large repositories like
the Linux kernel are particularly useful because they exercise a wide
variety of patch shapes: hunks at line 1 with no pre-context, files
ending without a newline, file creations and deletions, mode-only
changes, multi-thousand-line diffs, whitespace-damaged patches, hunks
with duplicate context lines, and so on.

```bash
INTERDIFF=./src/interdiff ./tests/stress-test-fuzzy.sh /path/to/linux v2.6.12-rc2..v6.19
```

After cloning the source from GitHub, run `./bootstrap` to generate the `configure` script.
This step requires **automake**, **autoconf**, and **gnulib-devel** to be installed on your system.
Only commits that produce non-empty output, a non-zero exit code, or a
timeout are printed. The `JOBS`, `TIMEOUT`, and `INTERDIFF` environment
variables can be used to tune parallelism, per-commit timeout (default
30s), and the interdiff binary path respectively.

## Requirements

Expand Down
Loading