diff options
author | flz <flz@FreeBSD.org> | 2005-04-12 17:22:59 +0800 |
---|---|---|
committer | flz <flz@FreeBSD.org> | 2005-04-12 17:22:59 +0800 |
commit | f6c14f63fac36d359b0c9da825a9a64e8c1b7f11 (patch) | |
tree | 204e8ed8315ca6c29287b2f63d5a303cfb1b2a19 /Tools | |
parent | 385989c2332a146b0d788cbe0be605487cf17e9c (diff) | |
download | freebsd-ports-gnome-f6c14f63fac36d359b0c9da825a9a64e8c1b7f11.tar.gz freebsd-ports-gnome-f6c14f63fac36d359b0c9da825a9a64e8c1b7f11.tar.zst freebsd-ports-gnome-f6c14f63fac36d359b0c9da825a9a64e8c1b7f11.zip |
- Add bump_revision.pl, a small script to bump the PORTREVISION variable
of ports which are depending on a port with a changed shared lib version.
Edwin dedicates this script to his son Dirk, born few days ago :)
Congrats (again) !
PR: ports/63915
Submitted by: edwin
Diffstat (limited to 'Tools')
-rw-r--r-- | Tools/scripts/README | 4 | ||||
-rwxr-xr-x | Tools/scripts/bump_revision.pl | 190 |
2 files changed, 193 insertions, 1 deletions
diff --git a/Tools/scripts/README b/Tools/scripts/README index 307ca1230178..200de58d33af 100644 --- a/Tools/scripts/README +++ b/Tools/scripts/README @@ -1,7 +1,9 @@ $FreeBSD$ addport - replacement for easy-import - +bump_revision.pl - Small script to bump the PORTREVISION variable of ports + which are depending on a port with a changed shared lib + version. consistency-check - check whether all your ports are installed properly, what files have changed, and what new files there are. check-latest-link - search for duplicate LATEST_LINK values and send nag diff --git a/Tools/scripts/bump_revision.pl b/Tools/scripts/bump_revision.pl new file mode 100755 index 000000000000..f3a5b5a4e5f9 --- /dev/null +++ b/Tools/scripts/bump_revision.pl @@ -0,0 +1,190 @@ +#!/usr/bin/perl -w + +# $FreeBSD$ + +# +# MAINTAINER= edwin@freebsd.org +# + +use Getopt::Std; +use strict; +use Cwd; +use Data::Dumper; + +use vars qw/$opt_i $opt_u/; + +sub usage { + print <<EOF; +Usage: $0 [options] [<category>/]<portname> + + -u <username> - Your freebsd.org username. Defaults to \$ENV{USER}. + -i <filename> - Use this for INDEX name. Defaults to /usr/ports/INDEX. + +Questions, suggestions etc -> edwin\@freebsd.org +EOF + exit 1; +} + +my $INDEX="/usr/ports/INDEX"; +my $USER=$ENV{USER}; +{ + $opt_i=""; + $opt_u=""; + getopts("i:u:"); + $INDEX=$opt_i if ($opt_i); + $USER=$opt_u if ($opt_u); + + die "$INDEX doesn't seem to exist. Please check the value supplied with -i or use -i." if (! -f $INDEX); +} +my $PORT=$ARGV[0]; +usage() if (!$PORT); + +my $CVSROOT=":ext:$USER\@pcvs.freebsd.org:/home/pcvs"; + +# +# Read the index, save some interesting keys +# +my %index=(); +{ + print "Reading $INDEX\n"; + open(FIN,"$INDEX") or die "Cannot open $INDEX for reading."; + my @lines=<FIN>; + chomp(@lines); + close(FIN); + + foreach my $line (@lines) { + my @a=split(/\|/,$line); + my @b=split(/\//,$a[1]); + + my $port=$b[-2]."/".$b[-1]; + + $index{$port}{portname}=$b[-1]; + $index{$port}{portnameversion}=$a[0]; + $index{$port}{portdir}=$a[1]; + $index{$port}{comment}=$a[3]; + $index{$port}{deps}=(); + + if ($a[8]) { + @b=split(" ",$a[8]); + foreach my $b (@b) { + $index{$port}{deps}{$b}=1; + } + } + } + my @k=keys(%index); + print "- Processed ",$#k+1," entries.\n"; +} + +# +# See if the port does really exists. +# If specified as category/portname, that should be enough. +# If specified as portname, check all indexes for existence or duplicates. +# +if (defined $index{$PORT}) { + # all okay +} else { + my $count=0; + my $n=""; + foreach my $p (keys(%index)) { + if ($p=~/\/$PORT$/) { + $n.=" " if ($n); + $n.=$p; + $count++; + } + } + if ($count==0) { + die "Cannot find ${PORT} in ${INDEX}."; + } elsif ($count==1) { + $PORT=$n; + } else { + die "Found ${PORT} more than once in ${INDEX}: $n. Try category/portname."; + } +} + +my $PORTNAMEVERSION=$index{$PORT}{portnameversion}; +print "Found $PORT as $PORTNAMEVERSION\n"; + +# +# Figure out all the ports depending on this one. +# +my %DEPPORTS=(); +my $ports=""; +{ + print "Searching for ports depending on $PORT\n"; + foreach my $p (keys(%index)) { + if (defined $index{$p}{deps}{$PORTNAMEVERSION}) { + $DEPPORTS{$p}=1; + $ports.=" " if ($ports); + $ports.="ports/$p"; + } + } + my @k=keys(%DEPPORTS); + print "- Found ",$#k+1," ports depending on it.\n"; +} + +# +# Create a temp directory and cvs checkout the ports +# (don't do error checking, too complicated right now) +# +my $TMPDIR=getcwd()."/.tmpdir.$$"; +{ + mkdir($TMPDIR,0755); + chdir($TMPDIR); + `cvs -d $CVSROOT co -T $ports`; +} +chdir($TMPDIR); + +# +# Bump portrevisions +# +{ + print "Updating Makefiles\n"; + foreach my $p (keys(%DEPPORTS)) { + my $makefile="ports/$p/Makefile"; + + print "- Updating Makefile of $p\n"; + + if (!open(FIN,$makefile)) { + print "-- Cannot open Makefile of $p, ignored.\n"; + next; + } + my @lines=<FIN>; + close(FIN); + chomp(@lines); + + my $revision=1; + + foreach my $line (@lines) { + last if ($line=~/^MAINTAINER/); + $revision+=$1 if ($line=~/PORTREVISION=[ \t](\d+)$/); + } + + my $printedrev=0; + open(FOUT,">$makefile"); + foreach my $line (@lines) { + if (!$printedrev) { + if ($line=~/^CATEGORIES=/ || $line=~/^PORTREVISION=/) { + print FOUT "PORTREVISION= $revision\n"; + $printedrev=1; + } + } + next if ($line=~/^PORTREVISION=/); + print FOUT "$line\n"; + } + close(FOUT); + } +} + +# +# Commit the changes. Not automated. +# +print <<EOF; +All portrevisions have been updated. You are nearly done, only one thing +remains: The commiting in the ports tree. This program is not going to do +that for you, you have to do it manually. + +\$ cd $TMPDIR/ports +\$ cvs commit + +Then, remove the temp directory. +EOF |