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