cvs commit: p5ee/App-Options/t app.conf main.t

[email protected] (Stephen Adkins)
Newsgroups perl.cvs.p5ee
Message-ID <[email protected]>
cvsuser     04/12/02 08:00:15

  Modified:    App-Options CHANGES
               App-Options/lib/App Options.pm
               App-Options/t app.conf main.t
  Log:
  add host/hostname options
  
  Revision  Changes    Path
  1.7       +8 -1      p5ee/App-Options/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /cvs/public/p5ee/App-Options/CHANGES,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- CHANGES	2 Sep 2004 21:09:00 -0000	1.6
  +++ CHANGES	2 Dec 2004 16:00:12 -0000	1.7
  @@ -2,6 +2,13 @@
   # CHANGE LOG
   #############################################################################
   
  +VERSION 0.92
  + x cleaned up some warnings which appeared under -w (concatenation of undef)
  + x undefined values appear as "[undef]" rather than "[]" in print_usage
  + x options appear as "--var=<value>" rather than "--var=<var>" in print_usage
  + x option attribute value_description is used instead of "<value>" if given
  + x add system-supplied hostname and host options
  +
   VERSION 0.91
    x show_all is off by default whenever "option" or "options" used
    x remove app_path_info
  @@ -65,5 +72,5 @@
      "path" variable to be set from the "PATH" environment variable.)
   
   VERSION 0.61
  - o Initial release
  + x Initial release
   
  
  
  
  1.9       +50 -8     p5ee/App-Options/lib/App/Options.pm
  
  Index: Options.pm
  ===================================================================
  RCS file: /cvs/public/p5ee/App-Options/lib/App/Options.pm,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- Options.pm	2 Sep 2004 21:06:57 -0000	1.8
  +++ Options.pm	2 Dec 2004 16:00:13 -0000	1.9
  @@ -1,6 +1,6 @@
   
   #############################################################################
  -## $Id: Options.pm,v 1.8 2004/09/02 21:06:57 spadkins Exp $
  +## $Id: Options.pm,v 1.9 2004/12/02 16:00:13 spadkins Exp $
   #############################################################################
   
   package App::Options;
  @@ -9,6 +9,8 @@
   use strict;
   
   use Carp;
  +use Sys::Hostname;
  +use Cwd 'abs_path';
   
   $VERSION = "0.91";
   
  @@ -290,6 +292,13 @@
          An imported file goes on the head of the queue of files to be
          processed.
   
  +    hostname - the hostname as returned by the hostname() function
  +       provided by Sys::Hostname (may or may not include domain
  +       qualifiers as a fully qualified domain name).
  +
  +    host - same as hostname, but with any trailing domain name removed.
  +       (everything after the first ".")
  +
       flush_imports - flush all pending imported option files.
   
   =cut
  @@ -354,6 +363,14 @@
       #################################################################
   
       #################################################################
  +    # 0. Set system-supplied values (i.e. hostname/host)
  +    #################################################################
  +    my $host = hostname;
  +    $values->{hostname} = $host;
  +    $host =~ s/\..*//;   # get rid of extra domain name qualifiers
  +    $values->{host} = $host;
  +
  +    #################################################################
       # 1. Read the command-line options
       # (anything starting with one or two dashes is an option var
       # i.e. --debugmode=record  -debugmode=replay
  @@ -402,7 +419,6 @@
       # Using "abs_path" gets rid of all symbolic links and gives the real path
       # to the directory in which the script runs.
       if (!$prefix) {
  -        use Cwd 'abs_path';
           my $abs_prog_dir = abs_path($prog_dir);
           if ($abs_prog_dir =~ s!/bin$!!) {
               $prefix = $abs_prog_dir;
  @@ -658,7 +674,12 @@
       if ($values->{debug_options}) {
           print STDERR "%App::options (or other) =\n";
           foreach $var (sort keys %$values) {
  -            print STDERR "   $var = [$values->{$var}]\n";
  +            if (defined $values->{$var}) {
  +                print STDERR "   $var = [$values->{$var}]\n";
  +            }
  +            else {
  +                print STDERR "   $var = [undef]\n";
  +            }
           }
           print STDERR "\@INC =\n";
           foreach $var (@INC) {
  @@ -788,7 +809,7 @@
           push(@vars, (sort keys %$values));
       }
       my ($var, $value, $type, $desc, $option);
  -    my ($var_str, $value_str, $type_str, $desc_str);
  +    my ($var_str, $value_str, $type_str, $desc_str, $val_desc);
       $option = $init_args->{option} || {};
       foreach $var (@vars) {
           next if ($option_seen{$var});
  @@ -797,7 +818,8 @@
           $value = $values->{$var};
           $type  = $option->{$var}{type} || "";
           $desc  = $option->{$var}{description} || "";
  -        $var_str   = ($type eq "boolean") ? $var : ($type ? "$var=<$type>" : "$var=<$var>");
  +        $val_desc  = $option->{$var}{value_description} || "";
  +        $var_str   = ($type eq "boolean") ? $var : ($val_desc ? "$var=<$val_desc>" : "$var=<value>");
           $value_str = (defined $value) ? $value : "undef";
           $type_str  = ($type) ? " ($type)" : "";
           $desc_str  = ($desc) ? " $desc"   : "";
  @@ -1321,9 +1343,10 @@
   
   If, however, your projects were not in the habit of using the
   PREFIX environment variable and the program is not installed in
  -$PREFIX/bin, he would have to put the above lines in the same
  -directory as "listcust" in either the "app.conf" file or the
  -"listcust.conf" file.
  +$PREFIX/bin, he would have to put the above lines
  +in either the "app.conf" file or the "listcust.conf" file
  +in either the global /etc/app directory or in the same
  +directory as "listcust".
   
   A user (without privileges to the "$PREFIX/etc/app" directory
   or the directory in which "listcust" lives) would have to put
  @@ -1510,6 +1533,25 @@
           no_env_vars => 1,
       );
   
  +=head2 A Deployment Scenario
  +
  +Sometimes a software system gets deployed across many machines.
  +You may wish to have a single option file set different values
  +when it is deployed to different machines.
  +
  +For this purpose, the automatic "host" and "hostname" values
  +are useful.  Suppose you have four servers named "foo1", "foo2",
  +"foo3", and "foo4".  You may wish the software to use different
  +databases on each server.  So app.conf might look like this.
  +
  +    [host=foo1] dbname = devel
  +    [host=foo2]
  +    dbname = test
  +    [host=foo3]
  +    dbname = prod
  +    [ALL]
  +    dbname = prod
  +
   Hopefully, that's enough to get you going.
   
   I welcome all feedback, bug reports, and feature requests.
  
  
  
  1.4       +1 -0      p5ee/App-Options/t/app.conf
  
  Index: app.conf
  ===================================================================
  RCS file: /cvs/public/p5ee/App-Options/t/app.conf,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- app.conf	19 Feb 2004 16:17:15 -0000	1.3
  +++ app.conf	2 Dec 2004 16:00:14 -0000	1.4
  @@ -33,3 +33,4 @@
   var9 = value9
   [/ol/]
   var7 = value7
  +[host=xyzzy3] hosttest = you really named a host xyzzy3?
  
  
  
  1.5       +6 -0      p5ee/App-Options/t/main.t
  
  Index: main.t
  ===================================================================
  RCS file: /cvs/public/p5ee/App-Options/t/main.t,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- main.t	19 Feb 2004 16:17:15 -0000	1.4
  +++ main.t	2 Dec 2004 16:00:14 -0000	1.5
  @@ -81,5 +81,11 @@
   is($App::options3{var1}, "pattern match", "pattern match");
   is($App::options3{var2}, "old pattern match", "old pattern match");
   
  +ok($App::options{hostname}, "hostname option set");
  +ok($App::options{host}, "host option set");
  +ok(length($App::options{host}) <= length($App::options{hostname}) && $App::options{host} !~ /\./,
  +    "host option shorter than hostname option");
  +ok(! defined $App::options{hosttest}, "host not named xyzzy3");
  +
   exit 0;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.