Browse Source

Add pre-commit hook

master
Julian Ospald 5 years ago
commit
c4062252e4
No known key found for this signature in database GPG Key ID: 511B62C09D50CD28
1 changed files with 112 additions and 0 deletions
  1. +112
    -0
      pre-commit

+ 112
- 0
pre-commit View 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…
Cancel
Save