update_branches revision cbb94d52f98b48e8c3a8866dbf8c67860764f349
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#!/usr/local/bin/perl -w
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Copyright (C) 2005 Internet Systems Consortium, Inc. ("ISC")
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User#
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User# Permission to use, copy, modify, and distribute this software for any
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User# purpose with or without fee is hereby granted, provided that the above
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# copyright notice and this permission notice appear in all copies.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
cd32f419a8a5432fbb139f56ee73cbf68b9350ccTinderbox User# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# 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
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# PERFORMANCE OF THIS SOFTWARE.
cd32f419a8a5432fbb139f56ee73cbf68b9350ccTinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# $Id: update_branches,v 1.7 2005/05/16 07:03:47 marka Exp $
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein%branches = ();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein%whom = ();
cd32f419a8a5432fbb139f56ee73cbf68b9350ccTinderbox User%comments = ();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein!system("cvs", "-d", "/proj/cvs/prod", "update", "doc/private/branches") || die "cannot update doc/private/branches: $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews# load existing content
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinopen(BRANCHES, "<doc/private/branches") || die "can't open util/branches: $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinwhile (<BRANCHES>) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein chomp;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next if (/^-/);
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User next if (/^Branch/);
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $c = "";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if (m/\(.*\)/) {
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $c = $_;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $c =~ s/.*(\(.*\)).*$/$1/;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User s/\(.*\)//;
c2258eedf2d9d0207b45b90014f8fde5413b41a3Tinderbox User }
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt s/\s$//;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt next if (/^\s*$/);
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt ($branch, $status, $who) = split;
a1ff871f78b7d907d6fc3a382beea2a640fe8423Tinderbox User $status = "new" if (!defined($status));
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $branches{$branch} = $status;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $who = "" if (!defined($who));
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $whom{$branch} = $who;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $comments{$branch} = $c;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt}
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntclose (BRANCHES);
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Search repository for new branches.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User#
f9ce6280cec79deb16ff6d9807aa493ff23e10d9Tinderbox Useropen(FILES, "find /proj/cvs/prod/bind9 -type f -name *,v -print |") || die "can't start find: $!";
c2258eedf2d9d0207b45b90014f8fde5413b41a3Tinderbox Userwhile (<FILES>) {
f9ce6280cec79deb16ff6d9807aa493ff23e10d9Tinderbox User chomp;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt # print "file: $_\n"; # debug
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt # $file = $_; # save for branch debug below.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User open(FILE, "<$_") || die "can't open $_: $!";
46472a450e043434d78fa18edc73bca8c47f3981Tinderbox User while (<FILE>) {
46472a450e043434d78fa18edc73bca8c47f3981Tinderbox User chomp;
e285c11870c6263cd79b418e104c7eb3e2d96952Tinderbox User next unless m/^symbols$/; # skip until we find the tags
46472a450e043434d78fa18edc73bca8c47f3981Tinderbox User while (<FILE>) {
46472a450e043434d78fa18edc73bca8c47f3981Tinderbox User chomp;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt last if (m/^locks;/); # we are past the tags
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User next unless m/\.0\.\d$/; # skip if not a branch
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User s/\s(.*):.*/$1/; # extract label
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt if (!$branches{$_}) {
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $branches{$_} = "new";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $whom{$_} = "";
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $comments{$_} = "";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User # print "branch: $_ $file\n"; # debug
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt }
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt }
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt last;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt }
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User close(FILE);
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User}
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntclose(FILES);
a1ff871f78b7d907d6fc3a382beea2a640fe8423Tinderbox User
a1ff871f78b7d907d6fc3a382beea2a640fe8423Tinderbox User#
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User# Write out updated version.
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User#
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox Useropen(BRANCHES, ">doc/private/newbranches") || die "can't open doc/private/branches: $!";
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox Userprint BRANCHES "\nBranch\t\t\t\tStatus\tWhom\t(Comments)\n";
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox Userprint BRANCHES "----------------------------------------------------------\n\n";
a1ff871f78b7d907d6fc3a382beea2a640fe8423Tinderbox Userforeach $key (sort keys %branches) {
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User next if ($branches{$key} eq "closed");
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User print BRANCHES "$key";
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User $len = length($key);
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User if ($len >= 32) {
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User $tabs = 1;
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User } else {
a1ff871f78b7d907d6fc3a382beea2a640fe8423Tinderbox User $needed = int (32 - $len);
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User $tabs = int ($needed / 8);
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User if ($needed % 8 != 0) {
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User $tabs++;
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User }
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User }
a1ff871f78b7d907d6fc3a382beea2a640fe8423Tinderbox User for ($i = 0; $i < $tabs; $i++) {
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User printf BRANCHES "\t";
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User }
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User print BRANCHES "$branches{$key}\t";
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User print BRANCHES "$whom{$key}";
8a48b6b9b6fa8486f24b22d1972b2b6ebb36a4a4Tinderbox User print BRANCHES "\t$comments{$key}" if ($comments{$key} ne "");
a1ff871f78b7d907d6fc3a382beea2a640fe8423Tinderbox User print BRANCHES "\n";
a1ff871f78b7d907d6fc3a382beea2a640fe8423Tinderbox User}
a1ff871f78b7d907d6fc3a382beea2a640fe8423Tinderbox User
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntprint BRANCHES "\n\n";
6b7cba2b10d6cb5363d94b434b0d22ecfb33a6f3Tinderbox User
1700442a7751c2bbdafe2d039cebbd8316496957Tinderbox Userforeach $key (sort keys %branches) {
e2f974003e61b59321a99f01a6f43576d9b76231Tinderbox User next if ($branches{$key} ne "closed");
e2f974003e61b59321a99f01a6f43576d9b76231Tinderbox User print BRANCHES "$key";
576bce9d7331498ca5453f8743f94ed8e2e59d9fTinderbox User $len = length($key);
576bce9d7331498ca5453f8743f94ed8e2e59d9fTinderbox User if ($len >= 32) {
6b7cba2b10d6cb5363d94b434b0d22ecfb33a6f3Tinderbox User $tabs = 1;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User } else {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $needed = int (32 - $len);
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $tabs = int ($needed / 8);
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt if ($needed % 8 != 0) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $tabs++;
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User }
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User }
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User for ($i = 0; $i < $tabs; $i++) {
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User printf BRANCHES "\t";
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User }
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User print BRANCHES "$branches{$key}";
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User print BRANCHES "\t\t$comments{$key}" if ($comments{$key} ne "");
1ffe3f29e3cd0d8355500e9fd34de918ad9b4a01Tinderbox User print BRANCHES "\n";
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User}
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox Userclose(BRANCHES);
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User#
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User# Update if changed.
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User#
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox Userif (system("cmp", "-s", "doc/private/newbranches", "doc/private/branches")) {
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User rename("doc/private/newbranches", "doc/private/branches") || die "Cannot rename: doc/private/newbranches -> doc/private/branches: $!";
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User !system("cvs", "-d", "/proj/cvs/prod", "commit", "-m", "auto update", "doc/private/branches") || die "cvs commit failed: $!";
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User} else {
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User unlink("doc/private/newbranches");
260e8e04b0dc24cb884c789b5d9eb046457f264eTinderbox User}
1ffe3f29e3cd0d8355500e9fd34de918ad9b4a01Tinderbox User