new-func revision bf8267aa453e5d2a735ed732a043b77a0b355b20
d6fa26d0adaec6c910115be34fe7a5a5f402c14fMark Andrews#!/usr/bin/perl
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
f0aad5341752aefe5059832f6cf3abc3283c6e16Tinderbox User# Copyright (C) 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User# Permission to use, copy, modify, and/or distribute this software for any
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User# purpose with or without fee is hereby granted, provided that the above
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User# copyright notice and this permission notice appear in all copies.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
d6fa26d0adaec6c910115be34fe7a5a5f402c14fMark Andrews# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# PERFORMANCE OF THIS SOFTWARE.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# $Id$
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Given two CHANGES files, list [bug] entries present in the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# first one but not in the second one.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinuse FileHandle;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# $/ = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Read the CHANGES file $fn and return a hash of change
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# texts and categories indexed by change number.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Usersub readfile {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my ($fn) = @_;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my $fh = new FileHandle($fn, "r")
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein or die "open: $fn: $!";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
0ce865f8b2e652d6fe0c029e3538f4cc7e009fe1Tinderbox User my $changes = { };
f0aad5341752aefe5059832f6cf3abc3283c6e16Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my ($changeid, $category);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $changeid = "none";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $category = "none";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User while (<$fh>) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (m/^\s*(\d+)\.\s+\[(\w+)\]/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $changeid = $1;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User $category = $2;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User # print "*** $1 $2\n";
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User } elsif (m/---.* released ---/) {
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User $changeid = "none";
010a51c427bfb6ab658fc0056955a1a5b69810beTinderbox User $category = "none";
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User next;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User } elsif (m/^# /) {
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User $changeid = "none";
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User $category = "none";
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User next;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($changeid eq "none") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $changeid =~ s/\.$//;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User $changes->{$changeid}->{text} .= $_;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User $changes->{$changeid}->{category} = $category;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User }
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User return $changes;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein@ARGV == 2 || @ARGV == 3 or die "usage: $0 changes-file-1 changes-file-2\n";
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinmy $c1 = readfile($ARGV[0]);
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Usermy $c2 = readfile($ARGV[1]);
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userif (@ARGV == 3) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $c3 = readfile($ARGV[2]);
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User} else {
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User my $c3 = { };
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userforeach my $c (sort {$a <=> $b} keys %$c1) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my $category = $c1->{$c}->{category};
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my $text = $c1->{$c}->{text};
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($category eq "func" && !exists($c2->{$c}) && !exists($c3->{$c})) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print $c1->{$c}->{text};
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt }
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt}
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt