#!/bin/bash -l # 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 -eE -o pipefail trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR if [[ ! $1 ]]; then echo "need gitroot arg" exit 1 fi gitroot=$1 cd $gitroot shopt -s extglob _git_desc_readme() { while read -r line; do [[ $line ]] || continue if echo "$line" | grep "^ *[#*]" &>/dev/null; then continue fi echo "$line" > .git/description break done < README* } dirs=() for d in $gitroot/*; do if [[ -d $d && ! -L $d ]]; then for sub in $d/*; do dirs+=($sub) done else dirs+=($d) fi done gitweb-descriptions() { for d in ${dirs[@]}; do d=$(readlink -f $d) cd $d/.. e ${PWD##*/} shopt -s nullglob f=(!(LICENSE|COPYING|README|.git)) shopt -u nullglob 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 } gitweb-descriptions "$@"