#!/bin/bash # Copyright (C) 2016 Ian Kelling # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # my projects all have README or --help with a short single line # description which I parse and put into the gitweb description. # If it's a repo with just a single bash script or *-function script, # then call it with --help, grap the 2nd line. # else, parse the readme, find the first non blank, not starting with [#*], # and use that line. set -e; . /usr/local/lib/bash-bear; set +e if [[ ! $1 ]]; then echo "need gitroot arg" exit 1 fi gitroot=$1 cd $gitroot shopt -s extglob shopt -s nullglob _git_desc_readme() { x=(README*) if [[ ! $x ]]; then echo "$1: error: no README at $PWD" exit 1 fi while read -r line; do [[ $line ]] || continue if echo "$line" | grep "^ *[#*]" &>/dev/null; then continue fi echo "$line" > .git/description break done < README* } gitweb-descriptions() { for d in ${dirs[@]}; do echo $d cd $(readlink -f $d)/.. [[ -e .git ]] || echo $d if [[ ${personalized[${d##*/}]} ]]; then echo "$pcategory" >.git/category fi if [[ ${unmaintained[${d##*/}]} ]]; then echo "$ucategory" >.git/category fi if [[ ${historicalarchive[${d##*/}]} ]]; then echo "$hcategory" >.git/category fi f=(!(LICENSE|COPYING|README|.git)) if [[ ${#f[@]} == 1 && ! -d $f ]]; then if [[ ! -x $f ]]; then if [[ $f == *-function ]]; then ${f%-function} --help | sed -n '2p' > .git/description else _git_desc_readme fi else ./$f --help | sed -n '2p' > .git/description fi else _git_desc_readme fi done } tmp=( bashrc automated-distro-installer buildscripts distro-setup dot-emacs fai-basefiles ian-misc-bash iankelling.org keyboard.io-layout ) declare -A personalized for p in ${tmp[@]}; do personalized[$p]=true; done pcategory="Personalized for my use. Useful as examples or to copy specific parts" tmp=( bbdb-csv-import evhz ) ucategory="I don't use these anymore, they may or may not work, patches welcome" declare -A unmaintained for p in ${tmp[@]}; do unmaintained[$p]=true; done tmp=( bash-template debian-auto-update fdroidcl-up mediawiki-setup mediawiki-librejs-patch mediawiki-sidebar-patch ) hcategory="Historical archive. They don't work or have been superseded." declare -A historicalarchive for p in ${tmp[@]}; do historicalarchive[$p]=true; done dirs=() for d in $gitroot/*; do if [[ ! -L $d ]]; then continue fi dirs+=($d) done gitweb-descriptions "$@"