This repository has been archived by the owner on Aug 5, 2024. It is now read-only.
Open
Description
Hello,
I am looking to utilize this fantastic library for applying patches to a file, but I'm encountering issues with broken line breaks. I have attempted to use the patch_make function to compare the behavior, and it operates effectively when the diff is generated by dmp. Could someone please guide me in identifying the potential issues in my diff file?
The wrong result :
"express": "^4.18.2", "lodash": "^4.17.21",
The expected one :
"express": "^4.18.2",
"lodash": "^4.17.21",
This is my simple test code :
from diff_match_patch import diff_match_patch
original_json = '''{
"type": "module",
"dependencies": {
"ejs": "^3.1.9",
"express": "^4.18.2",
"puppeteer": "^21.7.0"
}
}'''
expected_json = '''{
"type": "module",
"dependencies": {
"ejs": "^3.1.9",
"express": "^4.18.2",
"lodash": "^4.17.21",
"puppeteer": "^21.7.0"
}
}'''
# The unidiff string, which is an exact clone of what dmp generates for the same changes
diff_str = '''@@ -82,16 +82,42 @@
.18.2",
+ "lodash": "^4.17.21",
"pup'''
print("____________ BROKEN EXAMPLE")
dmp = diff_match_patch()
patches = dmp.patch_fromText(diff_str)
patch_text = dmp.patch_toText(patches)
new_text, _ = dmp.patch_apply(patches, original_json)
print(patch_text)
print(new_text)
print("____________ WORKING EXAMPLE")
patches = dmp.patch_make(original_json, expected_json)
patch_text = dmp.patch_toText(patches)
new_text, _ = dmp.patch_apply(patches, original_json)
print(patch_text)
print(new_text)
And the result
____________ BROKEN EXAMPLE
@@ -82,16 +82,42 @@
.18.2%22,
+ %22lodash%22: %22%5E4.17.21%22,
%22pup
{
"type": "module",
"dependencies": {
"ejs": "^3.1.9",
"express": "^4.18.2", "lodash": "^4.17.21",
"puppeteer": "^21.7.0"
}
}
____________ WORKING EXAMPLE
@@ -82,16 +82,42 @@
.18.2%22,%0A
+ %22lodash%22: %22%5E4.17.21%22,%0A
%22pup
{
"type": "module",
"dependencies": {
"ejs": "^3.1.9",
"express": "^4.18.2",
"lodash": "^4.17.21",
"puppeteer": "^21.7.0"
}
}
We can clearely see that dmp adds a "%0A" (an encoded \n) in the generated patch, which is missing when creating it from text.
- I conducted various tests on multiple patch formats.
- Upon inspecting the core of the DMP, I discovered that the final aggregated text does not include line breaks in the diffs.
Version info :
diff-match-patch 20230430
system Ubuntu
python 3.10.12
Metadata
Assignees
Labels
No labels
Activity