#!/bin/bash . ~/.profile.d/gentoo.sh . ~/.profile.d/aliases.sh op=${0##*/} ops=( ${op//-/ } ) op=${ops[0]} [[ ${op} == "er" ]] && op+=" -q" tdir="${HOME}/.cache/bugz" mkdir -p "${tdir}" find "${tdir}" -mmin +30 -type f -delete usage() { cat <<-EOF Usage: ${0##*/} [ ...] EOF if [[ $# -gt 0 ]] ; then printf '\nerror: %s\n' "$*" fi exit } bugs=() comments=() cl_msg= while [[ $# -ne 0 ]] ; do bug=$1 reason=$2 shift 2 || usage "invalid args" if [[ -z ${bug} || -n ${bug//[0-9#]} ]] ; then usage "invalid bug" fi case ${bug} in *#*) c=${bug##*#} ;; *) c=0 ;; esac : $(( ++c )) b=${bug%%#*} bugs=( "${bugs[@]}" ${b} ) comments=( "${comments[@]}" "${reason}" ) xml="${tdir}/${b}.xml" # server doesn't support timestamps, so cannot use -N if [[ ! -s $xml ]] ; then wget -q -O $xml https://bugs.gentoo.org/${b}?ctype=xml fi name=$(xml sel -E utf8 -t -m bugzilla/bug/long_desc -c who -n $xml | \ head -${c} | tail -1 | grep -o 'name=".*">' | cut -d\" -f2) if [[ -z ${name} ]] ; then name=$(xml sel -E utf8 -t -m bugzilla/bug/long_desc -v who -n $xml | \ head -${c} | tail -1 | cut -d@ -f1) fi new_name=$(echo "${name}" | scrub_html | sed "s: [(\"'][^()\"']*[)\"']::g") if [[ ${new_name} != "${name}" ]] ; then echo "Normalizing '${name}' to '${new_name}'" name=${new_name} fi if [[ -n ${cl_msg} ]] ; then cl_msg+=" " fi cl_msg+="${reason} #${bug} by ${name}." done run() { local opt=$1; shift printf "'%s' " "$@" echo case $opt in -g) "$@" ;; esac } doit() { run "$@" $op "${cl_msg}" || exit 1 echo for (( n=0; n < ${#bugs[@]}; ++n )) ; do b=${bugs[$n]} c=${comments[$n]} local msg="Commit message: $c$(printf '\n%s' ${urls})" case ${ops[1]} in close) run "$@" gbugz -q modify ${b} --fixed -c "\ should be all set now in the tree; thanks for the report! ${msg}" ;; comment) run "$@" gbugz -q modify ${b} -c "${msg}" ;; esac done echo } cvs=$(cvs up) files=$(echo "$cvs" | awk '$1 ~ /^[MA]/ { print $NF }' | grep -v '^Manifest$') unk_files=$(echo "$cvs" | awk '$1 !~ /^[MARU]/') if [[ -n ${unk_files} ]] ; then echo "unknown files:" echo "${unk_files}" exit 1 fi urls=$(cvs_gentoo_url ${files} | LC_ALL=C sort -V) cmds=$(doit -p) echo echo "${cmds}" printf "\nOk to go? [Y/n/e] " read g case ${g} in e) t=$(mktemp) echo "${cmds}" > "${t}" ${EDITOR:-nano} "${t}" || rm "${t}" set -e . "${t}" rm "${t}" ;; ""|y) echo doit -g ;; *) exit 1 ;; esac