aboutsummaryrefslogtreecommitdiff
path: root/v2/src/bin/categories
diff options
context:
space:
mode:
Diffstat (limited to 'v2/src/bin/categories')
-rwxr-xr-xv2/src/bin/categories80
1 files changed, 80 insertions, 0 deletions
diff --git a/v2/src/bin/categories b/v2/src/bin/categories
new file mode 100755
index 0000000..bc08704
--- /dev/null
+++ b/v2/src/bin/categories
@@ -0,0 +1,80 @@
+#!/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/pastebins/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