three-merge
Copyright © 2020– Spyder Project Contributors
Overview
Simple Python library to perform a 3-way merge between strings, based on diff-match-patch. This library performs merges at a character level, as opposed to most VCS systems, which opt for a line-based approach.
Installing
To install three-merge, you can use both conda or pip package managers:
conda install three-merge -c spyder-ide
pip install three-merge
Dependencies
This package depends on diff-match-patch to compute and track the differences across the source and target strings with respect to the base one.
Installing locally
To install and develop three-merge locally, you will need to install diff-match-patch:
conda install diff-match-patch
pip install diff-match-patch
Then, you can install the package locally using pip:
pip install -U -e .
Running tests
We use pytest to run tests as it follows:
pytest -x -v three_merge/tests
Package usage
Three-merge provides a merge
function to merge changes from two strings (source, target) with respect a original string (base). This library is able to handle additions, deletions and preserved sections across both strings, while detecting and highlighting possible merge conflicts (like Git).
from three_merge import merge
base = '123456789101112'
source = '0123456789101112'
target = '12345678910111213'
merged = merge(source, target, base)
base = '123456789101112'
source = '123a456789101112'
target = '123b456789101112'
merged = merge(source, target, base)
base = '123456789101112'
source = '123456789ab101112'
target = '123789101112'
merged = merge(source, target, base)
For more examples, please take a look at our tests.
Changelog
Please see our CHANGELOG file to learn more about our new features and improvements.
Contribution guidelines
We follow PEP8 and PEP257 for all Python modules. We use MyPy type annotations for all functions and classes declared on this package. Feel free to send a PR or create an issue if you have any problem/question.