* Pre-commit --cached vs. less-efficient iteration * During pre-commit, leverage the git cppcheck --cached form instead of iterating over the cached files and invoking git cppcheck on each to eliminate redundant static analysis * Add support for Debian Linux on ARM * Check prerequisite tool minimum versions * Bootstrapping will now confirm that each prerequisite tool satisfies the minimum version required
91 lines
2.8 KiB
Bash
Executable File
91 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
###
|
|
# OVERVIEW:
|
|
# This script bootstraps the MySensors development environment.
|
|
#
|
|
# USAGE:
|
|
# git clone https://github.com/mysensors/MySensors.git
|
|
# cd MySensors
|
|
# .mystools/bootstrap-dev.sh
|
|
##
|
|
|
|
##
|
|
# Import common utility functions and environment variables
|
|
. "$(cd "$(dirname "${BASH_SOURCE[0]}")"; pwd)/.bundle_runtime.sh"
|
|
|
|
check_tool_prerequisite()
|
|
{
|
|
function ver { printf "%03d%03d%03d%03d" $(echo "$1" | tr '.' ' '); }
|
|
|
|
if is_installed ${1} ; then
|
|
#local version=$(${1} --version 2>&1 | sed -e 's/[[:alpha:]|(|[:space:]]//g')
|
|
local version=$(${1} --version 2>&1 | sed -ne 's/[^0-9]*\(\([0-9]\.\)\{0,4\}[0-9][^.]\).*/\1/p')
|
|
if [ $(ver ${version}) -lt $(ver ${2}) ]; then
|
|
warn "Found ${1} ${version} however, version ${2} or greater is required..."
|
|
return 1
|
|
fi
|
|
else
|
|
warn "${1} not installed or not in current path."
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
check_git_remote()
|
|
{
|
|
local url=$( git config --get remote.${1}.url )
|
|
[[ $url == ${2} ]]
|
|
}
|
|
|
|
install_hooks()
|
|
{
|
|
for hook in "${1}"/*.sh; do
|
|
local hookname=$(basename $hook)
|
|
$(cd "${GITDIR}/hooks"; ln -s -f "../../${TOOLSDIR}hooks/${hookname}" "${hookname%.sh}")
|
|
done
|
|
}
|
|
|
|
###
|
|
# Main entry
|
|
#
|
|
# 1. Check that we are bootstrapping a supported OS/environment
|
|
# 2. Validate github remotes include valid upstream and origin
|
|
# 3. Check for client commit hook prerequisites
|
|
# 4. Install client commit hook prerequisites
|
|
# 5. Define aliases for conveniently running tool bundles
|
|
##
|
|
|
|
mysrepo="https://github.com/mysensors/MySensors.git"
|
|
|
|
#1
|
|
log "Checking operating system support: ${OSTYPE}..."
|
|
is_supported_os ${OSTYPE} || {
|
|
err "OS ${OSTYPE} is unknown/unsupported, won't install anything"
|
|
}
|
|
|
|
#2
|
|
log "Checking github 'origin' & 'upstream' remotes..."
|
|
check_git_remote "origin" "${mysrepo}" && warn "Git \"origin\" should point to your github fork, not the github MySensors repo ${mysrep}"
|
|
|
|
check_git_remote "upstream" "${mysrepo}" || {
|
|
warn "Git \"upstream\" remote not found or incorrectly defined. Configuring remote upstream --> ${mysrepo}..."
|
|
git remote add upstream "${mysrepo}" || err "git remote add ${mysrep} failed due to error $?"
|
|
}
|
|
|
|
#3
|
|
log "Checking tool/utility prerequisites..."
|
|
check_tool_prerequisite "astyle" "2.0.5" || err "Install AStyle 2.0.5 or greater and re-run ${0}"
|
|
check_tool_prerequisite "cppcheck" "1.76" || err "Install Cppcheck 1.76 or greater and re-run ${0}"
|
|
check_tool_prerequisite "git" "2.0" || err "Install git 2.0 or greater and re-run ${0}"
|
|
|
|
#4
|
|
log "Installing client-side git hooks..."
|
|
install_hooks "$(git mystoolspath)hooks" || err "Failed to install git hooks due to error $?..."
|
|
|
|
#5
|
|
log "Configuring git aliases for running mysensor tools..."
|
|
configure_git_tool_aliases || err "Failed to create git aliases due to error $?..."
|
|
|
|
bootstrap_version "--set"
|
|
|
|
info "Successfully configured your repo for MySensors development... Thanks for your support!"
|