Re: Mass edit-pr

Hans-Albert Schneider <[email protected]>
Newsgroups gmane.comp.bug-tracking.gnats.general
Organization Infineon Technologies AG, CL DAT TDM VM
Message-ID <[email protected]>
Adam Cade wrote:
> Is there any way to do a mass edit on the pr's??
> 
> (Editing the same field within a number of pr's)

Yes.  I wrote the attached script to change the Responsible: field of 
reports after a colleague left.

It does a lot of checking on files and also on its arguments, but the 
trick is to create a little temporary file that does the replacement 
(using the UNIX editor "ed"), have $EDITOR point to it, and then call 
edit-pr for each report.

(I used this idea for other purposes, too.  E.g., when we were shifted 
from Siemens to Infineon I needed to adjust all our mail addresses, and 
I used the opportunity to also cleanup the X-GNATS-NOTIFY: lines from 
obsolete addresses.)


Note that this still stems from the GNATS 3.11x times; the line
	pr_list=`awk ...`
will not work with GNATS 4 (the index file is now a binary format).  The 
line extracts those reports that belong to the old responsible and are 
not closed.

But I think this should get you started.


Have a nice weekend,

Hans-Albert
-- 
Hans-Albert Schneider		<[email protected]>
Infineon Technologies AG	phone:	(+49) 89 234 45445
Corporate Logic; Verification	fax:	(+49) 89 234 724399
(CL DAT DF V)			Munich, Germany

_______________________________________________
Help-gnats mailing list
[email protected]
http://mail.gnu.org/mailman/listinfo/help-gnats
change_responsible (text/plain, 2.3 KB)
#!/bin/sh
#
# change the >Responsible: of all non-closed reports.
# Author: [email protected]
# Copyright (C) Infineon Technologies AG, 2002
#

usage="usage: $0 -d gnats_root old_responsible new_responsible reason"

# Check usage
if [ $# -lt 5 ]
then
    echo $usage >&2
    exit 1
fi

if [ "x$1" = "x-d" ]
then
    if [ "x$2" = "x" ]
    then
	echo $usage >&2
	exit 1
    else
	gnatsroot="$2"
    fi
else
    echo $usage >&2
    exit 1
fi

if [ "x$3" = "x" -o  "x$4" = "x"  -o  "x$5" = "x" ]
then
    echo $usage >&2
    exit 1
fi

oldresp="$3"
newresp="$4"
reason="$5"


if [ ! -f "$gnatsroot/gnats-adm/index" ]
then
    echo $usage >&2
    echo "Cannot find index file $gnatsroot/gnats-adm/index" >&2
    exit 1
fi


resp_file=$gnatsroot/gnats-adm/responsible

if grep "^${oldresp}:" "$resp_file"
then
    : OK
else
    echo "Warning: '${oldresp}' not listed in $resp_file" >&2
    # No exit here; we are going to replace her/him anyway.
fi

if grep "^${newresp}:" "$resp_file"
then
    : OK
else
    echo $usage >&2
    echo "Warning: New responsible '${newresp}' not listed in $resp_file" >&2
    exit 1
fi


pr_list=`awk '-F|' '$3 == resp && $4 != "closed" {print $1}' resp="${oldresp}" $gnatsroot/gnats-adm/index`

if [ "x$pr_list" = "x" ]
then
    echo "No reports for '${oldresp}' found."
    exit 0
fi


echo "Responsible" | grep -i "${oldresp}" >/dev/null
if [ $? -eq 0 ]
then
    echo "Sorry, but the name of the new responsible, '${newresp}'," >&2
    echo "is a substring of the word 'Responsible'." >&2
    echo "This script cannot deal with that case; it would mess up" >&2
    echo "your reports." >&2
    echo "Please do the assignment manually." >&2
    exit 2
fi

#
# End of usage checking
#

# Create a temporary file to be used as the EDITOR environment variable.
# Make sure it belongs to us, and nobody else can modify it.
#
tmp=${TMPDIR:-/tmp}/chresp$$
[ -f "$tmp" ] && rm -f "$tmp"
[ -f "$tmp" ] && echo "Cannot rm $tmp" >&2 && exit 2
touch "$tmp" || echo "Cannot create $tmp" >&2
[ -f "$tmp" ] || exit 2
chmod 700 "$tmp"

cat >"$tmp" <<EOF
#!/bin/sh
# change responsible of GNATS problem report
EOF
echo "(echo '/>Responsible:/ s/${oldresp}/${newresp}/'; echo w) | ed "'$1' >> "$tmp"

EDITOR="$tmp"
export EDITOR
unset VISUAL


for id in $pr_list
do
    echo "Changing PR# $id ..."
    echo "$reason" | edit-pr -d "$gnatsroot" $id
done

rm -f "$tmp"
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.