aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2021-02-25 22:08:56 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2021-02-26 19:11:14 +0300
commit6b56610e3ccb0bdfda8a58c9881564d119876673 (patch)
treef9d001a6e8e41ee0b015a3d23ab95d03263627fc
parent49421fe1e1abe88431427fb12f520452531a092f (diff)
Convert bash functions that return arrays to comply with Bash Style Guide
-rw-r--r--bdep-util/git-pre-commit-copyright-check.in2
-rw-r--r--bdep-util/git-pre-commit-version-check.in38
2 files changed, 25 insertions, 15 deletions
diff --git a/bdep-util/git-pre-commit-copyright-check.in b/bdep-util/git-pre-commit-copyright-check.in
index 2e0f982..2dc2198 100644
--- a/bdep-util/git-pre-commit-copyright-check.in
+++ b/bdep-util/git-pre-commit-copyright-check.in
@@ -65,7 +65,7 @@ done
current_year="$(date -u +'%Y')"
for f in "${files[@]}"; do
- year="$(sed -n -re 's%^Copyright( +\([cC]\))?[ 0-9,-]*[ ,-]([0-9]{4}).*$%\2%p' "$f" | head -n 1)"
+ year="$(sed -n -re 's%^Copyright( +\([cC]\))?[ 0-9,-]*[ ,-]([0-9]{4}).*$%\2%p' "$f" | sed -n -e '1p')"
if [ -n "$year" -a "$year" != "$current_year" ]; then
info "WARNING: last copyright year in '${f#./}' is $year"
diff --git a/bdep-util/git-pre-commit-version-check.in b/bdep-util/git-pre-commit-version-check.in
index 20cd4b0..a1192f1 100644
--- a/bdep-util/git-pre-commit-version-check.in
+++ b/bdep-util/git-pre-commit-version-check.in
@@ -15,7 +15,10 @@
# result of the forthcoming commit (staged).
#
trap "{ exit 1; }" ERR
-set -o errtrace # Trap ERR in functions.
+set -o errtrace # Trap in functions and subshells.
+set -o pipefail # Fail if any pipeline command fails.
+shopt -s lastpipe # Execute last pipeline command in the current shell.
+shopt -s nullglob # Expand no-match globs to nothing rather than themselves.
function info () { echo "$*" 1>&2; }
function error () { info "$*"; exit 1; }
@@ -61,10 +64,10 @@ function manifest_parser_finish ()
butl_manifest_parser_finish
}
-# Find packages in the repository revision saving them into the specified by
-# name associative array (needs to be declared prior to the function call)
-# mapping the package names to the version/path pairs (for example "libfoo" ->
-# "1.2.3 lib/foo"). Optionally, return only released packages.
+# Find packages in the repository revision and print them to stdout as an
+# associative array in the ['<key>']='<value>' per line form, mapping the
+# package names to the version/path pairs (for example "libfoo" -> "1.2.3
+# lib/foo"). Optionally, return only released packages.
#
# Note that the repository revisions can be in arbitrary states and the
# package manifests may not be necessarily present or valid. Thus, we consider
@@ -74,11 +77,10 @@ function manifest_parser_finish ()
# staged revision, if it looks like it should be a package but something is
# missing, we warn.
#
-function find_packages () # <rev> <result> [<released>]
+function find_packages () # <rev> [<released>]
{
local rev="$1"
- local -n r="$2"
- local rel="$3"
+ local rel="$2"
# Collect the potential package directories.
#
@@ -100,6 +102,8 @@ function find_packages () # <rev> <result> [<released>]
# Fill the resulting package map.
#
+ declare -A r
+
local d
for d in "${ds[@]}"; do
local m="$d/manifest"
@@ -163,12 +167,18 @@ function find_packages () # <rev> <result> [<released>]
r["$name"]="$version $d"
fi
done
+
+ # Return the resulting package map.
+ #
+ for k in "${!r[@]}"; do
+ echo "['$k']='${r[$k]}'"
+ done
}
# Collect the commited released packages.
#
-declare -A committed_packages
-find_packages 'HEAD' committed_packages true
+find_packages "HEAD" true | readarray -t cp
+eval declare -A committed_packages=("${cp[@]}")
# Collect all the staged packages.
#
@@ -176,8 +186,8 @@ find_packages 'HEAD' committed_packages true
# packages, we will still collect the staged packages to potentially issue
# warnings about some of the manifest errors (empty package name, etc).
#
-declare -A staged_packages
-find_packages '' staged_packages
+find_packages '' | readarray -t sp
+eval declare -A staged_packages=("${sp[@]}")
# Iterate through the committed released packages and fail if there is a
# change but no version change staged for this package.
@@ -187,7 +197,7 @@ for p in "${!committed_packages[@]}"; do
# Check if this is still a package in the staged revision.
#
- if [[ -v staged_packages["$p"] ]]; then
+ if [[ -v "staged_packages[$p]" ]]; then
read sv sd <<<"${staged_packages[$p]}"
# If the package version didn't change, then check for any package changes
@@ -210,7 +220,7 @@ for p in "${!committed_packages[@]}"; do
# Check if the package has some staged changes in its directory.
#
- if ! git diff-index --cached --quiet HEAD -- "$sd"; then
+ if ! git diff-index --cached --quiet "HEAD" -- "$sd"; then
info "error: changing released package $p $cv without version increment"
info " info: use --no-verify git option to suppress"
exit 1