aboutsummaryrefslogtreecommitdiff
#!/bin/sh
set -eu

usage() {
	cat <<-'EOF'
		Usage:
		  categories FILENAME
		  categories -h
	EOF
}

help() {
	cat <<-'EOF'
		Options:
		  -h, --help    show this message

		  FILENAME      the target categories index to be built


		  Generate FILENAME as the indexed list of articles by category.


		Examples:

		  Generate the index.categories entry for english pastebins:

		    $ categories src/en/pastebin/index.categories
	EOF
}


for flag in "$@"; do
	case "$flag" in
		--)
			break
			;;
		--help)
			usage
			help
			exit
			;;
		*)
			;;
	esac
done

while getopts 'h' flag; do
	case "$flag" in
		h)
			usage
			help
			exit
			;;
		*)
			usage >&2
			exit 2
			;;
	esac
done
shift $((OPTIND - 1))

. src/lib.sh

FILENAME="${1:-}"
eval "$(assert_arg "$FILENAME" 'FILENAME')"
DIR="$(dirname "$FILENAME")"


mkdir -p "$DIR"
printf '' > "$FILENAME"
find "$DIR"/*.categorysort 2>/dev/null |
	awk -F. '{ print $(NF-1) }' |
	sort |
	uniq |
	while read -r category; do
		find "$DIR"/*."$category".categorysort |
			sort -nr |
			xargs cat > "$DIR/$category.category"
		printf '%s\n' "$category" >> "$FILENAME"
	done