developer: Add copyright/info banner to compressed scripts

This commit is contained in:
Ethan P 2020-04-16 23:40:51 -07:00
parent 00eafe67d0
commit 47cf670943
No known key found for this signature in database
GPG Key ID: 6963FD04F6CF35EA
2 changed files with 68 additions and 9 deletions

6
banner.txt Normal file
View File

@ -0,0 +1,6 @@
# -----------------------------------------------------------------------------
# bat-extras | Copyright (C) 2020 eth-p and contributors | MIT License
#
# Repository: https://github.com/eth-p/bat-extras
# Issues: https://github.com/eth-p/bat-extras/issues
# -----------------------------------------------------------------------------

View File

@ -42,13 +42,61 @@ smsg() {
# Escapes a sed pattern.
# Arguments:
# 1 -- The pattern.
#
# Output:
# The escaped string.
sed_escape() {
sed 's/\([][\\\/\^\$\*\.\-]\)/\\\1/g' <<< "$1"
}
# Checks if the output scripts will be minified.
# Arguments:
# 1 "all" -- All scripts will be minified.
# "any" -- Any scripts will be minified.
# "lib" -- Library scripts will be minified.
# "unsafe" -- Unsafe minifications will be applied.
will_minify() {
case "$1" in
all)
[[ "$OPT_MINIFY" =~ ^all($|\+.*) ]]
return $? ;;
unsafe)
[[ "$OPT_MINIFY" =~ ^.*+unsafe(\+.*)*$ ]]
return $? ;;
lib)
[[ "$OPT_MINIFY" =~ ^lib($|\+.*) ]]
return $? ;;
any|"")
[[ "$OPT_MINIFY" != "none" ]]
return $? ;;
esac
return 1
}
# Generates the banner for the output files.
#
# Output:
# The contents of banner.txt
generate_banner() {
local step="$1"
if ! "$OPT_BANNER"; then
return 0
fi
# Don't run it unless the comments are removed or hidden.
if ! { will_minify all || "$OPT_COMPRESS"; }; then
return 0
fi
# Only run it in the compression step if both minifying and compressing.
if will_minify all && "$OPT_COMPRESS" && [[ "$step" != "step_compress" ]]; then
return 0
fi
# Write the banner.
bat "${HERE}/banner.txt"
}
# Build step: read
# Reads the file from its source.
#
@ -96,13 +144,14 @@ step_preprocess() {
# Output:
# The minified file contents.
step_minify() {
if [[ "$OPT_MINIFY" =~ ^all($|+.*) ]]; then
if ! will_minify all; then
cat
smsg "Minifying" "SKIP"
return 0
fi
printf "#!/usr/bin/env bash\n"
generate_banner step_minify
pp_minify | pp_minify_unsafe
smsg "Minifying"
}
@ -125,6 +174,7 @@ step_compress() {
local wrapper
wrapper="$({
printf '#!/usr/bin/env bash\n'
generate_banner step_compress
printf "(exec -a \"\$0\" bash -c 'eval \"\$(cat <&3)\"' \"\$0\" \"\$@\" 3< <(dd bs=1 if=\"\$0\" skip=::: 2>/dev/null | gunzip)); exit \$?;\n"
})"
@ -161,7 +211,6 @@ step_write() {
#
# Output:
# The file contents.
step_write_install() {
if [[ "$OPT_INSTALL" != true ]]; then
cat
@ -175,7 +224,8 @@ step_write_install() {
}
# -----------------------------------------------------------------------------
# Preprocessor.
# Preprocessor:
# -----------------------------------------------------------------------------
# Consolidates all scripts into a single file.
# This follows all `source "${LIB}/..."` files and embeds them into the script.
@ -208,7 +258,7 @@ pp_consolidate__do() {
# Embed the script.
echo "${indent}# --- BEGIN LIBRARY FILE: ${BASH_REMATCH[1]} ---"
{
if [[ "$OPT_MINIFY" = "lib" ]]; then
if will_minify lib; then
pp_strip_comments | pp_minify | pp_minify_unsafe
else
cat
@ -258,7 +308,7 @@ pp_strip_comments() {
# Minify a Bash source file.
# https://github.com/mvdan/sh
pp_minify() {
if [[ "$OPT_MINIFY" = "none" ]]; then
if will_minify none; then
cat
return
fi
@ -271,7 +321,7 @@ pp_minify() {
# Right now, this doesn't do anything.
# This should be applied after shfmt minification.
pp_minify_unsafe() {
if ! [[ "$OPT_MINIFY" =~ ^.*+unsafe(+.*)*$ ]]; then
if ! will_minify unsafe; then
cat
return 0
fi
@ -280,10 +330,12 @@ pp_minify_unsafe() {
}
# -----------------------------------------------------------------------------
# Options.
# Options:
# -----------------------------------------------------------------------------
OPT_INSTALL=false
OPT_COMPRESS=false
OPT_VERIFY=true
OPT_BANNER=true
OPT_MINIFY="lib"
OPT_PREFIX="/usr/local"
OPT_BAT="bat"
@ -297,6 +349,7 @@ while shiftopt; do
--install) OPT_INSTALL=true ;;
--compress) OPT_COMPRESS=true ;;
--no-verify) OPT_VERIFY=false ;;
--no-banner) OPT_BANNER=false ;;
--prefix) shiftval; OPT_PREFIX="$OPT_VAL" ;;
--alternate-executable) shiftval; OPT_BAT="$OPT_VAL" ;;
--minify) shiftval; OPT_MINIFY="$OPT_VAL" ;;
@ -331,7 +384,7 @@ fi
[[ -d "$BIN" ]] || mkdir "$BIN"
if [[ "$OPT_MINIFY" != "none" ]] && ! command -v shfmt &>/dev/null; then
if ! will_minify none && ! command -v shfmt &>/dev/null; then
printc "%{RED}Warning: cannot find shfmt. Unable to minify scripts.%{CLEAR}\n"
OPT_MINIFY=none
fi