Hi. First of all, thank you for your work.
It would be awesome for deepmerge to be able to solve three way merge cases, as the one described in this stackoverflow question.
The problem is to merge two dictionaries A and B, knowing a common previous state C of both dictionaries. The merge needs to occur in subelements too. In the case of real conflict, an exception needs to be raised.
1 - In the following example, the merge method should understand that A and B edited different items, and thus the merge should not raise a conflict:
C = {"x": 0, "y": 0}
A = {"x": 1, "y": 0} # Edit x, but not y
B = {"x": 0, "y": 1} # Edit y, but not x
# merge(A, B, C) => {"x": 1, "y": 1}
2 - The merge needs to be able to deal with new items and deleted items:
C = {"x": 0}
A = {"x": 0, "y": 0} # Add y, keep x untouched
B = {} # Delete x
# merge(A, B, C) => {"y": 0}
3 - The merge should raise an exception when a real conflict occurs
C = {"x": 0}
A = {"x": 1} # Edit x
B = {"x": 2} # Also edit x
# merge(A, B, C) => raise Exception
C = {"x": 0}
A = {"x": 1} # Edit x
B = {} # Delete x
# merge(A, B, C) => raise Exception
4 - The merge should work recursively
C = {"deeper": {"x": 0, "y": 0}}
A = {"deeper": {"x": 1, "y": 0}} # Edit deeper["x"], but not deeper["y"]
B = {"deeper": {"x": 0, "y": 1}} # Edit deeper["y"], but not deeper["x"]
# merge(A, B, C) => {"deeper": {"x": 1, "y": 1}}
Would you accept a pull request for this job (if I ever had time to submit one) ?
Hi. First of all, thank you for your work.
It would be awesome for deepmerge to be able to solve three way merge cases, as the one described in this stackoverflow question.
The problem is to merge two dictionaries A and B, knowing a common previous state C of both dictionaries. The merge needs to occur in subelements too. In the case of real conflict, an exception needs to be raised.
1 - In the following example, the merge method should understand that A and B edited different items, and thus the merge should not raise a conflict:
2 - The merge needs to be able to deal with new items and deleted items:
3 - The merge should raise an exception when a real conflict occurs
4 - The merge should work recursively
Would you accept a pull request for this job (if I ever had time to submit one) ?