-
-
Notifications
You must be signed in to change notification settings - Fork 214
Closed
Description
Describe the bug
Diff cannot be applied with git apply
To Reproduce
- original content
const world: string = 'world',
p: number | undefined = 42;
console.log(`Hello, ${world}!`);- new content
const world: string = 'world';
const p: number | undefined = 42;
console.log(`Hello, ${world}!`);- code to create diff (Kotlin)
/**
* @param contextSize
* How many lines of context around each changed line should be included.
*/
class DiffFactory(private val contextSize: Int) {
companion object {
private const val LINE_SEPARATOR = "\n"
}
/**
* Creates a git-apply compatible diff.
*/
fun computeDiff(
filename: String,
originalContent: String,
newContent: String
): String = UnifiedDiffUtils.generateUnifiedDiff(
"a/$filename", // a/ and b/ required for git-apply compatibility
"b/$filename",
originalContent.split(LINE_SEPARATOR),
DiffUtils.diff(
originalContent, newContent,
NullDiffAlgorithmListener
),
contextSize
).joinToString(LINE_SEPARATOR)
}- With
contextSize = 3the following diff gets created:
--- a/examples/unchain-variable-declaration.js
+++ b/examples/unchain-variable-declaration.js
@@ -1,5 +1,5 @@
-const world: string = 'world',
- p: number | undefined = 42;
+const world: string = 'world';
+const p: number | undefined = 42;
console.log(`Hello, ${world}!`);
(important: line with 1 space at the end - I've also added an empty newline to support git apply call from file instead of system in)
5. git apply fails
> git apply example.diff
error: patch failed: examples/unchain-variable-declaration.js:1
error: examples/unchain-variable-declaration.js: patch does not apply
Expected behavior
Git apply works with the following patch:
--- a/examples/unchain-variable-declaration.js
+++ b/examples/unchain-variable-declaration.js
@@ -1,4 +1,4 @@
-const world: string = 'world',
- p: number | undefined = 42;
+const world: string = 'world';
+const p: number | undefined = 42;
console.log(`Hello, ${world}!`);
The difference is that the index is limited to 1,4 (original input is 4 lines long).
System
- Kotlin 1.4
Metadata
Metadata
Assignees
Labels
No labels