Download raw body.
[bug] histedit and the first line of a file
On Wed, Oct 06, 2021 at 01:40:39PM +0200, Stefan Sperling wrote:
> I would commit this fix to diff.git first, then sync the fix over
> to the got.git repository, then commit the new regression test.
Here is the patch for diff.git which also adds a regression test there.
(Note that some tests in this repository are failing right now, but this
new test is passing.)
-----------------------------------------------
commit 346d4986568ffbcfdc53cce45dd8a468535a68f2 (edscript-fix)
from: Stefan Sperling <stsp@stsp.name>
date: Wed Oct 6 13:15:54 2021 UTC
fix ed script diff output when lines are inserted at the top of a file
diff 1ab198fea9c75c1b49ebe370c9e3326752a7a13d 4115031b9257d36e202d7506028d6929731d6faf
blob - 1c9b6d17294abf78edffde84b7937856f2620bb1
blob + 42d4d5b39ef5a587321d90c1b95ef4f616e882b3
--- lib/diff_output_edscript.c
+++ lib/diff_output_edscript.c
@@ -45,8 +45,10 @@ output_edscript_chunk(struct diff_output_info *outinfo
left_start = 0;
else if (left_len == 0 && cc->left.start > 0)
left_start = cc->left.start;
- else
+ else if (cc->left.end > 0)
left_start = cc->left.start + 1;
+ else
+ left_start = cc->left.start;
right_len = cc->right.end - cc->right.start;
if (right_len < 0)
@@ -55,8 +57,10 @@ output_edscript_chunk(struct diff_output_info *outinfo
right_start = 0;
else if (right_len == 0 && cc->right.start > 0)
right_start = cc->right.start;
- else
+ else if (cc->right.end > 0)
right_start = cc->right.start + 1;
+ else
+ right_start = cc->right.start;
if (left_len == 0) {
/* addition */
blob - /dev/null
blob + 77d05518ee95a1b8a5a547e7f5748832184a11a9 (mode 644)
--- /dev/null
+++ test/expect123.diff
@@ -0,0 +1 @@
+0a1
blob - f63919e8521b511175d8086433d2fcee4164f4ad
blob + d8d3aa95464f45b8a21779276ef6a7de72e4c09f
--- test/verify_all.sh
+++ test/verify_all.sh
@@ -26,6 +26,13 @@ verify_diff_script() {
else
ignore_whitespace=""
fi
+
+ if echo -- $diff_opts | grep -q -- 'e'; then
+ is_edscript="true"
+ else
+ is_edscript=""
+ fi
+
verify_left="verify.$orig_left"
verify_right="verify.$orig_right"
@@ -36,7 +43,7 @@ verify_diff_script() {
return 1
fi
fi
- if [ -z "$ignore_whitespace" -a "x$diff_type" = "xunidiff" ]; then
+ if [ -z "$ignore_whitespace" -a -z "$is_edscript" -a "x$diff_type" = "xunidiff" ]; then
cp "$orig_left" "$verify_right"
$patch_prog --quiet -u "$verify_right" "$the_diff"
if ! cmp "$orig_right" "$verify_right" ; then
@@ -50,7 +57,7 @@ verify_diff_script() {
echo "FAIL: $orig_left != $verify_left" | tee -a errors
return 1
fi
- elif [ -z "$ignore_whitespace" ]; then
+ elif [ -z "$ignore_whitespace" -a -z "$is_edscript" ]; then
tail -n +3 "$the_diff" | grep -v "^+" | sed 's/^.//' > "$verify_left"
tail -n +3 "$the_diff" | grep -v "^-" | sed 's/^.//' > "$verify_right"
blob - /dev/null
blob + 4a58007052a65fbc2fc3f910f2855f45a4058e74 (mode 644)
--- /dev/null
+++ test/test123.left-e.txt
@@ -0,0 +1 @@
+alpha
blob - /dev/null
blob + 177941793e94106ed9b6d2bb98b3edb506f6e987 (mode 644)
--- /dev/null
+++ test/test123.right-e.txt
@@ -0,0 +1,2 @@
+first line
+alpha
[bug] histedit and the first line of a file