sfeed_update: allow to reuse the code more easily as an included script

This adds a main() function.  When the environment variable
$SFEED_UPDATE_INCLUDE is set then it will not execute the main handler.  The
other functions are included and can be reused.  This is also useful for
unit-testing.
This commit is contained in:
Hiltjo Posthuma 2021-01-25 19:35:02 +01:00
parent ddda48dac8
commit 4d9f922c83
2 changed files with 37 additions and 24 deletions

View File

@ -186,26 +186,30 @@ feeds() {
echo "See sfeedrc.example for an example." >&2
}
# job counter.
curjobs=0
# signal number received for parent.
signo=0
# SIGINT: signal to interrupt parent.
trap -- "sighandler 2" "INT"
# SIGTERM: signal to terminate parent.
trap -- "sighandler 15" "TERM"
# load config file.
loadconfig "$1"
# fetch feeds and store in temporary directory.
sfeedtmpdir="$(mktemp -d '/tmp/sfeed_XXXXXX')"
# make sure path exists.
mkdir -p "${sfeedpath}"
# fetch feeds specified in config file.
feeds
# wait till all feeds are fetched (concurrently).
[ ${signo} -eq 0 ] && wait
# cleanup temporary files etc.
cleanup
# on signal SIGINT and SIGTERM exit with signal number + 128.
[ ${signo} -ne 0 ] && exit $((signo+128))
exit 0
main() {
# job counter.
curjobs=0
# signal number received for parent.
signo=0
# SIGINT: signal to interrupt parent.
trap -- "sighandler 2" "INT"
# SIGTERM: signal to terminate parent.
trap -- "sighandler 15" "TERM"
# load config file.
loadconfig "$1"
# fetch feeds and store in temporary directory.
sfeedtmpdir="$(mktemp -d '/tmp/sfeed_XXXXXX')"
# make sure path exists.
mkdir -p "${sfeedpath}"
# fetch feeds specified in config file.
feeds
# wait till all feeds are fetched (concurrently).
[ ${signo} -eq 0 ] && wait
# cleanup temporary files etc.
cleanup
# on signal SIGINT and SIGTERM exit with signal number + 128.
[ ${signo} -ne 0 ] && exit $((signo+128))
exit 0
}
[ "${SFEED_UPDATE_INCLUDE}" = "1" ] || main "$@"

View File

@ -1,4 +1,4 @@
.Dd September 19, 2020
.Dd January 24, 2021
.Dt SFEED_UPDATE 1
.Os
.Sh NAME
@ -44,6 +44,15 @@ The
script merges new items with this file.
The feedname cannot contain '/' characters, they will be replaced with '_'.
.El
.Sh ENVIRONMENT VARIABLES
.Bl -tag -width Ds
.It SFEED_UPDATE_INCLUDE
When set
.Nm
can be sourced as a script, but it won't run the
.Fn main
entry-point.
.El
.Sh EXIT STATUS
.Ex -std
.Sh EXAMPLES