This is kind of a prototype. It only fully handles a few situations,
and doesn't produce particularly easy-to-read conflict markers when it
fails. I hope that it can be useful at least some of the time, can be
improved over time, and that the lessons learned can influence a future
interactive GUI conflict resolver (integrated into StrongDMM?). In the
worst case, one can fall back to the tried and true "manually re-do one
side's changes" strategy.
**Automatic use**: In `tools/hooks/`, run `Install.bat`
**Manual use**, for Git GUIs that don't run merge drivers: while a
merge is in progress, in `tools/mapmerge2/`, double-click `Resolve Map
Conflicts.bat`
This PR also removes the error-prone "Prepare Maps.bat" /
"mapmerge.bat" workflow. Those who aren't using the hooks should
instead use `Run Before Committing.bat` before committing. First-time
contributors who opened a PR without map merging can be advised to run
`I Forgot To Map Merge.bat`.
* Add tools/bootstrap/python
* Add dependencies.sh entry for Python
* Use bootstrapped Python for HitboxExpander
* Use bootstrapped Python when installing hooks
Also:
- Adds tools/hooks/Uninstall.bat
- Removes the need to re-run Install.bat when a .hook file changes
Python path temporarily includes tools/mapmerge2 as before:
- PYTHONPATH in tools/hooks/python.sh handles Linux/virtualenv
- python36._pth handles Windows portable
* Move DMI merge driver to its own directory
* Use bootstrapped Python for makeChangelog.bat
* Set window title in bootstrap PS scripts
* Use slashes in hook paths
* Use relative imports in mapmerge2
* Use bootstrapped Python for mapmerge
* Update mapmerge2 readme
* Skip non-3way conflicts
* Fix relative path issue in posthoc merger
* Add missing call and %* to .bat files
* When installing hooks, don't uninstall them all first
* Make dependencies.sh POSIX
* Move update_paths.py to its own folder
* Use line buffering for Python stdout/stderr
It was switching to fully-buffered mode due to being piped, meaning we
wouldn't see output until the script ended. This is undesirable.
* Use new path to dmi.test in CI suite
* Validate system Python version in bootstrap script
* Add install advice to bootstrap script
* Update path to requirements.txt in CI
* Add upgrader for existing installations
Turns out GitHub Desktop actually does bundle a sh.exe, just not a bash.
Also tries to look for the py launcher to help people who didn't check
the "Add Python to PATH" option.
It hooks into git as a merge driver and automatically runs with merges.
It prints a log of what it did, and if any specific states are
conflicted it indicates them and does not mark the merge as successful.
The conflicting icon can then be opened in DreamMaker and the
conflicting states resolved there.
Key benefits of the new mapmerge include: multi-Z support, effective
reuse of deleted keys, automatic handling of key overflow, and utilizing
a git pre-commit hook to eliminate the need to run batch files manually.