Thread

Commits

  1. Use Getopt::Long for catalog scripts

  1. use Getopt::Long for catalog scripts

    John Naylor <john.naylor@2ndquadrant.com> — 2019-02-07T09:09:08Z

    This was suggested in
    
    https://www.postgresql.org/message-id/11766.1545942853%40sss.pgh.pa.us
    
    I also adjusted usage() to match. There might be other scripts that
    could use this treatment, but I figure this is a good start.
    
    -- 
    John Naylor                https://www.2ndQuadrant.com/
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
    
  2. Re: use Getopt::Long for catalog scripts

    David Fetter <david@fetter.org> — 2019-02-07T17:53:38Z

    On Thu, Feb 07, 2019 at 10:09:08AM +0100, John Naylor wrote:
    > This was suggested in
    > 
    > https://www.postgresql.org/message-id/11766.1545942853%40sss.pgh.pa.us
    > 
    > I also adjusted usage() to match. There might be other scripts that
    > could use this treatment, but I figure this is a good start.
    > 
    > -- 
    > John Naylor                https://www.2ndQuadrant.com/
    > PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
    
    > diff --git a/src/backend/catalog/Makefile b/src/backend/catalog/Makefile
    > index d9f92ba701..8c4bd0c7ae 100644
    > --- a/src/backend/catalog/Makefile
    > +++ b/src/backend/catalog/Makefile
    > @@ -89,7 +89,8 @@ generated-header-symlinks: $(top_builddir)/src/include/catalog/header-stamp
    >  # version number when it changes.
    >  bki-stamp: genbki.pl Catalog.pm $(POSTGRES_BKI_SRCS) $(POSTGRES_BKI_DATA) $(top_srcdir)/configure.in
    >  	$(PERL) -I $(catalogdir) $< \
    > -		-I $(top_srcdir)/src/include/ --set-version=$(MAJORVERSION) \
    > +		--include-path=$(top_srcdir)/src/include/ \
    > +		--set-version=$(MAJORVERSION) \
    >  		$(POSTGRES_BKI_SRCS)
    >  	touch $@
    >  
    > diff --git a/src/backend/catalog/genbki.pl b/src/backend/catalog/genbki.pl
    > index be81094ffb..48ba69cd0a 100644
    > --- a/src/backend/catalog/genbki.pl
    > +++ b/src/backend/catalog/genbki.pl
    > @@ -16,6 +16,7 @@
    >  
    >  use strict;
    >  use warnings;
    > +use Getopt::Long;
    >  
    >  use File::Basename;
    >  use File::Spec;
    > @@ -23,41 +24,20 @@ BEGIN  { use lib File::Spec->rel2abs(dirname(__FILE__)); }
    >  
    >  use Catalog;
    >  
    > -my @input_files;
    >  my $output_path = '';
    >  my $major_version;
    >  my $include_path;
    >  
    > -# Process command line switches.
    > -while (@ARGV)
    > -{
    > -	my $arg = shift @ARGV;
    > -	if ($arg !~ /^-/)
    > -	{
    > -		push @input_files, $arg;
    > -	}
    > -	elsif ($arg =~ /^-I/)
    > -	{
    > -		$include_path = length($arg) > 2 ? substr($arg, 2) : shift @ARGV;
    > -	}
    > -	elsif ($arg =~ /^-o/)
    > -	{
    > -		$output_path = length($arg) > 2 ? substr($arg, 2) : shift @ARGV;
    > -	}
    > -	elsif ($arg =~ /^--set-version=(.*)$/)
    > -	{
    > -		$major_version = $1;
    > -		die "Invalid version string.\n"
    > -		  if !($major_version =~ /^\d+$/);
    > -	}
    > -	else
    > -	{
    > -		usage();
    > -	}
    > -}
    > +GetOptions(
    > +	'output:s'        => \$output_path,
    > +	'include-path:s'  => \$include_path,
    > +	'set-version:s'   => \$major_version) || usage();
    > +
    > +die "Invalid version string.\n"
    > +  if !($major_version =~ /^\d+$/);
    
    Maybe this would be clearer as:
    
    die "Invalid version string.\n"
        unless $major_version =~ /^\d+$/;
    
    >  # Sanity check arguments.
    > -die "No input files.\n" if !@input_files;
    > +die "No input files.\n" if !@ARGV;
    >  die "--set-version must be specified.\n" if !defined $major_version;
    >  die "-I, the header include path, must be specified.\n" if !$include_path;
    
    Similarly,
    
    die "No input files.\n" unless @ARGV;
    die "--set-version must be specified.\n" unless defined $major_version;
    die "-I, the header include path, must be specified.\n" unless $include_path;
    
    >  
    > @@ -79,7 +59,7 @@ my @toast_decls;
    >  my @index_decls;
    >  my %oidcounts;
    >  
    > -foreach my $header (@input_files)
    > +foreach my $header (@ARGV)
    >  {
    >  	$header =~ /(.+)\.h$/
    >  	  or die "Input files need to be header files.\n";
    > @@ -917,11 +897,11 @@ sub form_pg_type_symbol
    >  sub usage
    >  {
    >  	die <<EOM;
    > -Usage: genbki.pl [options] header...
    > +Usage: perl -I [directory of Catalog.pm] genbki.pl [--output/-o <path>] [--include-path/-i include path] header...
    >  
    >  Options:
    > -    -I               include path
    > -    -o               output path
    > +    --output         Output directory (default '.')
    > +    --include-path   Include path for source directory
    >      --set-version    PostgreSQL version number for initdb cross-check
    >  
    >  genbki.pl generates BKI files and symbol definition
    > diff --git a/src/backend/utils/Gen_fmgrtab.pl b/src/backend/utils/Gen_fmgrtab.pl
    > index f17a78ebcd..9aa8714840 100644
    > --- a/src/backend/utils/Gen_fmgrtab.pl
    > +++ b/src/backend/utils/Gen_fmgrtab.pl
    > @@ -18,32 +18,14 @@ use Catalog;
    >  
    >  use strict;
    >  use warnings;
    > +use Getopt::Long;
    >  
    > -# Collect arguments
    > -my @input_files;
    >  my $output_path = '';
    >  my $include_path;
    >  
    > -while (@ARGV)
    > -{
    > -	my $arg = shift @ARGV;
    > -	if ($arg !~ /^-/)
    > -	{
    > -		push @input_files, $arg;
    > -	}
    > -	elsif ($arg =~ /^-o/)
    > -	{
    > -		$output_path = length($arg) > 2 ? substr($arg, 2) : shift @ARGV;
    > -	}
    > -	elsif ($arg =~ /^-I/)
    > -	{
    > -		$include_path = length($arg) > 2 ? substr($arg, 2) : shift @ARGV;
    > -	}
    > -	else
    > -	{
    > -		usage();
    > -	}
    > -}
    > +GetOptions(
    > +	'output:s'    => \$output_path,
    > +	'include:s'   => \$include_path) || usage();
    >  
    >  # Make sure output_path ends in a slash.
    >  if ($output_path ne '' && substr($output_path, -1) ne '/')
    > @@ -52,7 +34,7 @@ if ($output_path ne '' && substr($output_path, -1) ne '/')
    >  }
    >  
    >  # Sanity check arguments.
    
    And here:
    
    > -die "No input files.\n"                       if !@input_files;
    > +die "No input files.\n"                       if !@ARGV;
    >  die "No include path; you must specify -I.\n" if !$include_path;
    
    Best,
    David.
    -- 
    David Fetter <david(at)fetter(dot)org> http://fetter.org/
    Phone: +1 415 235 3778
    
    Remember to vote!
    Consider donating to Postgres: http://www.postgresql.org/about/donate
    
    
    
  3. Re: use Getopt::Long for catalog scripts

    Alvaro Herrera <alvherre@2ndquadrant.com> — 2019-02-07T18:53:58Z

    Why is this script talking to me?
    
    On 2019-Feb-07, David Fetter wrote:
    
    > Similarly,
    > 
    > die "-I, the header include path, must be specified.\n" unless $include_path;
    
    But why must thee, oh mighty header include path, be specified?
    
    -- 
    Álvaro Herrera                https://www.2ndQuadrant.com/
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
    
    
    
  4. Re: use Getopt::Long for catalog scripts

    John Naylor <john.naylor@2ndquadrant.com> — 2019-02-08T07:27:12Z

    On Thu, Feb 7, 2019 at 6:53 PM David Fetter <david@fetter.org> wrote:
    > [some style suggestions]
    
    I've included these in v2, and also some additional tweaks for consistency.
    
    -- 
    John Naylor                https://www.2ndQuadrant.com/
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
    
  5. Re: use Getopt::Long for catalog scripts

    Alvaro Herrera <alvherre@2ndquadrant.com> — 2019-02-12T15:11:55Z

    On 2019-Feb-08, John Naylor wrote:
    
    > On Thu, Feb 7, 2019 at 6:53 PM David Fetter <david@fetter.org> wrote:
    > > [some style suggestions]
    > 
    > I've included these in v2, and also some additional tweaks for consistency.
    
    I noticed that because we have this line in the scripts,
      BEGIN  { use lib File::Spec->rel2abs(dirname(__FILE__)); }
    the -I switch to Perl is no longer needed in the makefiles.
    
    -- 
    Álvaro Herrera                https://www.2ndQuadrant.com/
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
    
    
    
  6. Re: use Getopt::Long for catalog scripts

    Alvaro Herrera <alvherre@2ndquadrant.com> — 2019-02-12T15:26:22Z

    On 2019-Feb-12, Alvaro Herrera wrote:
    
    > On 2019-Feb-08, John Naylor wrote:
    > 
    > > On Thu, Feb 7, 2019 at 6:53 PM David Fetter <david@fetter.org> wrote:
    > > > [some style suggestions]
    > > 
    > > I've included these in v2, and also some additional tweaks for consistency.
    > 
    > I noticed that because we have this line in the scripts,
    >   BEGIN  { use lib File::Spec->rel2abs(dirname(__FILE__)); }
    > the -I switch to Perl is no longer needed in the makefiles.
    
    Pushed, thanks.
    
    -- 
    Álvaro Herrera                https://www.2ndQuadrant.com/
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
    
    
    
  7. Re: use Getopt::Long for catalog scripts

    John Naylor <john.naylor@2ndquadrant.com> — 2019-02-12T16:21:33Z

    On 2/12/19, Alvaro Herrera <alvherre@2ndquadrant.com> wrote:
    > Pushed, thanks.
    
    Thank you.
    
    -- 
    John Naylor                https://www.2ndQuadrant.com/
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services