[MANUAL MIRROR] Use portable Python for map merge hooks, other tools / Add .dmm merge driver (#2681)

* Use portable Python for map merge hooks, other tools (#55658)

* Add .dmm merge driver (#55699)

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`.

* Fix loose double-quot in tradership_faction.dmm

Co-authored-by: Tad Hardesty <tad@platymuus.com>
This commit is contained in:
Alex 'Avunia' Takiya
2021-01-14 16:52:24 +01:00
committed by GitHub
co-authored by Tad Hardesty
parent 30a166c52b
commit bea83b2999
56 changed files with 1055 additions and 256 deletions
+12 -27
View File
@@ -1,32 +1,17 @@
#!/bin/sh
# `sh` must be used here instead of `bash` to support GitHub Desktop.
set -e
# Strip the "App Execution Aliases" from $PATH. Even if the user installed
# Python using the Windows Store on purpose, these aliases always generate
# "Permission denied" errors when sh.exe tries to invoke them.
PATH=$(echo "$PATH" | tr ":" "\n" | grep -v "AppData/Local/Microsoft/WindowsApps" | tr "\n" ":")
# Try to find a Python executable.
if command -v python3 >/dev/null 2>&1; then
PY=python3
elif command -v python >/dev/null 2>&1; then
PY=python
elif command -v py >/dev/null 2>&1; then
PY="py -3"
if [ "$*" = "-m precommit" ]; then
echo "Hooks are being updated..."
echo "Details: https://github.com/tgstation/tgstation/pull/55658"
if [ "$(uname -o)" = "Msys" ]; then
tools/hooks/Install.bat
else
tools/hooks/install.sh
fi
echo "---------------"
exec tools/hooks/pre-commit.hook
else
echo "Please install Python from https://www.python.org/downloads/"
echo "tools/hooks/python.sh is replaced by tools/bootstrap/python"
echo "Details: https://github.com/tgstation/tgstation/pull/55658"
exit 1
fi
# Deduce the path separator and add the mapmerge package to the search path.
PATHSEP=$($PY - <<'EOF'
import sys, os
if sys.version_info.major != 3 or sys.version_info.minor < 6:
sys.stderr.write("Python 3.6 or later is required, but you have:\n" + sys.version + "\n")
exit(1)
print(os.pathsep)
EOF
)
export PYTHONPATH=tools/mapmerge2/${PATHSEP}${PYTHONPATH}
exec $PY "$@"