git/t/t0210/scrub_normal.perl

#!/usr/bin/perl
#
# Scrub the variable fields from the normal trace2 output to
# make testing easier.

use strict;
use warnings;

my $float = '[0-9]*\.[0-9]+([eE][-+]?[0-9]+)?';

# This code assumes that the trace2 data was written with bare
# turned on (which omits the "<clock> <file>:<line>" prefix.

while (<>) {
    # Various messages include an elapsed time in the middle
    # of the message.  Replace the time with a placeholder to
    # simplify our HEREDOC in the test script.
    s/elapsed:$float/elapsed:_TIME_/g;

    my $line = $_;

    # we expect:
    #    start <argv0> [<argv1> [<argv2> [...]]]
    #
    # where argv0 might be a relative or absolute path, with
    # or without quotes, and platform dependent.  Replace argv0
    # with a token for HEREDOC matching in the test script.

    if ($line =~ m/^start/) {
	$line =~ /^start\s+(.*)/;
	my $argv = $1;
	$argv =~ m/(\'[^\']*\'|[^ ]+)\s+(.*)/;
	my $argv_0 = $1;
	my $argv_rest = $2;

	print "start _EXE_ $argv_rest\n";
    }
    elsif ($line =~ m/^cmd_path/) {
	# Likewise, the 'cmd_path' message breaks out argv[0].
	#
	# This line is only emitted when RUNTIME_PREFIX is defined,
	# so just omit it for testing purposes.
	# print "cmd_path _EXE_\n";
    }
    elsif ($line =~ m/^cmd_ancestry/) {
	# 'cmd_ancestry' is not implemented everywhere, so for portability's
	# sake, skip it when parsing normal.
	#
	# print "$line";
    }
    else {
	print "$line";
    }
}