Pico/_build/tools/update-cloc-stats.sh

105 lines
2.9 KiB
Bash
Executable file

#!/usr/bin/env bash
##
# Updates the cloc statistics files
#
# @author Daniel Rudolf
# @link http://picocms.org
# @license http://opensource.org/licenses/MIT
#
set -e
# parameters
CORE_TARGET_FILE="$1" # target file path for core statistics
RELEASE_TARGET_FILE="$2" # target file path for release package statistics
# print parameters
echo "Updating cloc statistics..."
printf 'CORE_TARGET_FILE="%s"\n' "$CORE_TARGET_FILE"
printf 'RELEASE_TARGET_FILE="%s"\n' "$RELEASE_TARGET_FILE"
echo
# create cloc statistics
create_cloc_stats() {
local CLOC_FILE="$1"
shift
cloc --yaml --report-file "$CLOC_FILE" \
--progress-rate 0 \
--read-lang-def <(
echo "JSON"
echo " filter remove_matches ^\s*$"
echo " extension json"
echo " 3rd_gen_scale 2.50"
echo "Twig"
echo " filter remove_between_general {# #}"
echo " extension twig"
echo " 3rd_gen_scale 2.00"
echo "Markdown"
echo " filter remove_html_comments"
echo " extension md"
echo " 3rd_gen_scale 1.00"
echo "Apache config"
echo " filter remove_matches ^\s*#"
echo " filter remove_inline #.*$"
echo " extension htaccess"
echo " 3rd_gen_scale 1.90"
) \
--force-lang PHP,php.dist \
--force-lang YAML,yml.template \
"$@"
}
# remove header from cloc statistics
clean_cloc_stats() {
local LINE=""
local IS_HEADER="no"
while IFS='' read -r LINE || [[ -n "$LINE" ]]; do
if [ "$IS_HEADER" == "yes" ]; then
# skip lines until next entry is reached
[ "${LINE:0:2}" != " " ] || continue
IS_HEADER="no"
elif [ "$LINE" == "header :" ]; then
# header detected
IS_HEADER="yes"
continue
fi
echo "$LINE"
done < <(tail -n +3 "$1")
}
# create temporary files
printf 'Creating temporary files...\n'
CORE_TMP_FILE="$(mktemp)"
RELEASE_TMP_FILE="$(mktemp)"
[ -n "$CORE_TMP_FILE" ] && [ -n "$RELEASE_TMP_FILE" ] || exit 1
echo
# create core statistics
printf 'Creating core statistics...\n'
create_cloc_stats "$CORE_TMP_FILE" \
lib index.php
echo
printf 'Creating release package statistics...\n'
create_cloc_stats "$RELEASE_TMP_FILE" \
README.md LICENSE.md CONTRIBUTING.md CHANGELOG.md \
assets config content content-sample lib plugins themes \
.htaccess index.php.dist composer.json
echo
# remove headers from cloc statistics
printf 'Writing core statistics file without header...\n'
clean_cloc_stats "$CORE_TMP_FILE" > "$CORE_TARGET_FILE"
printf 'Writing release package statistics file without header...\n'
clean_cloc_stats "$RELEASE_TMP_FILE" > "$RELEASE_TARGET_FILE"
echo
# remove temporary files
printf 'Removing temporary files...\n'
rm "$CORE_TMP_FILE" "$RELEASE_TMP_FILE"
echo