new-func revision 70e5a7403f0e0a3bd292b8287c5fed5772c15270
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#!/usr/bin/perl
297be3708069ef31814d6d75c0d71a50a78feb03Mark Andrews#
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews# Copyright (C) 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Permission to use, copy, modify, and/or distribute this software for any
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# purpose with or without fee is hereby granted, provided that the above
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# copyright notice and this permission notice appear in all copies.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# 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
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# PERFORMANCE OF THIS SOFTWARE.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater# $Id: new-func,v 1.4 2007/06/19 23:47:24 tbox Exp $
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#
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews
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
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinsub readfile {
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews my ($fn) = @_;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my $fh = new FileHandle($fn, "r")
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein or die "open: $fn: $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my $changes = { };
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my ($changeid, $category);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $changeid = "none";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $category = "none";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while (<$fh>) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (m/^\s*(\d+)\.\s+\[(\w+)\]/) {
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews $changeid = $1;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $category = $2;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # print "*** $1 $2\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif (m/---.* released ---/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $changeid = "none";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $category = "none";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater } elsif (m/^# /) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $changeid = "none";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $category = "none";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($changeid eq "none") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $changeid =~ s/\.$//;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $changes->{$changeid}->{text} .= $_;
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater $changes->{$changeid}->{category} = $category;
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater return $changes;
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater}
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater@ARGV == 2 || @ARGV == 3 or die "usage: $0 changes-file-1 changes-file-2\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updatermy $c1 = readfile($ARGV[0]);
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updatermy $c2 = readfile($ARGV[1]);
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updaterif (@ARGV == 3) {
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater $c3 = readfile($ARGV[2]);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein} else {
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater my $c3 = { };
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
98b5a9d1099f72169c90de39712fc4f63e9d990eAutomatic Updaterforeach my $c (sort {$a <=> $b} keys %$c1) {
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater my $category = $c1->{$c}->{category};
c6d486af36165da7eb970354981d145249e342e4Mark Andrews my $text = $c1->{$c}->{text};
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($category eq "func" && !exists($c2->{$c}) && !exists($c3->{$c})) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print $c1->{$c}->{text};
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater}
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater