From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6009 invoked by alias); 10 Jun 2011 22:51:23 -0000 Received: (qmail 5998 invoked by uid 22791); 10 Jun 2011 22:51:22 -0000 X-SWARE-Spam-Status: No, hits=-2.2 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (74.125.121.67) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 10 Jun 2011 22:51:07 +0000 Received: from kpbe11.cbf.corp.google.com (kpbe11.cbf.corp.google.com [172.25.105.75]) by smtp-out.google.com with ESMTP id p5AMp4Eg002237; Fri, 10 Jun 2011 15:51:04 -0700 Received: from topo.tor.corp.google.com (topo.tor.corp.google.com [172.29.41.2]) by kpbe11.cbf.corp.google.com with ESMTP id p5AMp2F0013806; Fri, 10 Jun 2011 15:51:02 -0700 Received: by topo.tor.corp.google.com (Postfix, from userid 54752) id D18D71DA1CD; Fri, 10 Jun 2011 18:51:01 -0400 (EDT) To: reply@codereview.appspotmail.com, lxo@redhat.com, crowl@google.com, gchare@google.com, gcc-patches@gcc.gnu.org Subject: [pph contrib] Add support for multiple spawn patterns in repro_fail (issue4571061) Message-Id: <20110610225101.D18D71DA1CD@topo.tor.corp.google.com> Date: Fri, 10 Jun 2011 23:52:00 -0000 From: dnovillo@google.com (Diego Novillo) X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2011-06/txt/msg00888.txt.bz2 So I had to go back to grep|sed instead of just sed because I want to use extended regexps supported by grep -E. In pph this is useful so that you can specify patterns that match both the writing and the reading of the PPH files. I'm thinking that this script is better written in python, but that may make it less generic and I don't know whether we accept python in gcc/contrib. Alex? Committed to pph branch. Diego. * repro_fail: Add support for patterns matching multiple spawns. diff --git a/contrib/repro_fail b/contrib/repro_fail index d5bce04..8100456 100755 --- a/contrib/repro_fail +++ b/contrib/repro_fail @@ -1,6 +1,6 @@ -#!/bin/bash +#!/bin/bash -eu # -# Script to reproduce a test failure from a dejagnu .log file +# Script to reproduce a test failure from a dejagnu .log file. # # Contributed by Diego Novillo # @@ -23,6 +23,13 @@ # the Free Software Foundation, 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. +# This script will search a line starting with 'spawn' that includes the +# pattern you are looking for (typically a source file name). +# +# Once it finds that pattern, it re-executes the whole command +# in the spawn line. If the pattern matches more than one spawn +# command, it asks which one you want. + if [ $# -lt 2 ] ; then echo "usage: $0 pattern file.log [additional-args]" echo @@ -32,18 +39,44 @@ if [ $# -lt 2 ] ; then exit 1 fi -set -e -pattern=$1 -logf=$2 +pattern="$1" +logf="$2" shift 2 -args="$@" -line=$(grep "^spawn .*$pattern" $logf | sed -e "s:^spawn ::") -if [ "$line" = "" ] ; then - echo "Could not find a spawn command for pattern $1" +# Find the commands in LOGF that reference PATTERN. +lines=$(grep -E "^spawn .*$pattern" $logf | sed -e 's/^spawn //') +if [ -z "$lines" ] ; then + echo "Could not find a spawn command for pattern $pattern" exit 1 fi -set -x +e -$line $args -exit $? +# Collect all the command lines into the COMMANDS array. +old_IFS="$IFS" +IFS=" " +num_lines=0 +for line in $lines ; do + num_lines=$[$num_lines + 1] + echo "[$num_lines] $line" + commands[$num_lines]=$line +done + +# If we found more than one line for PATTERN, ask which one we should run. +cmds_to_run='0' +if [ $num_lines -gt 1 ] ; then + echo + echo + echo -n "Enter the list of commands to run or '0' to run them all: " + read cmds_to_run +fi +if [ "$cmds_to_run" = "0" ] ; then + cmds_to_run=$(seq 1 $num_lines) +fi +IFS="$old_IFS" + +# Finally, execute all the commands we were told to execute. +for cmd_num in $cmds_to_run ; do + cmd=${commands[$cmd_num]} + set -x +e + $cmd "$@" + set +x -e +done -- This patch is available for review at http://codereview.appspot.com/4571061