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