diff options
author | mef <mef@pkgsrc.org> | 2014-12-15 23:25:54 +0000 |
---|---|---|
committer | mef <mef@pkgsrc.org> | 2014-12-15 23:25:54 +0000 |
commit | d5a8afeb3873ed1143f51c02c02ebd8ccc0ec305 (patch) | |
tree | 92c3c95d7abc8adb2d5eaf78d28ff4fa4b378767 /pkgtools/revbump | |
parent | 562e7522a61d515f49b95b562b93853d8ed369b4 (diff) | |
download | pkgsrc-d5a8afeb3873ed1143f51c02c02ebd8ccc0ec305.tar.gz |
Update 2.9 to 2.10
This update is proposed as
http://mail-index.netbsd.org/tech-pkg/2014/12/08/msg013888.html
- (revbump) convert internal to two pass, and reduce fallout
- (replace-commonbump) new command to replace 'commonbump' to
'commonbump.replaced'
- (check-cvs-diff) new command to check 'cvs diff -u' if py27,py34, ruby200
and replace it if exists
Thanks wiz@ and gdt@ for advice.
Diffstat (limited to 'pkgtools/revbump')
-rw-r--r-- | pkgtools/revbump/Makefile | 22 | ||||
-rw-r--r-- | pkgtools/revbump/PLIST | 6 | ||||
-rw-r--r-- | pkgtools/revbump/files/check-cvs-diff | 94 | ||||
-rw-r--r-- | pkgtools/revbump/files/check-cvs-diff.1 | 77 | ||||
-rw-r--r-- | pkgtools/revbump/files/replace-commonbump | 233 | ||||
-rw-r--r-- | pkgtools/revbump/files/replace-commonbump.1 | 106 | ||||
-rw-r--r-- | pkgtools/revbump/files/revbump | 54 | ||||
-rw-r--r-- | pkgtools/revbump/files/revbump.1 | 38 |
8 files changed, 581 insertions, 49 deletions
diff --git a/pkgtools/revbump/Makefile b/pkgtools/revbump/Makefile index 97be6a9ca83..67f7f0a718c 100644 --- a/pkgtools/revbump/Makefile +++ b/pkgtools/revbump/Makefile @@ -1,6 +1,6 @@ -# $NetBSD: Makefile,v 1.31 2014/10/09 14:06:50 wiz Exp $ +# $NetBSD: Makefile,v 1.32 2014/12/15 23:25:54 mef Exp $ -PKGNAME= revbump-2.9 +PKGNAME= revbump-2.10 CATEGORIES= pkgtools MAINTAINER= wiz@NetBSD.org @@ -16,19 +16,15 @@ USE_LANGUAGES= # empty INSTALLATION_DIRS= bin ${PKGMANDIR}/man1 do-build: +.for i in blbump finddepends revbump replace-commonbump check-cvs-diff ${SED} -e "s!@PERL@!${PERL5}!g" -e "s! make ! ${MAKE} !g" \ - ${FILESDIR}/blbump > ${WRKDIR}/blbump - ${SED} -e "s!@PERL@!${PERL5}!g" -e "s! make ! ${MAKE} !g" \ - ${FILESDIR}/finddepends > ${WRKDIR}/finddepends - ${SED} -e "s!@PERL@!${PERL5}!g" -e "s! make ! ${MAKE} !g" \ - ${FILESDIR}/revbump > ${WRKDIR}/revbump + ${FILESDIR}/${i} > ${WRKDIR}/${i} +.endfor do-install: - ${INSTALL_SCRIPT} ${WRKDIR}/blbump ${DESTDIR}${PREFIX}/bin - ${INSTALL_MAN} ${FILESDIR}/blbump.1 ${DESTDIR}${PREFIX}/${PKGMANDIR}/man1 - ${INSTALL_SCRIPT} ${WRKDIR}/finddepends ${DESTDIR}${PREFIX}/bin - ${INSTALL_MAN} ${FILESDIR}/finddepends.1 ${DESTDIR}${PREFIX}/${PKGMANDIR}/man1 - ${INSTALL_SCRIPT} ${WRKDIR}/revbump ${DESTDIR}${PREFIX}/bin - ${INSTALL_MAN} ${FILESDIR}/revbump.1 ${DESTDIR}${PREFIX}/${PKGMANDIR}/man1 +.for i in blbump finddepends revbump replace-commonbump check-cvs-diff + ${INSTALL_SCRIPT} ${WRKDIR}/${i} ${DESTDIR}${PREFIX}/bin + ${INSTALL_MAN} ${FILESDIR}/${i}.1 ${DESTDIR}${PREFIX}/${PKGMANDIR}/man1 +.endfor .include "../../mk/bsd.pkg.mk" diff --git a/pkgtools/revbump/PLIST b/pkgtools/revbump/PLIST index b199687f76b..a5ba91bf9b3 100644 --- a/pkgtools/revbump/PLIST +++ b/pkgtools/revbump/PLIST @@ -1,7 +1,11 @@ -@comment $NetBSD: PLIST,v 1.3 2006/03/05 23:35:49 wiz Exp $ +@comment $NetBSD: PLIST,v 1.4 2014/12/15 23:25:54 mef Exp $ bin/blbump +bin/check-cvs-diff bin/finddepends +bin/replace-commonbump bin/revbump man/man1/blbump.1 +man/man1/check-cvs-diff.1 man/man1/finddepends.1 +man/man1/replace-commonbump.1 man/man1/revbump.1 diff --git a/pkgtools/revbump/files/check-cvs-diff b/pkgtools/revbump/files/check-cvs-diff new file mode 100644 index 00000000000..417af7a41ba --- /dev/null +++ b/pkgtools/revbump/files/check-cvs-diff @@ -0,0 +1,94 @@ +#!@PERL@ -w +# -*- perl -*- +# +# read output of (cd /usr/pkgsrc; cvs diff -u ) and check if +# py{27,34} and ruby200 string are left in buildlink3.mk. +# They are then modified to Variable representation. +#" +use strict; +use Getopt::Std; +our(@ARGV); +my (%opts); + +my($my_name) = $0; +$my_name =~ s#(.*)/##; + +sub usage(){ + print <<HELP; +$my_name: + Read cvs diff -u output (of named file) and substitute + if the string py27, py34 or ruby200 is found in the corresponding + changes in diff. +Synopsys: + $my_name [-h] [-p pkgsrc_dir] [-v] [cvs-diff-u_output-file] +Where: + -h Show this help + -p pkgsrc directory other than /usr/pkgsrc + -v verbose (not actually implemented yet) + cvs-diff-u_output_file: + The name of input. Usually the file including 'cvs diff -u' + output (default cvs-diff) +See Also: + revbump(1) for how to use it. +HELP +} + +sub main() { + my ($PKGSRCDIR) = '/usr/pkgsrc'; + my ($CVS_DIFF) = 'cvs-diff'; + my ($file_to_edit); + my ($stay, $mod) = (0,0); + my ($Makefile, $buildlink3, $other) = (0, 0, 0); + + getopts('hvp:',\%opts); + if ($ARGV[0]) { $CVS_DIFF = $ARGV[0]} + if ($opts{'p'}) { $PKGSRCDIR = $opts{'p'}; } + if ($opts{'h'}) { usage() ; exit ;} + + # for using rename, unlink + chdir $PKGSRCDIR; + + open(CVS_DIFF, $CVS_DIFF) || die "Problem opening file $CVS_DIFF: $!\n"; + while(<CVS_DIFF>){ + # Looking for the +++ filename line in cvs diff (supposed to use 'cvs diff -u') + $file_to_edit = ''; + if ( /^\+\+\+ (\S+)/) { + $file_to_edit = $1; } + if ( $file_to_edit && -f $file_to_edit ) { + if ( $file_to_edit =~ /Makefile$/ ) { $Makefile++;} + elsif ( $file_to_edit =~ /buildlink3.mk$/ ) { $buildlink3++; + # print __LINE__, ' ', $file_to_edit,"\n"; + my ($new_file) = $file_to_edit. '.new'; + my ($edit) = 0; + open(NEW, "> $new_file" ) || print STDERR "Problem to write $edit: $! \n"; + open(EDIT, $file_to_edit ) || print STDERR "Problem opening file $file_to_edit: $! \n"; + while(<EDIT>) { + if ( /^BUILDLINK.*py27/ ) { $_=~ s/py27/\${PYPKGPREFIX}/ ; $edit++;} + if ( /^BUILDLINK.*py34/ ) { $_=~ s/py34/\${PYPKGPREFIX}/ ; + print STDERR " py34 found at $file_to_edit\n"; + ; $edit++;} + if ( /^BUILDLINK.*ruby200/ ) { $_=~ s/ruby200/\${RUBY_PKGPREFIX}/ ; $edit++;} + print NEW $_; + } + close(EDIT); + close(NEW); + if ($edit) { unlink $file_to_edit; + rename $new_file, $file_to_edit; + $mod++;} + else { + $stay++; + unlink $new_file; }; + } else { $other++; print STDERR " (other) ", $file_to_edit,"\n"} + } + } + close(CVS_DIFF); + printf STDERR "Makefile: %4d\n", $Makefile; + printf STDERR "buildlink3.mk: %4d\n", $buildlink3; + printf STDERR " Modified: %4d\n", $mod; + printf STDERR " Untouched: %4d\n", $stay; + printf STDERR "Other: %4d\n", $other; +} + +main(); +exit; + diff --git a/pkgtools/revbump/files/check-cvs-diff.1 b/pkgtools/revbump/files/check-cvs-diff.1 new file mode 100644 index 00000000000..4c75ee6c96f --- /dev/null +++ b/pkgtools/revbump/files/check-cvs-diff.1 @@ -0,0 +1,77 @@ +.\" $NetBSD: check-cvs-diff.1,v 1.1 2014/12/15 23:25:54 mef Exp $ +.\" +.\" Copyright (c) 2003, 2004, 2005 The NetBSD Foundation, Inc. +.\" +.\" This code was originally contributed to the NetBSD Foundation, Inc. +.\" by Makoto Fujiwara <mef@NetBSD.org>. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. Neither the name of author nor the names of its contributors may +.\" be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND +.\" CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +.\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +.\" IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 14, 2014 +.Dt CHECK-CVS-DIFF 1 +.Os +.Sh NAME +.Nm check-cvs-diff +.Nd tool to check if revbump process described in revbump(1) results including py27, py34 or ruby200 +in the files. And then replaces the strings by the variable notation. +.Sh SYNOPSIS +.Nm +.Op Fl h +.Op Fl p Ar pkgsrcdir +.Op Fl v +cvs-diff-u_output-file +.Sh DESCRIPTION +.Nm +is a perl script for pkgsrc developers that simplifies checking and replacing fixed +version number in revbump resultant tree, Makefile and buildlink3.mk files. +It reads `cvs diff -u' output written in named file, and if above mentioned strings found in the diff, replaces it in corresponding file by apropriate variable notation. +.Pp +.Nm Fl h +displays a short usage. +.Pp +If +.Fl p +is given, +.Ar pkgsrcdir +is used instead of the default +.Pa /usr/pkgsrc . +.Pp +If +.Fl v +is given, +it outputs some verbose information. + +.Nm +prints the package name +(in +.Ar category/package +form) on stdout for each package where it failed, but usually none. + +.Sh SEE ALSO +.Xr revbump 1 , +.Xr finddepends 1 , +.Xr replace-commonbump 1 diff --git a/pkgtools/revbump/files/replace-commonbump b/pkgtools/revbump/files/replace-commonbump new file mode 100644 index 00000000000..b1eae8924bd --- /dev/null +++ b/pkgtools/revbump/files/replace-commonbump @@ -0,0 +1,233 @@ +#!@PERL@ -w +# -*- perl -*- +# The process has two steps +# (1) +# Travers all the files (with some filtering) over /usr/pkgsrc +# pick up referenced -> referer relation and store them to %HASH +# (multiple files are concatinated by ';' ) +# (2) +# read input (usually named 'commonbump'), and expand one line into +# replacement referer lines, which are referenced -> referer relation. + +use strict; +use Getopt::Std; +use File::Find; + +my(%HASH); # referenced -> referer relation hash, referer is delimitted by ; +my($PKGSRCDIR) = '/usr/pkgsrc'; # /usr/pkgsrc path, usually /usr/pkgsrc + +my($TABLE) = 'commonbump'; # name of file, list-of-files to process +my(@TABLE); # contents of file above + +my($debug) = 0; +my($prefix) ; # A part of path, top to pkgsrc, typically /usr/pkgsrc + +my($common_bump) = 0; # count, not used for now (yet) +my(%opts); +our(@ARGV); + +my ($FILE) = __FILE__; + $FILE =~ s,.*/([^/]+),$1,; # pick leafname from __FILE__ + +my($replaced) = 'commonbump.replaced'; + +my($my_name) = $0; +$my_name =~ s#(.*)/##; + +sub usage() { + print <<HELP; +$my_name: + This command is a part of revbump package and intended for pkgsrc developers. + (1) Read entire pkgsrc tree and check referer -> referenced relation, + then internally keeps (opposite) referenced -> referer relation table. + (2) Read another file, named '$TABLE' or other name with -T, which + usually lists Makefile.common or *common.mk files to expand. + (3) Now expands those list in '$TABLE' into list of Makefiles by + referenced -> refer relation. By default, it outputs to the file + '$replaced' (currently the name is fixed). + +Synopsys: + $my_name [-a ] [-h] [-p pkgsrc_directory] [-T list_file] +Where: + -a Check all, disregard to -T option. If "# used by" is + included or not. + -h Show this help + -p directory + pkgsrc directory to process (default $PKGSRCDIR) + -T the filename containing list of files (default commonbump) +See Also: + revbump(1) for how to use it. +HELP +} + +# get value of variable by using make show-var +sub show_var($$){ + my($varname) = shift; + my($pkgdir) = shift; + my($value); + #chdir $pkgdir; + open(MAKE, '-|', "cd $PKGSRCDIR/$pkgdir ; make show-var VARNAME=$varname"); + $value = <MAKE>; + close(MAKE); + chomp($value); + if ($value =~ /know how to make/ ) { print STDERR $value, '(', $pkgdir,')',"\n";} + return $value +} + +sub GenerateHash ($$) { + my ($pkgsrc) = shift; + my ($prefix) = shift; + + # ---------------------------------------------------------------- + my ($wanted_closure) = sub () { + my $dir = $File::Find::dir ; + my $fname = "$File::Find::dir/$_" ; + + # skip these directories and files ( as a files including something ) + if ($dir =~ m|CVS$| ) {$File::Find::prune = 1; return;} + if ($dir =~ m|mk$| ) {$File::Find::prune = 1; return;} + if ($dir =~ m|work$| ) {$File::Find::prune = 1; return;} + if ($dir =~ m|patches$| ) {$File::Find::prune = 1; return;} + if ($dir =~ m|files$| ) {$File::Find::prune = 1; return;} + if ($dir =~ m|bootstrap$| ) {$File::Find::prune = 1; return;} + if ($dir =~ m|pkgsrc/[^/]$| ) {$File::Find::prune = 1; return;} + if ($dir =~ m|x11-links| ){$File::Find::prune = 1; return;} + if ($_ =~ m|^\.\#| ) { return;} + if ($_ =~ m|~$| ) { return;} + if ($_ =~ m|buildlink3.mk$| ) { return;} + if ($_ =~ m|builtin.mk$| ) { return;} + + my($shortname) = $fname; + $shortname =~ s|$prefix/||; + my($shortdir) = $dir; + $shortdir =~ s|$prefix/||; + + # pick only Makefile.* and .mk ( as a files including something ) + if ($_ =~ m|Makefile| || + $_ =~ m|\.mk$| ) { + print STDERR __LINE__, ' ', $fname,' ', `pwd`, "\n" if $debug; + open(FNAME, $fname) || print STDERR __LINE__, " Problem opening file $fname:$!\n"; + my ($included) = ''; + while (<FNAME>){ + # now starts finding included file + # pick .include "../../ + if ( m|^\.\s*include\s+\"\.\./\.\./(.*)\"| ) { $included = $1;} + # pick ".include "Makefile" etc (without leading ../../), this needs to add package dir. + if ( m|^\.\s*include\s+\"(.*)\"| ) { next;} # including the same directory stuff, doesn't matter + if ( m|^\.\s*include\s+\"(.*)\"| ) { $included = $prefix .'/'. $1;} + if ( $included =~ m|/mk/| ) { next;} # it is include line but for mk, skip this line + if ( $included =~ m|version.mk| ) { next;} + if ( $included =~ m|tests/| ) { next;} + if ( $included =~ m|options.mk| ) { next;} + if ( $included =~ m|enigmail.mk| ) { next;} + + $included =~ s,\${.CURDIR},$shortname,; + if ($included =~ /\${([^}]+)}/ ) { + my($varname) = $1; + my($value) = show_var($varname, $shortdir); + $included =~ s/\${[^}]+}/$value/; + if ($value eq '') { + print STDERR +$FILE, ': ', __LINE__, ' Value ${', $varname, '} is emtpy at ', $shortdir, "\n"; + } + } + print STDERR __LINE__ , ' ', $shortname, ' -> ', $included,': ',$_ ,"\n" if $debug; + if ( $included eq '') { next;} # not include line, look at next line + print STDERR __LINE__ , ' ', $shortname, ' -> ', $included,"\n" if $debug; + if ( ! $HASH{$included} ) { + $HASH{$included} = $shortname; + } else { + my(@registered) = split ';', $HASH{$included}; + if (grep (/^$shortname$/, @registered) == 0 ) { + $HASH{$included} .= ';'. $shortname; + } + } + } # end while + close(FNAME); + } # if of (major process) ... starting with: if ($_ =~ m|Makefile| || + }; # end of my ($wanted_closure) = sub () { + # ---------------------------------------------------------------- + find($wanted_closure, $pkgsrc); +} + +# Table is assumed to contain list of files to process, set up it in @TABLE here. +sub ReadTable($) { + my ($table) = shift; + if ($table eq '-') { + @TABLE = <>; + } else { + open(TABLE, $table) || print STDERR "Problem reading file $table: $!\n"; + @TABLE = <TABLE>; + close(TABLE); + } + } + +sub ShowResults() { + open(REPLACED, "> $replaced") || die "problem open to write: $replaced: $!\n"; + foreach my $file (@TABLE) { + chomp($file); + if ($file =~ /^\s*$/ ) { next; } # Skip empty line, in case + if ($HASH{$file} && # To avoid 'Use of uninitialized value in split at ..' + grep ($file, $HASH{$file}) > 0) { # referer found ( separated with ';') + my(@list) = split ';', $HASH{$file}; + foreach my $i (0..$#list) { + print REPLACED "$list[$i]\n"; # write the list into REPLACED handle + } + } + } +} + +# check the pkgsrc tree is healthy or not +sub CheckPkgsrcTree($){ + my ($pkgsrc) = shift; + + if (! -d $pkgsrc || ! -d "$pkgsrc/doc" || ! -d "$pkgsrc/mk") { + print STDERR "Invalid pkgsrc directory $pkgsrc\n"; + exit 1; + } +} + +# if -a option is applied, not using @TABLE, but scan whole thing. +sub CheckAll() { + foreach my $i (sort keys %HASH) { # for all the referenced + if ($i =~ /buildlink3.mk/ ) { next;} + + # First collect the line of '# used by .*' + open (REFERENCED, $i) || print ' *** ', __LINE__, " Unable to open $i $!\n"; + my (@referer) = {}; + while(<REFERENCED>){ + if (/\# used by (.*)/) { push (@referer, $1);} + } + close(REFERENCED); + my $number = 0; + foreach my $referer (@referer) { + $number += grep $referer, $HASH{$i}; + } + $#referer++; # conpensate -1 -> 0, 0 -> 1 etc + if ($#referer < $number) { print $#referer . ' ? ' . $number .' .. ', $i,' <- ', $HASH{$i}, ' ... <', "\n";} + if ($#referer > $number) { print $#referer . ' ? ' . $number .' .. ', $i,' <- ', $HASH{$i}, ' ... >', "\n";} + } +} +sub main() { + my($check_all) = 0; + my($prefix); + getopts('ahp:T:', \%opts); + + if ($opts{'a'}) { $check_all = 1; } + if ($opts{'h'}) { usage(); exit 0;} + if ($opts{'p'}) { $PKGSRCDIR = $opts{'p'};} + if ($opts{'T'}) { $TABLE = $opts{'T'};} + + $prefix = $PKGSRCDIR; + $prefix =~ s|.*/pkgsrc/(.*)|$1|; + CheckPkgsrcTree($PKGSRCDIR); + GenerateHash($PKGSRCDIR, $prefix); + ReadTable($TABLE); + if ($check_all) { CheckAll(); } + else { ShowResults();} +} + +main(); + +exit; +__END__ diff --git a/pkgtools/revbump/files/replace-commonbump.1 b/pkgtools/revbump/files/replace-commonbump.1 new file mode 100644 index 00000000000..d5fddfa9e2c --- /dev/null +++ b/pkgtools/revbump/files/replace-commonbump.1 @@ -0,0 +1,106 @@ +.\" $NetBSD: replace-commonbump.1,v 1.1 2014/12/15 23:25:54 mef Exp $ +.\" +.\" Copyright (c) 2014 The NetBSD Foundation, Inc. +.\" +.\" This code was originally contributed to the NetBSD Foundation, Inc. +.\" by Makoto Fujiwara <mef@NetBSD.org>. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. Neither the name of author nor the names of its contributors may +.\" be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND +.\" CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +.\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +.\" IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 14, 2014 +.Dt REPLACE-COMMONBUMP 1 +.Os +.Sh NAME +.Nm replace-commonbump +.Nd tool to help expanding (replacing) commonbump file to the real list of Makefile's. +.Sh SYNOPSIS +.Nm +.Op Fl a +.Op Fl h +.Op Fl p Ar pkgsrcdir +.Op Fl T Ar list_file +.Sh DESCRIPTION +.Nm +is a perl script for pkgsrc developers. It simplifies the process expanding +`commonbump' file into `commonbump-replace'. Commonbump file is to be created by the first stage of revbump process, as is described in revbump(1). +.Pp +.Nm Fl h +displays a short usage. +.Pp +If +.Fl p +is given, +.Ar pkgsrcdir +is used instead of the default +.Pa /usr/pkgsrc . +.Pp +If +.Fl a +is given, +check all pkgsrc tree, disregard neither to +.Fl T +option nor to the default `commonbump' file. +It will check if "# used by" is included or not, usually in Makefile.common in the package. +.Pp +If +.Fl T +is given, +.Ar list_file +is used instead of the default +.Pa `commonbump' . +.Pp +.Nm +prints the package name +(in +.Ar category/package +form) on stdout for each package where it failed, but usually none. + +The internal process is divided into three stages. + +.item +(1) +Read entire pkgsrc tree and check a +.Ar referer -> referenced +relation, +then internally keeps (opposite) +.Ar referenced -> referer +relation table. + +.item +(2) Read a file, named `commonbump' or the other name given with -T, which +usually lists Makefile.common or *common.mk files to be expanded. + +.item +(3) Now expands the filename listed in `commonbump' into the list of packagename/Makefile by +referenced -> referer relation. It then outputs to the file +`commonbump.replaced' (currently the name is fixed). + +.Sh SEE ALSO +.Xr revbump 1 , +.Xr blbump 1 , +.Xr check-cvs-diff 1 , +.Xr finddepends 1 diff --git a/pkgtools/revbump/files/revbump b/pkgtools/revbump/files/revbump index 1e150d2a275..f804035809c 100644 --- a/pkgtools/revbump/files/revbump +++ b/pkgtools/revbump/files/revbump @@ -1,7 +1,7 @@ #!@PERL@ -w # -*- perl -*- # -# $NetBSD: revbump,v 1.6 2014/10/09 13:51:42 wiz Exp $ +# $NetBSD: revbump,v 1.7 2014/12/15 23:25:54 mef Exp $ # # Copyright (c) 2003, 2004 The NetBSD Foundation, Inc. # @@ -56,6 +56,7 @@ sub revbump { my $pkgdir = shift; my ($pkg, $oldpkgver, $pkgver, $done, $oldmk, $newmk, $backupmk); local (*OLDMK, *MAKE); + my (@OLD, @NEW, @NEW2); # two phase edit $pkgdir =~ /\/(.*)$/; $pkg = $1; @@ -68,33 +69,56 @@ sub revbump { chop $oldpkgver; open(OLDMK, $oldmk); - $newmk = "$oldmk.new"; - open(NEWMK, ">$newmk"); + @OLD = <OLDMK>; + close(OLDMK); + # first pass, check PKGREVISION line (only) $done = 0; - while (<OLDMK>) { + while ($_ = shift @OLD) { if ($done == 0 && /^PKGREVISION=([ \t]+)([0-9]+)$/) { $done = $2 + 1; - print NEWMK "PKGREVISION=${1}${done}\n"; - } elsif ($done == 0 && /^CATEGORIES=([ \t]+)/) { - print NEWMK "PKGREVISION=${1}1\n"; - print NEWMK $_; - $done = 1; + push(@NEW, "PKGREVISION=${1}${done}\n"); } else { - print NEWMK $_; + push(@NEW, $_); } } - + # if above is OK, just copy, + if ( $done > 0 ){ + @NEW2 = @NEW; + # or do second pass + } else { + while ($_ = shift @NEW) { + if ($done == 0 && /^CATEGORIES=([ \t]+)/) { + push(@NEW2,"PKGREVISION=${1}1\n"); + push(@NEW2, $_); + $done = 1; + } elsif ($done == 0 && /^PKGNAME=([ \t]+)/) { + push (@NEW2, $_); + push (@NEW2,"PKGREVISION=${1}1\n"); + $done = 1; + } elsif ($done == 0 && /^COMMENT=([ \t]+)/) { + push (@NEW2, $_); + push (@NEW2,"PKGREVISION=${1}1\n"); + $done = 1; + } elsif ($done == 0 && /^.\s*include([ \t]+)/) { + push (@NEW2,"PKGREVISION=${1}1\n"); + push (@NEW2, $_); + $done = 1; + } else { + push (@NEW2, $_); + }; + } + } # end else + $newmk = "$oldmk.new"; + open(NEWMK, ">$newmk"); + print NEWMK @NEW2; + close(NEWMK); # no suitable place found if ($done == 0) { - close(NEWMK); - close(OLDMK); unlink "$newmk"; return 0; } - close(NEWMK); - close(OLDMK); $backupmk = "$oldmk.orig"; rename("$oldmk", "$backupmk"); rename("$newmk", "$oldmk"); diff --git a/pkgtools/revbump/files/revbump.1 b/pkgtools/revbump/files/revbump.1 index dccf3fc7d96..5cd4f6a8128 100644 --- a/pkgtools/revbump/files/revbump.1 +++ b/pkgtools/revbump/files/revbump.1 @@ -1,4 +1,4 @@ -.\" $NetBSD: revbump.1,v 1.21 2014/08/22 11:26:25 wiz Exp $ +.\" $NetBSD: revbump.1,v 1.22 2014/12/15 23:25:54 mef Exp $ .\" .\" Copyright (c) 2003, 2004, 2005, 2006, 2010, 2012, 2013, 2014 The NetBSD Foundation, Inc. .\" @@ -84,26 +84,24 @@ and .Xr blbump 1 would be: .Bd -literal -offset indent -cd /usr/pkgsrc -finddepends category/package | sort -u \*[Gt] allbump -grep buildlink3.mk allbump | sed 's/.buildlink3.mk//' \*[Gt] bl3bump -grep -e Makefile.common -e mk$ allbump | grep -v -e buildlink3.mk -e options.mk > commonbump -[read commonbump and replace entries with all packages including the - corresponding Makefile.common or *.mk file] -cat allbump commonbump | sed 's,/[^/]*$,,' | sort -u \*[Gt] makebump -revbump \*[Lt] makebump \*[Gt] makebump.manual -[if a package is listed in makebump.manual, handle the PKGREVISION bump manually] -blbump \*[Lt] bl3bump \*[Gt] bl3bump.manual -[handle the *ABI_DEPENDS* bumps in bl3bump.manual manually, usually none] -cvs diff `cat makebump` | less -[look for PYPKGPREFIX -\*[Gt] py27 - and RUBY_PKGPREFIX -\*[Gt] ruby200 expansions - in buildlink files and any unrelated diffs you have in your - local tree, and fix them] -cvs diff `cat bl3bump makebump` | less +cd /usr/pkgsrc ; +finddepends category/package | sort -u \*[Gt] allbump ; +grep buildlink3.mk allbump | sed 's/.buildlink3.mk//' \*[Gt] bl3bump ; +grep -e Makefile.common -e mk$ allbump | grep -v -e buildlink3.mk -e options.mk > commonbump ; +replace-commonbump ; +cat allbump commonbump.replaced | sed 's,/[^/]*$,,' | sort -u \*[Gt] makebump ; +revbump \*[Lt] makebump | tee makebump.manual ; +# [if a package is listed in makebump.manual, handle the PKGREVISION bump manually] +blbump \*[Lt] bl3bump | tee bl3bump.manual ; +# [handle the *ABI_DEPENDS* bumps in bl3bump.manual manually, usually none] ; +cvs diff -u `cat makebump` > cvs-diff ; +check-cvs-diff ; +cvs diff `cat bl3bump makebump` | less cvs commit `cat bl3bump makebump` -rm allbump bl3bump* makebump* commonbump +rm allbump bl3bump* makebump* commonbump* cvs-diff .Ed .Sh SEE ALSO .Xr blbump 1 , -.Xr finddepends 1 +.Xr finddepends 1 , +.Xr replace-commonbump 1, +.Xr check-cvs-diff 1 |