update_branches revision bf8267aa453e5d2a735ed732a043b77a0b355b20
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#!/usr/local/bin/perl -w
11e9368a226272085c337e9e74b79808c16fbdbaTinderbox User#
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews# Copyright (C) 2005, 2007, 2012 Internet Systems Consortium, Inc. ("ISC")
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
4a14ce5ba00ab7bc55c99ffdcf59c7a4ab902721Automatic Updater# Permission to use, copy, modify, and/or distribute this software for any
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# 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
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# 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.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# $Id$
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Track which branches are still open or not in the bind9 cvs repository.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# This is done so that work that is "in progress" (active) doesn't get
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# so easily forgotten about.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# This script updates doc/private/branches by adding new branches and moving
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# closed branches to the end of the file. New branches are found by walking
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# the cvs repository and extracting the new branches from the header fields
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# of the files there.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# doc/private/branches has one line per branch in the following field order:
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews# name, status, to whom the branch belongs and comments. Comments are
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# in '(',')'. The first three field are single words.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Note: this is intended to be run on the machine hosting the CVS repository.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein%branches = ();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein%whom = ();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein%comments = ();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein%history = ();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein%dates = ();
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User$repository = "/proj/cvs/prod";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User$module = "bind9";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Make sure we have a up to date copy. If the previous ran failed for
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# any reason remove it (-C).
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein!system("cvs", "-d", $repository, "update", "-C", "doc/private/branches") || die "cannot update doc/private/branches: $!";
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# load existing content
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinopen(BRANCHES, "<doc/private/branches") || die "can't open util/branches: $!";
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userwhile (<BRANCHES>) {
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt my $branch;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my $status;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User my $who;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt chomp;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next if (/^-/);
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User next if (/^Branch/);
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User next if (/^\s/);
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User $c = "";
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User if (m://.*:) {
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User $c = $_;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User $c =~ s:.*?//\s*(.*)$:$1:;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User s:(.*?)//.*:$1:;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User } else {
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User #
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User # look for old style comment
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein #
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User if (m/\(.*\)/) {
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $c = $_;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $c =~ s/.*\((.*)\).*$/$1/;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt s/\(.*\)//;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt s/\s*$//;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User next if (/^\s*$/);
a1ad6695ed6f988406cf155aa26376f84f73bcb9Automatic Updater ($branch, $status, $who) = split;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $status = "new" if (!defined($status));
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User $branches{$branch} = $status;
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater $who = "" if (!defined($who));
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User $whom{$branch} = $who;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $comments{$branch} = $c;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntclose (BRANCHES);
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# T 1999-03-15 21:15 +0000 vixie bind [ietf44:A]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinopen(HISTORY, "cvs history -T -a 2> /dev/null |") || die("can't get history");
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Userwhile (<HISTORY>) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my $tag;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User my $date;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my $time;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt my $tz;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User my $who;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt my $mod;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User my $branch;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User chomp;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User s/[][]//g;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt s/:[^ \t]+$//;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt s/\s+/ /g;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt ($tag, $date, $time, $tz, $who, $mod, $branch) = split;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt next if ($mod ne $module );
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt next if ($tag ne "T" );
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt next if (exists($history{$branch}));
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $history{$branch} = $who;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $dates{$branch} = "$date $time $tz";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # print "$_\n";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User}
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrewsclose (HISTORY);
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews# Search repository for new branches.
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# New branches have the following format "name:<revision>.0.#"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# where # is the number of potential branches from this the revision.
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinopen(FILES, "find $repository/$module -type f -name *,v -print |") || die "can't start find: $!";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userwhile (<FILES>) {
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews chomp;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # print "file: $_\n"; # debug
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # $file = $_; # save for branch debug below.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein s:^$repository/::;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein s:/Attic/([^/]*)$:/$1:;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User s:,v$::;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein #
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # use cvs so that the file is locked.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User #
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews #print "cvs -d $repository rlog -h $_\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein open(FILE, "cvs -d $repository rlog -h $_|") || die "can't start cvs rlog -h $_: $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while (<FILE>) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User chomp;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next unless m/^symbolic names:$/; # skip until we find the tags
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt while (<FILE>) {
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt chomp;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein last if (m/^locks;/); # we are past the tags
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein last if (m/^keyword/); # we are past the tags
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next unless m/\.0\.\d+$/; # skip if not a branch
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein s/\s(.*):.*/$1/; # extract label
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (!$branches{$_}) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $branches{$_} = "new";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (exists($history{$_})) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $whom{$_} = $history{$_};
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $comments{$_} = $dates{$_};
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $whom{$_} = "";
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $comments{$_} = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # print "branch: $_ $file\n"; # debug
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein chomp while (<FILE>); # let cvs rlog exit normally.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(FILE);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinclose(FILES);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Write out updated version.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinopen(BRANCHES, ">doc/private/newbranches") || die "can't open doc/private/branches: $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinprint BRANCHES "\nBranch\t\t\t\tStatus\tWhom\t// Comments\n";
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntprint BRANCHES "-----------------------------------------------------------\n\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinprint BRANCHES "\t\t\t\tnew\t\tnot yet classified\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinprint BRANCHES "\t\t\t\topen\t\tdevelopement branch\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinprint BRANCHES "\t\t\t\tactive\t\tnot a development branch\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinprint BRANCHES "\t\t\t\treview\t\tready for review\n";
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrewsprint BRANCHES "\t\t\t\tprivate\t\tprivate branch\n";
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrewsprint BRANCHES "\t\t\t\tclosed\t\tfinished with\n";
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrewsprint BRANCHES "\n";
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrewsforeach $key (sort keys %branches) {
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews next if ($branches{$key} eq "closed");
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews print BRANCHES "$key";
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $len = length($key);
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews if ($len >= 32) {
b05bdb520d83f7ecaad708fe305268c3420be01dMark Andrews $tabs = 1;
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews } else {
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $needed = int (32 - $len);
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $tabs = int ($needed / 8);
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews if ($needed % 8 != 0) {
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $tabs++;
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews }
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein for ($i = 0; $i < $tabs; $i++) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein printf BRANCHES "\t";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print BRANCHES "$branches{$key}\t";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print BRANCHES "$whom{$key}";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print BRANCHES "\t// $comments{$key}" if ($comments{$key} ne "");
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print BRANCHES "\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinprint BRANCHES "\n\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinforeach $key (sort keys %branches) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next if ($branches{$key} ne "closed");
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater print BRANCHES "$key";
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater $len = length($key);
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater if ($len >= 32) {
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater $tabs = 1;
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater } else {
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater $needed = int (32 - $len);
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater $tabs = int ($needed / 8);
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater if ($needed % 8 != 0) {
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater $tabs++;
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater }
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater }
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater for ($i = 0; $i < $tabs; $i++) {
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater printf BRANCHES "\t";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print BRANCHES "$branches{$key}";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print BRANCHES "\t\t// $comments{$key}" if ($comments{$key} ne "");
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print BRANCHES "\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinclose(BRANCHES);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# Update if changed.
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinif (system("cmp", "-s", "doc/private/newbranches", "doc/private/branches")) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rename("doc/private/newbranches", "doc/private/branches") || die "Cannot rename: doc/private/newbranches -> doc/private/branches: $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein !system("cvs", "-d", $repository, "commit", "-m", "auto update", "doc/private/branches") || die "cvs commit failed: $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein} else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein unlink("doc/private/newbranches");
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein