svn commit: r246969 - in user/bugmeister/gnats/tools: . changeprconf

Mark Linimon linimon at FreeBSD.org
Tue Feb 19 02:35:07 UTC 2013


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 at FreeBSD.org>; Marcus Alves Grando <mnag at FreeBSD.org>;
  and Eitan Adler <eadler at FreeBSD.org> (current maintainer).  Contributors: Sergey
  Matveychuk <sem at FreeBSD.org>; Vasil Dimov <vd at 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 at FreeBSD.org>
+# Marcus Alves Grando <mnag at FreeBSD.org>
+# Eitan Adler <eadler at FreeBSD.org> (current maintainer)
+#
+# CONTRIBUTORS:
+# Sergey Matveychuk <sem at FreeBSD.org>
+# Vasil Dimov <vd at 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.


More information about the svn-src-user mailing list