rc tools patch: skip patch message signature, fixing diff application

Patches as produced by "git format-patch" have a trailing signature
that is separated from the body by a line with "-- " on it.  By default
it contains the Git version.  We erroneously include this signature
in the diff we pipe to patch, which fails to apply as a result.

Add a targeted fix to suppress these signatures.
This commit is contained in:
Johannes Altmanninger 2024-01-25 00:57:00 +01:00 committed by Maxime Coste
parent c7eeb0ead5
commit 11e7e2964c
5 changed files with 48 additions and 2 deletions

View File

@ -25,6 +25,8 @@ my $state = undef;
my $hunk_wheat = undef;
my $hunk_chaff = undef;
my $hunk_header = undef;
my $hunk_remaining_lines = undef;
my $signature = "";
sub compute_hunk_header {
my $original_header = shift;
@ -48,7 +50,7 @@ sub finish_hunk {
}
$wheat .= (compute_hunk_header $hunk_header, $hunk_wheat). $hunk_wheat;
}
$chaff .= (compute_hunk_header $hunk_header, $hunk_chaff) . $hunk_chaff;
$chaff .= (compute_hunk_header $hunk_header, $hunk_chaff) . $hunk_chaff . $signature;
$hunk_header = undef;
}
@ -60,12 +62,18 @@ while (<STDIN>) {
$state = "diff header";
$diff_header = "";
}
if (m{^@@}) {
if ($state eq "signature") {
$signature .= $_;
next;
}
if (m{^@@ -\d+(?:,(\d)+)? \+\d+(?:,\d+)? @@}) {
$hunk_remaining_lines = $1 or 1;
finish_hunk();
$state = "diff hunk";
$hunk_header = $_;
$hunk_wheat = "";
$hunk_chaff = "";
$signature = "";
next;
}
if ($state eq "diff header") {
@ -73,6 +81,12 @@ while (<STDIN>) {
$chaff .= $_;
next;
}
if ($hunk_remaining_lines == 0 and m{^-- $}) {
$state = "signature";
$signature .= $_;
next;
}
--$hunk_remaining_lines if m{^[ -]};
my $include = m{^ } || ($lineno >= $min_line && $lineno <= $max_line);
if ($include) {
$hunk_wheat .= $_;

View File

@ -0,0 +1 @@
%:patch tee applied.diff<ret><ret>!echo Applied:; cat applied.diff; echo; echo Updated buffer:<ret>

View File

@ -0,0 +1,10 @@
diff -ur a/file1 b/file1
--- a/file1
+++ b/file1
@@ -1,3 +1,3 @@
context
-file1 here
+modified file1 here
context
--
2.43.0

View File

@ -0,0 +1,20 @@
Applied:
diff -ur a/file1 b/file1
--- a/file1
+++ b/file1
@@ -1,3 +1,3 @@
context
-file1 here
+modified file1 here
context
Updated buffer:
diff -ur a/file1 b/file1
--- a/file1
+++ b/file1
@@ -1,3 +1,3 @@
context
modified file1 here
context
--
2.43.0

View File

@ -0,0 +1 @@
source "%val{runtime}/rc/tools/patch.kak"