Heyas
My core question is how to reduce the required time and diskusage (if/where possible) on the reduce-the-list issue.
# Get full list of all functions
local list_raw="$(swarm.eu.function.list )
# Remove swarm.{sanity,eu] and init.* functions, as they are for internal use only
local list=$(
for l in $list_raw;do
(
$ECHO "${l}" | $GREP -q 'swarm.sanity' || \
$ECHO "${l}" | $GREP -q 'swarm.eu' || \
$ECHO "${l}" | $GREP -q 'init.'
) || $PRINTF "$l "
done ; )
EDIT:
/* The search pattern inside the swarm.eu.function.list
function is ^[:space:]funcname () { #
comments. */
swarm.eu.function.list() { # [FILE]
# Prints a list of properly declared functions
# see ./docs/{MANUAL,SYNTAX}.md for details
swarm.protect "$FUNCNAME" "${@}" && exit 1
local tmp_oldpwd="${PWD:-$($PWD_EXEC)}"
local tmp_file="${1##*/}"
local tmp_dir=${1/$tmp_file}
local target="${tmp_dir:-$SWARM_DIR_LIBS}/$tmp_file"
if [[ -n "$tmp_file" ]] && [[ -f "$target" ]]
then # There is a specific file passed to parse
cd "${tmp_dir:-$SWARM_DIR_LIBS}"
$GREP "() { #" "$1"| \
$GREP -v GREP | \
$AWK -v FS='() ' '{print $1}' | \
$SED s,'()',' ',g
cd "$tmp_oldpwd"
else # Just parse all files in SWARM_DIR_LIBS ; default
raw_output() {
(
cd "$SWARM_DIR_LIBS"
$GREP init.*"() {" * | $GREP -v GREP
$GREP cfg.*"() {" * | $GREP -v GREP
# Yes, I could remove these functions here, but I'd like to keep my options
# for a possible 'internal' section for the help menu
$GREP swarm.*"() {" * | $GREP -v GREP | $GREP -v '.os.' #| $GREP -v sanity | $GREP -v '\.eu\.'
cd "$tmp_oldpwd"
) | while IFS=": " read _ funcname _
do
# The IFS takes care of the GREP filenames
# and this variable-regex takes care of the 'function definition'
$PRINTF '%s\n' "${funcname/()}"
done
}
# Show data
raw_output | sort -u
unset -f raw_output
fi
}
EDIT X'th:
Some code fixes, as I did post the code too early as is - while it was in modification.
And while I completed this, I forgot that I wanted to support multiple dirs (SWARM_DIR_LIBS , SWARM_USER_DIR_LIBS) so it could be used for private scripts as well.
And now alot more ideas come up, and I need to go to bed...
Stay healthy and thank you in advance for any suggestions