A collection of handy git hooks / scripts
This hook is for a local repository, and fires when committing to the repo. It validates files before they are committed.
There are currently three validators implemented: An XML validator, a YAML validator and a Python validator. The Python validator executes pylint, and you can specify a minimum pylint score.
The XML validator needs the external
defusedxml pip library, as that is a
safer alternative than the built-in
xml library. Install
pip install -r requirements.txt
The configuration can be specified in the file
python: True reject: True treshold: 10 verbose: True yaml: True
python: When set to True, validates all Python files using pylint. Pylint needs to be installed (
pip install pylint
reject: When set to True, rejects the commit if validation fails.
treshold: When given a numerical value between 0 - 10, validates all Python files and fails if the pylint score is lower.
verbose: When set to True, shows status messages while committing.
yaml: When set to True, validates all Yaml files. The PyYAML library needs to be installed (
pip install pyyaml
For easy installation, apply the
githooks.patch file in your repository using
patch -Np1 -i githooks.patch in the root of your repository. This will install the githooks with default configuration values.
This hook is for a hosted repository, and fires when people push commits to the repo. It validates files when they are received, and before they are updated.
You can set a variable (
reject) whether to reject the update when validation fails, or to allow the invalid file being updated. The default value is
True, which means that updates will fail when validation fails.
There is currently one validator implemented in the
pre-receive hook, the XML validator.
install / configure / update repositories
A script to update a repo with upstream changes. Sometimes you don't want to specify an upstream repository, but still want to pull and apply changes from an upstream source. This script allows you to specify which files can be safely updated by an upstream repo. It pulls the latest changes and applies them. Can be run from within a target directory, or by specifying the target as parameter.
A wrapper to execute one or multiple repetitive tasks:
- Clones a repository to a local destination
- Modifies the repository (e.g. adds githooks, changes the git configuration)
- Modifies the repository based on given variables
- Creates a new notes file from a given template
- Modifies the notes fileile based on given variables
It can use configuration files, so you can use e.g. one for github and one for private repositories.
namespace: PeterMosmans notes: /location/where/notes/should/be/stored patchfile: /location/of/patch.file remote: https://github.com target: /where/repositories/are/cloned/to template: /base/template.txt
usage: setuprepo.py [-h] [--config CONFIG] [-r REMOTE] [-n NAMESPACE] [--no-clone] [--no-modify] [--no-patch] [--no-template] [--patchfile PATCHFILE] [--prepare] [-t TARGET] [--notes NOTES] [--template TEMPLATE] [-v] repo setuprepo.py version 0.5 - Clones and configures (patches) a git repository Copyright (C) 2016 Peter Mosmans [Go Forward] This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. positional arguments: repo repository name optional arguments: -h, --help show this help message and exit --config CONFIG load config file -r REMOTE, --remote REMOTE remote repository address -n NAMESPACE, --namespace NAMESPACE namespace of the repository --no-clone do not clone repository --no-modify do not modify patch and/or template --no-patch do not patch repository --no-template do not create template --patchfile PATCHFILE patchfile for new repositories --prepare clone the repo, create an original and modified folder, and exit -t TARGET, --target TARGET local target for the repository structure --notes NOTES the directory where to create a notes file --template TEMPLATE an empty notes template -v, --verbose Be more verbose
All scripts are GPLv3 licensed.