Date: Tue, 19 Feb 2013 02:35:05 +0000 (UTC) From: Mark Linimon <linimon@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r246969 - in user/bugmeister/gnats/tools: . changeprconf Message-ID: <201302190235.r1J2Z5xm018807@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: linimon (doc,ports committer) Date: Tue Feb 19 02:35:04 2013 New Revision: 246969 URL: http://svnweb.freebsd.org/changeset/base/246969 Log: Wrappers for edit-pr to automate mundane tasks. Authors: Renato Botelho <garga@FreeBSD.org>; Marcus Alves Grando <mnag@FreeBSD.org>; and Eitan Adler <eadler@FreeBSD.org> (current maintainer). Contributors: Sergey Matveychuk <sem@FreeBSD.org>; Vasil Dimov <vd@FreeBSD.org>. Added: user/bugmeister/gnats/tools/change-pr (contents, props changed) user/bugmeister/gnats/tools/change-pr.helper (contents, props changed) user/bugmeister/gnats/tools/changeprconf/ user/bugmeister/gnats/tools/changeprconf/.analyzed-pr.default user/bugmeister/gnats/tools/changeprconf/.close-pr.default user/bugmeister/gnats/tools/changeprconf/.feedback-pr.default user/bugmeister/gnats/tools/changeprconf/.forward-pr.default user/bugmeister/gnats/tools/changeprconf/.junk-pr.default user/bugmeister/gnats/tools/changeprconf/.open-pr.default user/bugmeister/gnats/tools/changeprconf/.portmgr-pr.default user/bugmeister/gnats/tools/changeprconf/.take-pr.default Added: user/bugmeister/gnats/tools/change-pr ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/bugmeister/gnats/tools/change-pr Tue Feb 19 02:35:04 2013 (r246969) @@ -0,0 +1,315 @@ +#!/bin/sh +# +# AUTHORS: +# Renato Botelho <garga@FreeBSD.org> +# Marcus Alves Grando <mnag@FreeBSD.org> +# Eitan Adler <eadler@FreeBSD.org> (current maintainer) +# +# CONTRIBUTORS: +# Sergey Matveychuk <sem@FreeBSD.org> +# Vasil Dimov <vd@FreeBSD.org> +# +# More information: change-pr -h +# + +version="3.2.0"; + +SPECIAL_RESP="amd64 apache eclipse emulation gnome ia64 java kde openoffice \ + perl pgsql x11 freebsd-amd64 freebsd-apache freebsd-eclipse \ + gecko \ + freebsd-emulation freebsd-gnome freebsd-ia64 freebsd-java \ + freebsd-kde freebsd-openoffice freebsd-perl freebsd-x11 \ + freebsd-ports-bugs \ + ports-secteam + secteam + gnats-admin" + +print_usage () { + echo "Usage: $0 [-hoafjpsc] [-Cx] [-t|-T committer] [-n email] [-m message] PR ..." +} + +print_help () { + echo "change-pr: Try to make your life with gnats a bit better" + echo "version: $version"; + echo "" + print_usage + echo "" + echo "Parameters:" + echo "" + echo "-h - This help" + echo "" + echo "-o - Change >State to open" + echo "-a - Change >State to analyzed" + echo "-f - Change >State to feedback" + echo "-p - Change >State to patched" + echo "-s - Change >State to suspended" + echo "-c - Change >State to closed" + echo "" + echo "-t - Change >Responsible to you" + echo "-T committer - Change >Responsible to committer" + echo "-n email - Change >X-GNATS-Notify to email" + echo "" + echo "-Cx - Change >Class field, where x could be:" + echo "s - sw-bug" + echo "d - doc-bug" + echo "c - change-request" + echo "u - update" + echo "m - maintainer-update" + echo "" + echo "-j - Change >Category to junk" + echo "" + echo "-m message - Use message to log the change" + echo "" + echo "To see the synopsis of PRs when you are using one of the" + echo "symlinks (e.g. close-pr) set an env var SHOW_SYNOPSIS=1" + echo "" + echo "When responsible of a PR is not freebsd-*, script will ask" + echo "you to confirm the change. You can set the default answer" + echo "using TAKE_PR_DEFAULT to 'Y' or 'N', and, can disable the" + echo "question setting TAKE_PR_BATCH=1 envvar." + exit 0 +} + +get_RESP () { + if [ -n "$PR_MESSAGE" ] + then + RESP="$PR_MESSAGE"; + return; + fi; + if [ -f ~/.$MODULE ]; then + CONF=~/.$MODULE + else + CONF=~gnats/tools/changeprconf/.$MODULE.default + fi + + if [ ! -f $CONF ]; then + exit 0 + fi + + SHOW=${SHOW_SYNOPSIS-N} + + if [ "$SHOW" != "N" ]; then + for PR in $*; do + echo -n "$PR - " + echo `/usr/local/bin/query-pr $PR | grep '^>Synopsis:' | sed 's,^>Synopsis:[ \t]*,,'` + done + + echo "" + fi + + echo "Choose:" + NUM=1 + for x in `cat $CONF | sed 's/ /___/g'`; do + i=`echo $x | sed 's/___/ /g; s/\"//g'` + echo "[$NUM] $i" + eval TEXT$NUM=\"$i\" + NUM=`expr $NUM + 1` + done + + echo -n "or put your text here: " + read TMPRESP + + if [ "$TMPRESP" != "" -a "`echo $TMPRESP | sed 's/[0-9]*//g'`" = "" ]; then + eval TEXT=\$TEXT$TMPRESP + if [ "$TEXT" != "" ]; then + TMPRESP="$TEXT" + else + TMPRESP="" + fi + fi + + eval RESP=\$TMPRESP +} + +MODULE=`basename $0` +MODULEPATH=`echo $0 | sed "s,/$MODULE,,"` + +while getopts hoafprscm:ntT:C:j o; do + case "$o" in + h) print_help;; + o) NEW_STATE=open;; + a) NEW_STATE=analyzed;; + f) NEW_STATE=feedback;; + p) NEW_STATE=patched;; + r) echo "This option is now deprecated." > /dev/stderr; + exit 1;; + s) NEW_STATE=suspended;; + c) NEW_STATE=closed + CHG_RESP=1;; + t) CHG_RESP=1 + CHK_RESP=0 + NEW_RESP=`whoami`;; + T) CHG_RESP=1 + CHK_RESP=1 + NEW_RESP="$OPTARG";; + n) NEW_NOTIFY="$OPTARG";; + m) PR_MESSAGE="$OPTARG";; + C) NEW_CLASS_OPT="$OPTARG";; + j) NEW_CAT=junk;; + [?]) print_usage + exit 1;; + esac +done +shift `expr $OPTIND - 1` + +if [ $# -eq 0 ]; then + print_usage + exit 1 +fi + +if [ "$MODULE" = "close-pr" ]; then + if [ $# -lt 1 ]; then + echo "Usage: $0 PR ..." + exit 0 + fi + + get_RESP $* + + $MODULEPATH/change-pr -c -m "$RESP" $* + exit 0 +elif [ "$MODULE" = "forward-pr" ]; then + if [ $# -lt 2 ]; then + echo "Usage: $0 USER PR ..." + exit 0 + fi + user="$1"; + shift; + get_RESP $* + + $MODULEPATH/change-pr -m "$RESP" -T $user $* + exit 0 +elif [ "$MODULE" = "portmgr-pr" ]; then + if [ $# -lt 1 ]; then + echo "Usage: $0 PR ..." + exit 0 + fi + + get_RESP $* + + $MODULEPATH/change-pr -T portmgr -m "$RESP" $* + exit 0 +elif [ "$MODULE" = "feedback-pr" ]; then + if [ $# -lt 1 ]; then + echo "Usage: $0 PR ..." + exit 0 + fi + + get_RESP $* + + $MODULEPATH/change-pr -f -m "$RESP" $* + exit 0 +elif [ "$MODULE" = "analyzed-pr" ]; then + if [ $# -lt 1 ]; then + echo "Usage: $0 PR ..." + exit 0 + fi + + get_RESP $* + + $MODULEPATH/change-pr -a -m "$RESP" $* + exit 0 +elif [ "$MODULE" = "open-pr" ]; then + if [ $# -lt 1 ]; then + echo "Usage: $0 PR ..." + exit 0 + fi + + get_RESP $* + + $MODULEPATH/change-pr -o -m "$RESP" $* + exit 0 +elif [ "$MODULE" = "take-pr" ]; then + if [ $# -lt 1 ]; then + echo "Usage: $0 PR ..." + exit 0 + fi + + get_RESP $* + + $MODULEPATH/change-pr -t -m "$RESP" $* + exit 0 +elif [ "$MODULE" = "repocopy-pr" ]; then + echo "This state is no longer active." >/dev/stderr + exit 1 +elif [ "$MODULE" = "junk-pr" ]; then + if [ $# -lt 1 ]; then + echo "Usage: $0 PR ..." + exit 0 + fi + + get_RESP $* + + $MODULEPATH/change-pr -j -c -T gnats-admin -m "$RESP" $* + exit 0 +else +fi + +NEW_CLASS="" +case "$NEW_CLASS_OPT" in + s) NEW_CLASS="sw-bug";; + d) NEW_CLASS="doc-bug";; + c) NEW_CLASS="change-request";; + u) NEW_CLASS="update";; + m) NEW_CLASS="maintainer-update";; +esac + +if [ -z "$NEW_STATE" -a -z "$CHG_RESP" -a -z "$NEW_CLASS" ]; then + print_usage + exit 1 +fi + +SPECIAL=0; +if [ "$CHK_RESP" = "1" -a "$NEW_RESP" != "" ]; then + if [ "`expr $NEW_RESP : '\([^-]*\)'`" != "freebsd" ]; then + for RESP in $SPECIAL_RESP; do + if [ "$NEW_RESP" = "$RESP" ]; then + SPECIAL=1; + fi + done + id $NEW_RESP >/dev/null 2>&1 + if [ $? -ne 0 -a $SPECIAL -ne 1 ]; then + echo >&2 "Error: $NEW_RESP is an invalid committer." + exit 1 + fi + fi +fi + +for PR in $*; do + CONT="${TAKE_PR_DEFAULT-Y}" + + ENT_PR=`query-pr $PR 2>&1` + if [ $? -ne 0 ]; then + echo >&2 "PR $PR not found" + continue + fi + + if [ "$CHG_RESP" = "1" ]; then + RESP=`echo $ENT_PR | sed -E 's/^.*>Responsible: *([^ ]*).*$/\1/'` + FREEBSD_RESP=`expr $RESP : '\([^-]*\)'` + + if [ "$FREEBSD_RESP" != "freebsd" -a "$RESP" != "`whoami`" -a -z "$TAKE_PR_BATCH" ]; then + echo -n "The actual Responsible of PR $PR is $RESP. Continue? (y/n) [${TAKE_PR_DEFAULT-Y}]: " + read CONT + + if [ "$CONT" = "" ]; then + CONT="${TAKE_PR_DEFAULT-Y}" + fi + fi + fi + + if [ "$CONT" = "Y" -o "$CONT" = "y" ]; then + TMP=$MODULEPATH/change-pr.helper + /usr/bin/env \ + OEDITOR="$EDITOR" \ + OVISUAL="$VISUAL" \ + VISUAL="$TMP" \ + EDITOR= \ + NEW_CAT="$NEW_CAT" \ + NEW_CLASS="$NEW_CLASS" \ + NEW_RESP="$NEW_RESP" \ + NEW_NOTIFY=$NEW_NOTIFY \ + NEW_STATE="$NEW_STATE" \ + PR_MESSAGE="$PR_MESSAGE" \ + /usr/local/bin/edit-pr $PR + fi +done Added: user/bugmeister/gnats/tools/change-pr.helper ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/bugmeister/gnats/tools/change-pr.helper Tue Feb 19 02:35:04 2013 (r246969) @@ -0,0 +1,62 @@ +#!/bin/sh +# +# If we're editing the PR, then make the requested substitution with sed. +# Otherwise, we're editing the reason, so run the user's editor. + +if [ `echo $1 | cut -c1-10` = "/tmp/chng." ]; then + if [ -n "$PR_MESSAGE" ]; then + echo "$PR_MESSAGE" > $1 + else + # check to see if there is a $EDITOR; if not, use vi + [ -z "$OVISUAL" ] && + if [ -z "$OEDITOR" ]; then + OVISUAL=vi + else + OVISUAL="$OEDITOR" + fi + + cp $1 $1~ + + EDIT="y" + + while [ "$EDIT" = "y" -o "$EDIT" = "Y" ]; do + $OVISUAL $1 + if cmp -s $1 $1~; then + echo -n "Reason not modified, do you want to re-edit? (y/n) " + read EDIT + else + EDIT="n" + fi + done + + rm -f $1~ + fi + + cat $1 | grep -v "^GNATS:" | fmt -w 72 > $1~ + cp $1~ $1 + rm -f $1~ +else + + if [ "$NEW_RESP" != "" ]; then + cp $1 $1~ + sed -e "/^>Responsible:/s/[^ ]*\$/$NEW_RESP/" < $1~ > $1 + rm -f $1~ + fi + + if [ "$NEW_STATE" != "" ]; then + cp $1 $1~ + sed -e "/^>State:/s/[^ ]*\$/$NEW_STATE/" < $1~ > $1 + rm -f $1~ + fi + + if [ "$NEW_CLASS" != "" ]; then + cp $1 $1~ + sed -e "/^>Class:/s/[^ ]*\$/$NEW_CLASS/" < $1~ > $1 + rm -f $1~ + fi + + if [ "$NEW_NOTIFY" != "" ]; then + cp $1 $1~ + sed -e "/^X-GNATS-Notify:/s/[^ ]*\$/$NEW_NOTIFY/" < $1~ > $1 + fi +fi Added: user/bugmeister/gnats/tools/changeprconf/.analyzed-pr.default ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/bugmeister/gnats/tools/changeprconf/.analyzed-pr.default Tue Feb 19 02:35:04 2013 (r246969) @@ -0,0 +1 @@ +Taken for exp-run Added: user/bugmeister/gnats/tools/changeprconf/.close-pr.default ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/bugmeister/gnats/tools/changeprconf/.close-pr.default Tue Feb 19 02:35:04 2013 (r246969) @@ -0,0 +1,4 @@ +Committed. Thanks! +New port added. Thanks! +Committed, with minor changes. Thanks! +New port added, with minor changes. Thanks! Added: user/bugmeister/gnats/tools/changeprconf/.feedback-pr.default ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/bugmeister/gnats/tools/changeprconf/.feedback-pr.default Tue Feb 19 02:35:04 2013 (r246969) @@ -0,0 +1,4 @@ +Ask for maintainer approval. +Ask for maintainer fix. +Ask for submitter approval. +Ask for submitter fix. Added: user/bugmeister/gnats/tools/changeprconf/.forward-pr.default ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/bugmeister/gnats/tools/changeprconf/.forward-pr.default Tue Feb 19 02:35:04 2013 (r246969) @@ -0,0 +1 @@ +Over to maintainer. Added: user/bugmeister/gnats/tools/changeprconf/.junk-pr.default ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/bugmeister/gnats/tools/changeprconf/.junk-pr.default Tue Feb 19 02:35:04 2013 (r246969) @@ -0,0 +1 @@ +This PR is junkable Added: user/bugmeister/gnats/tools/changeprconf/.open-pr.default ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/bugmeister/gnats/tools/changeprconf/.open-pr.default Tue Feb 19 02:35:04 2013 (r246969) @@ -0,0 +1,4 @@ +Maintainer has approved. +Maintainer has fixed. +Submitter has approved. +Submitter has fixed. Added: user/bugmeister/gnats/tools/changeprconf/.portmgr-pr.default ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/bugmeister/gnats/tools/changeprconf/.portmgr-pr.default Tue Feb 19 02:35:04 2013 (r246969) @@ -0,0 +1 @@ +portmgr territory. Added: user/bugmeister/gnats/tools/changeprconf/.take-pr.default ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/bugmeister/gnats/tools/changeprconf/.take-pr.default Tue Feb 19 02:35:04 2013 (r246969) @@ -0,0 +1 @@ +I'll take it.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201302190235.r1J2Z5xm018807>