update_branches revision 648ba62b1f156cbca14d54d06c535385f1193d13
499b34cea04a46823d003d4c0520c8b03e8513cbBrian Wellington#!/usr/local/bin/perl -w
816e576f77e2c46df3e3d97d65822aa8aded7c4bDavid Lawrence#
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson# Copyright (C) 2005 Internet Systems Consortium, Inc. ("ISC")
69b641bf31d95fd79a50dcea2cdb0fcb23fe22c6David Lawrence#
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson# Permission to use, copy, modify, and distribute this software for any
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson# purpose with or without fee is hereby granted, provided that the above
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson# copyright notice and this permission notice appear in all copies.
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson#
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
0f7bbb64ea71e1226c34fb433731eebf4b395333Andreas Gustafsson# PERFORMANCE OF THIS SOFTWARE.
adb6b4397091d2380f0cb412c603816610638f95Brian Wellington
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson# $Id: update_branches,v 1.2 2005/05/16 04:27:57 marka Exp $
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson%branches = ();
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson%whom = ();
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson%comments = ();
59ddb53fd74be6c4d76536e45465f34f1a08b834Andreas Gustafsson
59ddb53fd74be6c4d76536e45465f34f1a08b834Andreas Gustafsson!system("cvs", "-d", "/proj/cvs/prod", "update", "doc/private/branches") || die "cannot update doc/private/branches: $!";
59ddb53fd74be6c4d76536e45465f34f1a08b834Andreas Gustafsson
59ddb53fd74be6c4d76536e45465f34f1a08b834Andreas Gustafsson#
59ddb53fd74be6c4d76536e45465f34f1a08b834Andreas Gustafsson# load existing content
59ddb53fd74be6c4d76536e45465f34f1a08b834Andreas Gustafsson#
35b61b8fb1f377ec9b68bbc8e4e43fbd2756a04dAndreas Gustafssonopen(BRANCHES, "<doc/private/branches") || die "can't open util/branches: $!";
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafssonwhile (<BRANCHES>) {
35b61b8fb1f377ec9b68bbc8e4e43fbd2756a04dAndreas Gustafsson chomp;
35b61b8fb1f377ec9b68bbc8e4e43fbd2756a04dAndreas Gustafsson next if (/----------/);
35b61b8fb1f377ec9b68bbc8e4e43fbd2756a04dAndreas Gustafsson next if (/Whom/);
35b61b8fb1f377ec9b68bbc8e4e43fbd2756a04dAndreas Gustafsson $c = "";
35b61b8fb1f377ec9b68bbc8e4e43fbd2756a04dAndreas Gustafsson if (m/\(.*\)/) {
a9568c0abbda42b95482d581647de0a950ed8438Andreas Gustafsson $c = $_;
a9568c0abbda42b95482d581647de0a950ed8438Andreas Gustafsson $c =~ s/.*(\(.*\)).*$/$1/;
5c62008dee307058a7f70511bf260fdea6f5b1d6Andreas Gustafsson s/\(.*\)//;
35b61b8fb1f377ec9b68bbc8e4e43fbd2756a04dAndreas Gustafsson }
074ae7bf0993ced96b32e3e85553a401f3f3eca9Andreas Gustafsson next if (/^\s*$/);
074ae7bf0993ced96b32e3e85553a401f3f3eca9Andreas Gustafsson ($branch, $status, $who) = split;
074ae7bf0993ced96b32e3e85553a401f3f3eca9Andreas Gustafsson #$status = "new" if (!defined($status));
074ae7bf0993ced96b32e3e85553a401f3f3eca9Andreas Gustafsson $branches{$branch} = $status;
074ae7bf0993ced96b32e3e85553a401f3f3eca9Andreas Gustafsson #$who = "-" if (!defined($who));
074ae7bf0993ced96b32e3e85553a401f3f3eca9Andreas Gustafsson $whom{$branch} = $who;
074ae7bf0993ced96b32e3e85553a401f3f3eca9Andreas Gustafsson $comments{$branch} = $c;
074ae7bf0993ced96b32e3e85553a401f3f3eca9Andreas Gustafsson}
074ae7bf0993ced96b32e3e85553a401f3f3eca9Andreas Gustafssonclose (BRANCHES);
074ae7bf0993ced96b32e3e85553a401f3f3eca9Andreas Gustafsson
074ae7bf0993ced96b32e3e85553a401f3f3eca9Andreas Gustafsson#
074ae7bf0993ced96b32e3e85553a401f3f3eca9Andreas Gustafsson# Search repository for new branches.
074ae7bf0993ced96b32e3e85553a401f3f3eca9Andreas Gustafsson#
074ae7bf0993ced96b32e3e85553a401f3f3eca9Andreas Gustafssonopen(FILES, "find /proj/cvs/prod/bind9 -type f -name *,v -print |") || die "can't start find: $!";
322445da85b6a318cb2506d216442b3e5af7c3c0Andreas Gustafssonwhile (<FILES>) {
533df4efdafcf7a8b7292a298f45df9ab7f7f7f9Mark Andrews chomp;
533df4efdafcf7a8b7292a298f45df9ab7f7f7f9Mark Andrews # print "file: $_\n"; # debug
a488e91e5dedfd055b6a6e6dc3018866478facceAndreas Gustafsson # $file = $_; # save for branch debug below.
a488e91e5dedfd055b6a6e6dc3018866478facceAndreas Gustafsson open(FILE, "<$_") || die "can't open $_: $!";
95940593a680fd37704b74849902ca7fd2ff8f2aAndreas Gustafsson while (<FILE>) {
322445da85b6a318cb2506d216442b3e5af7c3c0Andreas Gustafsson chomp;
692f5c282d13b6a0276e5a60c87ab4af013d3b80Mark Andrews next unless m/^symbols$/; # skip until we find the tags
692f5c282d13b6a0276e5a60c87ab4af013d3b80Mark Andrews while (<FILE>) {
692f5c282d13b6a0276e5a60c87ab4af013d3b80Mark Andrews chomp;
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson last if (m/^locks;/); # we are past the tags
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson next unless m/\.0\.\d$/; # skip if not a branch
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson s/\s(.*):.*/$1/; # extract label
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson if (!$branches{$_}) {
8f9d22f92aae318244392e217bd53c6173ee6079Andreas Gustafsson $branches{$_} = "new";
8f9d22f92aae318244392e217bd53c6173ee6079Andreas Gustafsson $whom{$_} = "";
8f9d22f92aae318244392e217bd53c6173ee6079Andreas Gustafsson $comments{$_} = "";
8f9d22f92aae318244392e217bd53c6173ee6079Andreas Gustafsson # print "branch: $_ $file\n"; # debug
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson }
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson }
8f9d22f92aae318244392e217bd53c6173ee6079Andreas Gustafsson last;
8f9d22f92aae318244392e217bd53c6173ee6079Andreas Gustafsson }
8f9d22f92aae318244392e217bd53c6173ee6079Andreas Gustafsson close(FILE);
8f9d22f92aae318244392e217bd53c6173ee6079Andreas Gustafsson}
8f9d22f92aae318244392e217bd53c6173ee6079Andreas Gustafssonclose(FILES);
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson
8f9d22f92aae318244392e217bd53c6173ee6079Andreas Gustafsson#
8f9d22f92aae318244392e217bd53c6173ee6079Andreas Gustafsson# Write out updated version.
8f9d22f92aae318244392e217bd53c6173ee6079Andreas Gustafsson#
8f9d22f92aae318244392e217bd53c6173ee6079Andreas Gustafssonopen(BRANCHES, ">doc/private/newbranches") || die "can't open doc/private/branches: $!";
8f9d22f92aae318244392e217bd53c6173ee6079Andreas Gustafssonprint BRANCHES "\nBranch\t\t\t\tStatus\tWhom\n";
8f9d22f92aae318244392e217bd53c6173ee6079Andreas Gustafssonprint BRANCHES "-------------------------------------------------------\n\n";
8f9d22f92aae318244392e217bd53c6173ee6079Andreas Gustafssonforeach $key (sort keys %branches) {
8f9d22f92aae318244392e217bd53c6173ee6079Andreas Gustafsson next if ($branches{$key} eq "closed");
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson print BRANCHES "$key";
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson $len = length($key);
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson if ($len >= 32) {
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson $tabs = 1;
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson } else {
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson $needed = int (32 - $len);
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson $tabs = int ($needed / 8);
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson if ($needed % 8 != 0) {
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson $tabs++;
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson }
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson }
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson for ($i = 0; $i < $tabs; $i++) {
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson printf BRANCHES "\t";
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson }
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson print BRANCHES "$branches{$key}\t";
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson print BRANCHES "$whom{$key}";
4e0ab18258915b14c163aa9087390402f5ff599bAndreas Gustafsson print BRANCHES "\t$comments{$key}" if ($comments{$key} ne "");
4e0ab18258915b14c163aa9087390402f5ff599bAndreas Gustafsson print BRANCHES "\n";
4e0ab18258915b14c163aa9087390402f5ff599bAndreas Gustafsson}
4e0ab18258915b14c163aa9087390402f5ff599bAndreas Gustafsson
4e0ab18258915b14c163aa9087390402f5ff599bAndreas Gustafssonprint BRANCHES "\n\n";
4e0ab18258915b14c163aa9087390402f5ff599bAndreas Gustafsson
4e0ab18258915b14c163aa9087390402f5ff599bAndreas Gustafssonforeach $key (sort keys %branches) {
4e0ab18258915b14c163aa9087390402f5ff599bAndreas Gustafsson next if ($branches{$key} ne "closed");
4e0ab18258915b14c163aa9087390402f5ff599bAndreas Gustafsson print BRANCHES "$key";
4e0ab18258915b14c163aa9087390402f5ff599bAndreas Gustafsson $len = length($key);
4e0ab18258915b14c163aa9087390402f5ff599bAndreas Gustafsson if ($len >= 32) {
4e0ab18258915b14c163aa9087390402f5ff599bAndreas Gustafsson $tabs = 1;
8011cb06c90d9b87e241b3efeb8a2eca2b8edddcAndreas Gustafsson } else {
8011cb06c90d9b87e241b3efeb8a2eca2b8edddcAndreas Gustafsson $needed = int (32 - $len);
a488e91e5dedfd055b6a6e6dc3018866478facceAndreas Gustafsson $tabs = int ($needed / 8);
a488e91e5dedfd055b6a6e6dc3018866478facceAndreas Gustafsson if ($needed % 8 != 0) {
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson $tabs++;
d8417b5f3406f4ace0f3bdb228b05a7b701976d6Andreas Gustafsson }
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson }
5dbccb84737c96fef00663919c83ee8f3d6e887aAndreas Gustafsson for ($i = 0; $i < $tabs; $i++) {
5dbccb84737c96fef00663919c83ee8f3d6e887aAndreas Gustafsson printf BRANCHES "\t";
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson }
a488e91e5dedfd055b6a6e6dc3018866478facceAndreas Gustafsson print BRANCHES "$branches{$key}";
a488e91e5dedfd055b6a6e6dc3018866478facceAndreas Gustafsson print BRANCHES "\t\t$comments{$key}" if ($comments{$key} ne "");
a488e91e5dedfd055b6a6e6dc3018866478facceAndreas Gustafsson print BRANCHES "\n";
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson}
a488e91e5dedfd055b6a6e6dc3018866478facceAndreas Gustafssonclose(BRANCHES);
a488e91e5dedfd055b6a6e6dc3018866478facceAndreas Gustafsson
a488e91e5dedfd055b6a6e6dc3018866478facceAndreas Gustafsson#
a488e91e5dedfd055b6a6e6dc3018866478facceAndreas Gustafsson# Update if changed.
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson#
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafssonif (system("cmp", "-s", "doc/private/newbranches", "doc/private/branches")) {
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson rename("doc/private/newbranches", "doc/private/branches") || die "Cannot rename: doc/private/newbranches -> doc/private/branches: $!";
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson !system("cvs", "-d", "/proj/cvs/prod", "commit", "-m", "auto update", "doc/private/branches") || die "cvs commit failed: $!";
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson}
9769d3146777ca71af80b459ecec1ef8e2d05950Andreas Gustafsson