update_branches revision 35665db4e49e3e4c0e3776e635449f931f3732cf
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt#!/usr/local/bin/perl -w
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews#
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt# Copyright (C) 2005 Internet Systems Consortium, Inc. ("ISC")
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews#
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews# Permission to use, copy, modify, and distribute this software for any
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews# purpose with or without fee is hereby granted, provided that the above
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt# copyright notice and this permission notice appear in all copies.
2eeb74d1cf5355dd98f6d507a10086e16bb08c4bTinderbox User#
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
83a28ca274521e15086fc39febde507bcc4e145eMark Andrews# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# PERFORMANCE OF THIS SOFTWARE.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt# $Id: update_branches,v 1.5 2005/05/16 06:57:51 marka Exp $
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt%branches = ();
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt%whom = ();
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt%comments = ();
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt!system("cvs", "-d", "/proj/cvs/prod", "update", "doc/private/branches") || die "cannot update doc/private/branches: $!";
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt#
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt# load existing content
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt#
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Huntopen(BRANCHES, "<doc/private/branches") || die "can't open util/branches: $!";
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Huntwhile (<BRANCHES>) {
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt chomp;
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt next if (/^-/);
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt next if (/^Branch/);
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews $c = "";
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt if (m/\(.*\)/) {
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt $c = $_;
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt $c =~ s/.*(\(.*\)).*$/$1/;
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt s/\(.*\)//;
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt }
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt next if (/^\s*$/);
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt ($branch, $status, $who) = split;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt #$status = "new" if (!defined($status));
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $branches{$branch} = $status;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt #$who = "-" if (!defined($who));
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $whom{$branch} = $who;
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt $comments{$branch} = $c;
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt}
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Huntclose (BRANCHES);
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
30eec077db2bdcb6f2a0dc388a3cdde2ede75ec1Mark Andrews#
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt# Search repository for new branches.
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt#
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Huntopen(FILES, "find /proj/cvs/prod/bind9 -type f -name *,v -print |") || die "can't start find: $!";
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Huntwhile (<FILES>) {
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt chomp;
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt # print "file: $_\n"; # debug
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt # $file = $_; # save for branch debug below.
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt open(FILE, "<$_") || die "can't open $_: $!";
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt while (<FILE>) {
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt chomp;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt next unless m/^symbols$/; # skip until we find the tags
30eec077db2bdcb6f2a0dc388a3cdde2ede75ec1Mark Andrews while (<FILE>) {
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt chomp;
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt last if (m/^locks;/); # we are past the tags
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt next unless m/\.0\.\d$/; # skip if not a branch
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt s/\s(.*):.*/$1/; # extract label
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt if (!$branches{$_}) {
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt $branches{$_} = "new";
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt $whom{$_} = "";
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt $comments{$_} = "";
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt # print "branch: $_ $file\n"; # debug
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt }
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt }
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt last;
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt }
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt close(FILE);
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt}
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Huntclose(FILES);
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt#
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt# Write out updated version.
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt#
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Huntopen(BRANCHES, ">doc/private/newbranches") || die "can't open doc/private/branches: $!";
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Huntprint BRANCHES "\nBranch\t\t\t\tStatus\tWhom\t(Comments)\n";
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Huntprint BRANCHES "----------------------------------------------------------\n\n";
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Huntforeach $key (sort keys %branches) {
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt next if ($branches{$key} eq "closed");
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt print BRANCHES "$key";
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt $len = length($key);
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt if ($len >= 32) {
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt $tabs = 1;
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt } else {
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt $needed = int (32 - $len);
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt $tabs = int ($needed / 8);
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt if ($needed % 8 != 0) {
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $tabs++;
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt }
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt }
30eec077db2bdcb6f2a0dc388a3cdde2ede75ec1Mark Andrews for ($i = 0; $i < $tabs; $i++) {
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt printf BRANCHES "\t";
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt }
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt print BRANCHES "$branches{$key}\t";
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt print BRANCHES "$whom{$key}";
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt print BRANCHES "\t$comments{$key}" if ($comments{$key} ne "");
19977879caf8579a5fafb0cf3bf1cb983063796cEvan Hunt print BRANCHES "\n";
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt}
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Hunt
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Huntprint BRANCHES "\n\n";
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
b66b333f59cf51ef87f973084a5023acd9317fb2Evan Huntforeach $key (sort keys %branches) {
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt next if ($branches{$key} ne "closed");
print BRANCHES "$key";
$len = length($key);
if ($len >= 32) {
$tabs = 1;
} else {
$needed = int (32 - $len);
$tabs = int ($needed / 8);
if ($needed % 8 != 0) {
$tabs++;
}
}
for ($i = 0; $i < $tabs; $i++) {
printf BRANCHES "\t";
}
print BRANCHES "$branches{$key}";
print BRANCHES "\t\t$comments{$key}" if ($comments{$key} ne "");
print BRANCHES "\n";
}
close(BRANCHES);
#
# Update if changed.
#
if (system("cmp", "-s", "doc/private/newbranches", "doc/private/branches")) {
rename("doc/private/newbranches", "doc/private/branches") || die "Cannot rename: doc/private/newbranches -> doc/private/branches: $!";
!system("cvs", "-d", "/proj/cvs/prod", "commit", "-m", "auto update", "doc/private/branches") || die "cvs commit failed: $!";
} else {
unlink("doc/private/newbranches");
}