Add pre-commit hook
This commit is contained in:
commit
c4062252e4
112
pre-commit
Executable file
112
pre-commit
Executable file
@ -0,0 +1,112 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Author: Julian Ospald <hasufell@posteo.de>
|
||||||
|
# Version: 0.0.1
|
||||||
|
# Date: 2018-06-08
|
||||||
|
# Reason: automate digest generation
|
||||||
|
#
|
||||||
|
# This pre-commit hook generates digests for all packages
|
||||||
|
# that have been changed and possibly adds the Manifests to the index.
|
||||||
|
#
|
||||||
|
# For non-interactive mode set "DIGEST_NONINTERACTIVE=y".
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
die() {
|
||||||
|
echo "$@" 1>&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
edo() {
|
||||||
|
echo "$@" 1>&2
|
||||||
|
"$@" || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# all staged files
|
||||||
|
file_names=( )
|
||||||
|
|
||||||
|
# all touched packages (${CATEGORY}/${PN})
|
||||||
|
pkgs=( )
|
||||||
|
|
||||||
|
# all packages that we generated digest for
|
||||||
|
pkg_digs=( )
|
||||||
|
|
||||||
|
|
||||||
|
# set file_names
|
||||||
|
while IFS= read -r -d '' f; do
|
||||||
|
file_names+=( "${f}" )
|
||||||
|
done < <(git diff --cached --name-only -z HEAD)
|
||||||
|
unset f IFS
|
||||||
|
|
||||||
|
# exit early
|
||||||
|
if [[ -z ${file_names[@]} ]] ; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# name of the repository
|
||||||
|
repo_name="$(cat $(git rev-parse --show-toplevel)/profiles/repo_name)"
|
||||||
|
if [[ -z ${repo_name} ]] ; then
|
||||||
|
die "no repository name!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# set pkgs
|
||||||
|
for f in "${file_names[@]}" ; do
|
||||||
|
ext="${f##*.}"
|
||||||
|
if [[ ${ext} =~ exheres-[0-9]+ ]] ; then
|
||||||
|
pkg=${f#packages/}
|
||||||
|
pkg=${pkg%/*}
|
||||||
|
pkgs+=( "${pkg}" )
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
unset ext pkg f
|
||||||
|
|
||||||
|
|
||||||
|
# sort array
|
||||||
|
IFS=$'\n' pkgs=( $(sort -u <<<"${pkgs[*]}") )
|
||||||
|
unset IFS
|
||||||
|
|
||||||
|
# Allows us to read user input below, assigns stdin to keyboard
|
||||||
|
if [[ -z ${DIGEST_NONINTERACTIVE} ]] ; then
|
||||||
|
exec < /dev/tty
|
||||||
|
fi
|
||||||
|
|
||||||
|
# call digest
|
||||||
|
for pkg in "${pkgs[@]}" ; do
|
||||||
|
if [[ -n ${DIGEST_NONINTERACTIVE} ]] ; then
|
||||||
|
edo ${CAVE:-cave} digest ${pkg} ${repo_name}
|
||||||
|
pkg_digs+=( "${pkg}" )
|
||||||
|
else
|
||||||
|
read -p "Generate digest for ${pkg}? " -n 1 -r
|
||||||
|
echo
|
||||||
|
if [[ $REPLY =~ ^[Yy]$ ]]
|
||||||
|
then
|
||||||
|
edo ${CAVE:-cave} digest ${pkg} ${repo_name}
|
||||||
|
pkg_digs+=( "${pkg}" )
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
unset pkg
|
||||||
|
|
||||||
|
|
||||||
|
# stage Manifests
|
||||||
|
for pkg_dig in "${pkg_digs[@]}" ; do
|
||||||
|
if [[ -n ${DIGEST_NONINTERACTIVE} ]] ; then
|
||||||
|
edo git add -- packages/${pkg_dig}/Manifest
|
||||||
|
else
|
||||||
|
read -p "Add packages/${pkg_dig}/Manifest to commit? " -n 1 -r
|
||||||
|
echo
|
||||||
|
if [[ $REPLY =~ ^[Yy]$ ]]
|
||||||
|
then
|
||||||
|
edo git add -- packages/${pkg_dig}/Manifest
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
unset pkg_dig
|
||||||
|
|
||||||
|
# close STDIN
|
||||||
|
if [[ -z ${DIGEST_NONINTERACTIVE} ]] ; then
|
||||||
|
exec <&-
|
||||||
|
fi
|
Loading…
Reference in New Issue
Block a user