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