mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
New hooks folder
This commit is contained in:
41
tools/hooks/README.md
Normal file
41
tools/hooks/README.md
Normal file
@@ -0,0 +1,41 @@
|
||||
# Git Integration Hooks
|
||||
|
||||
This folder contains installable scripts for [Git hooks] and [merge drivers].
|
||||
Use of these hooks and drivers is optional and they must be installed
|
||||
explicitly before they take effect.
|
||||
|
||||
To install the current set of hooks, or update if new hooks are added, run
|
||||
`install.bat` (Windows) or `install.sh` (Unix-like) as appropriate.
|
||||
|
||||
Hooks expect a Unix-like environment on the backend. Usually this is handled
|
||||
automatically by GUI tools like TortoiseGit and GitHub for Windows, but
|
||||
[Git for Windows] is an option if you prefer to use a CLI even on Windows.
|
||||
|
||||
## Current Hooks
|
||||
|
||||
* **Pre-commit**: Runs [mapmerge2] on changed maps, if any.
|
||||
* **DMI merger**: Attempts to [fix icon conflicts] when performing a git merge.
|
||||
If it succeeds, the file is marked merged. If it fails, it logs what states
|
||||
are still in conflict and adds them to the .dmi file, where the desired
|
||||
resolution can be chosen.
|
||||
|
||||
## Adding New Hooks
|
||||
|
||||
New [Git hooks] may be added by creating a file named `<hook-name>.hook` in
|
||||
this directory. Git determines what hooks are available and what their names
|
||||
are. The install script copies the `.hook` file into `.git/hooks`, so editing
|
||||
the `.hook` file will require a reinstall.
|
||||
|
||||
New [merge drivers] may be added by adding a shell script named `<ext>.merge`
|
||||
and updating `.gitattributes` in the root of the repository to include the line
|
||||
`*.<ext> merge=<ext>`. The install script will set up the merge driver to point
|
||||
to the `.merge` file directly, and editing it will not require a reinstall.
|
||||
|
||||
`tools/hooks/python.sh` may be used as a trampoline to ensure that the correct
|
||||
version of Python is found.
|
||||
|
||||
[Git hooks]: https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
|
||||
[merge drivers]: https://git-scm.com/docs/gitattributes#_performing_a_three_way_merge
|
||||
[Git for Windows]: https://gitforwindows.org/
|
||||
[mapmerge2]: ../mapmerge2/README.md
|
||||
[fix icon conflicts]: ../mapmerge2/merge_driver_dmi.py
|
||||
2
tools/hooks/dmi.merge
Normal file
2
tools/hooks/dmi.merge
Normal file
@@ -0,0 +1,2 @@
|
||||
#!/bin/bash
|
||||
exec tools/hooks/python.sh -m merge_driver_dmi "$@"
|
||||
16
tools/hooks/install.bat
Normal file
16
tools/hooks/install.bat
Normal file
@@ -0,0 +1,16 @@
|
||||
@echo off
|
||||
cd %~dp0
|
||||
for %%f in (*.hook) do (
|
||||
echo Installing hook: %%~nf
|
||||
copy %%f ..\..\.git\hooks\%%~nf >nul
|
||||
)
|
||||
for %%f in (*.merge) do (
|
||||
echo Installing merge driver: %%~nf
|
||||
echo [merge "%%~nf"]^
|
||||
|
||||
driver = tools/hooks/%%f %%P %%O %%A %%B %%L >> ..\..\.git\config
|
||||
)
|
||||
echo Installing Python dependencies
|
||||
python -m pip install -r ..\mapmerge2\requirements.txt
|
||||
echo Done
|
||||
pause
|
||||
15
tools/hooks/install.sh
Normal file
15
tools/hooks/install.sh
Normal file
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
shopt -s nullglob
|
||||
cd "$(dirname "$0")"
|
||||
for f in *.hook; do
|
||||
echo Installing hook: ${f%.hook}
|
||||
cp $f ../../.git/hooks/${f%.hook}
|
||||
done
|
||||
for f in *.merge; do
|
||||
echo Installing merge driver: ${f%.merge}
|
||||
git config --replace-all merge.${f%.merge}.driver "tools/hooks/$f %P %O %A %B %L"
|
||||
done
|
||||
echo Installing Python dependencies
|
||||
./python.sh -m pip install -r ../mapmerge2/requirements.txt
|
||||
echo "Done"
|
||||
2
tools/hooks/pre-commit.hook
Normal file
2
tools/hooks/pre-commit.hook
Normal file
@@ -0,0 +1,2 @@
|
||||
#!/bin/bash
|
||||
exec tools/hooks/python.sh -m precommit
|
||||
17
tools/hooks/python.sh
Normal file
17
tools/hooks/python.sh
Normal file
@@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
if command -v python3 >/dev/null 2>&1; then
|
||||
PY=python3
|
||||
else
|
||||
PY=python
|
||||
fi
|
||||
PATHSEP=$($PY - <<'EOF'
|
||||
import sys, os
|
||||
if sys.version_info.major != 3 or sys.version_info.minor < 6:
|
||||
sys.stderr.write("Python 3.6+ is required: " + sys.version + "\n")
|
||||
exit(1)
|
||||
print(os.pathsep)
|
||||
EOF
|
||||
)
|
||||
export PYTHONPATH=tools/mapmerge2/${PATHSEP}${PYTHONPATH}
|
||||
$PY "$@"
|
||||
Reference in New Issue
Block a user