OpenPKG CVS Repository
  http://cvs.openpkg.org/
  ____________________________________________________________________________

  Server: cvs.openpkg.org                  Name:   Thomas Lotterer
  Root:   /v/openpkg/cvs                   Email:  [EMAIL PROTECTED]
  Module: openpkg-registry                 Date:   03-Aug-2006 00:15:39
  Branch: HEAD                             Handle: 2006080223153800

  Added files:
    openpkg-registry        registry.pm
  Modified files:
    openpkg-registry        Makefile registry-ui.pl

  Log:
    move common registry code to handle config and default configuration
    text to a perl module

  Summary:
    Revision    Changes     Path
    1.17        +8  -3      openpkg-registry/Makefile
    1.88        +12 -153    openpkg-registry/registry-ui.pl
    1.1         +204 -0     openpkg-registry/registry.pm
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: openpkg-registry/Makefile
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 Makefile
  --- openpkg-registry/Makefile 2 Aug 2006 22:06:30 -0000       1.16
  +++ openpkg-registry/Makefile 2 Aug 2006 22:15:38 -0000       1.17
  @@ -4,6 +4,7 @@
   VERSION_FILE = VERSION
   TMP          = tmp/
   POD2MAN      = pod2man
  +PERL         = /openpkg-reg/bin/perl
   
   all:
        @echo "$(MAKE) clean ....... delete temporary files"
  @@ -51,13 +52,14 @@
        shtool subst \
                -e "s/^my \\\$$progvers=\"[^\"]*\";/my 
\\\$$progvers=\"$${V}\";/" \
                -e "s/^my \\\$$progdate=\"[^\"]*\";/my 
\\\$$progdate=\"$${D}\";/" \
  -             registry-db.pl registry-ui.pl
  +             registry-db.pl registry-ui.pl registry.pm
   
   register.8: register.sh
        @echo "++ generating register.8 manual page"; \
        $(POD2MAN) --section=8 --center="OpenPKG" \
           --release=\"$${V}\" --date=\"$${D}\" \
           register.sh >register.8
  +
   tag:
        @V=`shtool version -l txt -d short $(VERSION_FILE) | sed -e 
's;\.;_;g'`; \
        echo "++ tagging with OPENPKG_REGISTRY_$$V"; \
  @@ -84,12 +86,13 @@
                -e "s/^my \\\$$progvers=\"[^\"]*\";/my 
\\\$$progvers=\"$${V}\";/" \
                -e "s/^my \\\$$progdate=\"[^\"]*\";/my 
\\\$$progdate=\"$${D}\";/" \
                -e "s;@l_prefix@;/openpkg-reg;g" \
  -             registry-*-rm0.pl register-rm0.sh
  +             -e "s;/registry.pm;/registry-dev.pm;g" \
                $(TMP)rm0/*
        ( for i in `builtin cd $(TMP)rm0/ && echo *`; do diff -U 3 $$i 
$(TMP)rm0/$$i; done ) | cvs-diff-colorize
        scp $(TMP)rm0/register.sh    [EMAIL 
PROTECTED]:/openpkg-reg/libexec/openpkg-tools/register-dev.sh
        scp $(TMP)rm0/registry-ui.pl [EMAIL 
PROTECTED]:/openpkg-reg/cgi/openpkg-registry/registry-ui-dev.pl
        scp $(TMP)rm0/registry-db.pl [EMAIL 
PROTECTED]:/openpkg-reg/sbin/registry-db-dev
  +     scp $(TMP)rm0/registry.pm    [EMAIL 
PROTECTED]:/openpkg-reg/libexec/openpkg-registry/registry-dev.pm
   
   fieldtest:
        @echo "++ deploy code directly for field testing"; \
  @@ -97,14 +100,16 @@
        D=`date '+%Y%m%d%H%M%S'`; \
        echo V=$$V D=$$D; \
        mkdir -p $(TMP)en2/; \
  -     cp registry-db.pl registry-ui.pl register.sh $(TMP)en2/; \
  +     cp registry-db.pl registry-ui.pl registry.pm register.sh $(TMP)en2/; \
        shtool subst \
                -e "s/^my \\\$$progvers=\"[^\"]*\";/my 
\\\$$progvers=\"$${V}\";/" \
                -e "s/^my \\\$$progdate=\"[^\"]*\";/my 
\\\$$progdate=\"$${D}\";/" \
                -e "s;@l_prefix@;/v/openpkg/sw;g" \
  +             -e "s;/registry.pm;/registry-dev.pm;g" \
                $(TMP)en2/*
        ( for i in `builtin cd $(TMP)en2/ && echo *`; do diff -U 3 $$i 
$(TMP)en2/$$i; done ) | cvs-diff-colorize
        scp $(TMP)en2/register.sh    [EMAIL 
PROTECTED]:/v/openpkg/sw/libexec/openpkg-tools/register-dev.sh
        scp $(TMP)en2/registry-ui.pl [EMAIL 
PROTECTED]:/v/openpkg/sw/cgi/openpkg-registry/registry-ui-dev.pl
        scp $(TMP)en2/registry-db.pl [EMAIL 
PROTECTED]:/v/openpkg/sw/sbin/registry-db-dev
  +     scp $(TMP)en2/registry.pm    [EMAIL 
PROTECTED]:/v/openpkg/sw/libexec/openpkg-registry/registry-dev.pm
   
  @@ .
  patch -p0 <<'@@ .'
  Index: openpkg-registry/registry-ui.pl
  ============================================================================
  $ cvs diff -u -r1.87 -r1.88 registry-ui.pl
  --- openpkg-registry/registry-ui.pl   2 Aug 2006 21:37:14 -0000       1.87
  +++ openpkg-registry/registry-ui.pl   2 Aug 2006 22:15:38 -0000       1.88
  @@ -37,7 +37,6 @@
   use MIME::Base64;
   use XML::Simple;
   use String::Divert;
  -use Clone qw(clone);
   
   #   program name, version and date
   my $progname="registry-ui.pl";
  @@ -53,6 +52,18 @@
   my $PREFIX='@l_prefix@';
   $PREFIX=$ENV{OPENPKG_PREFIX} if ($ENV{OPENPKG_PREFIX} ne "");
   
  +#   registry common code
  +my $pm = "registry.pm";
  +$pm = "$PREFIX/libexec/openpkg-registry/registry.pm" unless($PREFIX =~ 
m/[EMAIL PROTECTED]@$/);
  +require $pm; import registry;
  +
  +#   handle configuration
  +my $defcfgtxt = &registry::getdefcfgtxt($PREFIX);
  +my $defcfg    = &registry::parsecfgtxt($defcfgtxt);
  +my $usecfgtxt = 
&registry::readcfgtxtfile(&registry::getcfgfilename($PREFIX));
  +my $usecfg    = &registry::parsecfgtxt($usecfgtxt);
  +my $cfg       = &registry::mergecfg($defcfg, $usecfg);
  +
   #   configure optional debugging
   CGI::GuruMeditation::configure(-debug => $cfg->{debug}->{ui});
   
  @@ -62,158 +73,6 @@
   $response->{message} = new String::Divert;
   $response->{message}->fold("message");
   
  -#   default configuration text
  -#
  -my $defcfgtxt = qq{
  -    ##
  -    ##  registry-ui.cfg - OpenPKG Registry User Interface Configuration
  -    ##
  -    
  -    #   user identification
  -    #
  -    identification {
  -        mode constant; /* constant, naive, basicauth, ase */
  -        ase {
  -            server "http://my.example.com/ase";;
  -        };
  -        default anonymous;
  -    };
  -    
  -    #   databases for registry and session
  -    #
  -    db {
  -        registry {
  -            username registry;
  -            password registry;
  -            tablespace registry;
  -            host 127.0.0.1;
  -        };
  -        session {
  -            dbfile "$PREFIX/var/openpkg-registry/ui/session.db";
  -        };
  -    };
  -
  -    #   processing more than minimum request
  -    request {
  -        package 1;
  -    };
  -    
  -    #   canvas integration
  -    #
  -    canvas {
  -        url ""; /* "http://my.example.com/canvas"; */
  -        urlcache;
  -        mark_head "<!-- CANVAS: HEAD -->";
  -        mark_body "<!-- CANVAS: BODY -->";
  -    };
  -    
  -    #   entry page
  -    #
  -    page {
  -        default "main"; /* "", main, dropxml, login, association, logout */
  -        main q{
  -            <h3>Welcome to the OpenPKG Registry main entrance.</h3>
  -            The registry collects information about instances and 
packages.<br>
  -            <b>NOTICE:</b> Version 0.6 introduced uploading package 
information by default.<br>
  -            Read details in the manpage 
<code>openpkg&nbsp;man&nbsp;register</code><br>
  -            Find more information in the manpage under <code>--data</code> 
option and <code>OPENPKG_PREP</code> file.
  -            <p/>
  -            Use the following software to get the <code>openpkg 
register</code> command.
  -            <p/>
  -            <ul>
  -                <li>OpenPKG CURRENT<br>
  -                    <i>embedded in bootstrap</i></li>
  -                <li>OpenPKG 2-STABLE<br>
  -                    <i>embedded in bootstrap</i></li>
  -                <li>OpenPKG 2-STABLE-20060622 SNAPSHOT<br>
  -                    <i>embedded in bootstrap</i></li>
  -                <li>OpenPKG 2.5 RELEASE<br>
  -                    <i>embedded in bootstrap</i></li>
  -                <li>OpenPKG 2.4, 2.3, 2.2, 2.1, 2.0 RELEASE<br>
  -                    <a href="http://www.openpkg.org/download/";>Download</a> 
and install the CURRENT openpkg-registry package.</li>
  -                <li>OpenPKG 1.x<br>
  -                    <i>unsupported</i></li>
  -            </ul>
  -        };
  -    };
  -    
  -    ##   status line
  -    #
  -    status {
  -        showuser 1;
  -        showversion 0;
  -        showsid 0;
  -    };
  -
  -    ##   debugging
  -    #
  -    debug {
  -        ui 0;
  -    };
  -};
  -$defcfgtxt =~ s/^[ ]{4}//mg;
  -$defcfgtxt =~ s/^\n//s;
  -
  -#   outside CGI environment just print default config (useful during 
installation)
  -if ($ENV{GATEWAY_INTERFACE} !~ m/^CGI/) {
  -    print $defcfgtxt;
  -    exit 0;
  -}
  -
  -#   merges two hashes. First argument is a hash working as accumulator and 
the
  -#   second argument is the hash to be added to it. Either argument can be
  -#   empty.  A typical application is the accumulator being prefilled with
  -#   defaults and the adder comes with overrides. The function recursively
  -#   processes nested hashes. Values with dissimilar keys will be merged,
  -#   missing data on either side will be accumulated and identical keys on 
both
  -#   sides will be overwritten with the added data. Returns a new hash with
  -#   cloned data. The original accumulator and adder passed in remain 
untouched.
  -#   If the first element in an array is a hash it is assumed a pseudo-hash as
  -#   described in perlref(1) encountered and hash merging is attempted.
  -#
  -sub mergehashes ($$) {
  -    my ($acc, $add) = @_;
  -    $acc = clone($acc);
  -    $add = clone($add);
  -    foreach my $k (sort keys %{$add}) {
  -        if (    (ref($acc->{$k}) eq "HASH" || (ref($acc->{$k}) eq "ARRAY" 
and ref($acc->{$k}[0]) eq "HASH"))
  -            and (ref($add->{$k}) eq "HASH" || (ref($add->{$k}) eq "ARRAY" 
and ref($add->{$k}[0]) eq "HASH"))
  -           ) {
  -            $acc->{$k} = &mergehashes($acc->{$k}, $add->{$k});
  -        }
  -        else {
  -            $acc->{$k} = $add->{$k};
  -        }
  -    }
  -    return $acc;
  -}
  -
  -sub parsecfgtxt ($)
  -{
  -    my ($text) = @_;
  -    my $parse = {};
  -    my $osspcfg = new OSSP::cfg::simple;
  -    $osspcfg->parse($text) || die "error parsing config file";
  -    $parse = $osspcfg->unpack(-index => '.*', -strip => '.*', -flatten => 1) 
|| die "error unpacking config file";
  -    return $parse;
  -}
  -
  -sub readcfgtxt ($)
  -{
  -    my ($cfgfile) = @_;
  -
  -    die "no config file specified" unless (defined $cfgfile);
  -    my $io = new IO::File "<$cfgfile";
  -    die "cannot open \"$cfgfile\" for reading ($!)" if(not defined $io);
  -    my $txt = ''; $txt .= $_ while (<$io>);
  -    $io->close();
  -    return $txt;
  -}
  -
  -my $defcfg = &parsecfgtxt($defcfgtxt);
  -my $usecfg = 
&parsecfgtxt(&readcfgtxt("$PREFIX/etc/openpkg-registry/registry-ui.cfg"));
  -my $cfg = &mergehashes($defcfg, $usecfg);
  -
   #   optional OSSP::ase integration
   my $ase;
   $ase = undef;
  @@ .
  patch -p0 <<'@@ .'
  Index: openpkg-registry/registry.pm
  ============================================================================
  $ cvs diff -u -r0 -r1.1 registry.pm
  --- /dev/null 2006-08-03 00:15:39 +0200
  +++ registry.pm       2006-08-03 00:15:39 +0200
  @@ -0,0 +1,204 @@
  [EMAIL PROTECTED]@/bin/perl
  +##
  +##  registry.pm - OpenPKG Registry Common Code Perl Module
  +##  Copyright (c) 2006-2006 OpenPKG Foundation e.V. <http://openpkg.net/>
  +##  Copyright (c) 2006-2006 Ralf S. Engelschall <http://engelschall.com/>
  +##
  +##  Permission to use, copy, modify, and distribute this software for
  +##  any purpose with or without fee is hereby granted, provided that
  +##  the above copyright notice and this permission notice appear in all
  +##  copies.
  +##
  +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  +##  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.
  +##
  +
  +package registry;
  +use strict;
  +
  +use Clone qw(clone);
  +
  +#   program name, version and date
  +my $progname="registry.pm";
  +my $progvers="0.6.902";
  +my $progdate="02-Aug-2006";
  +
  +#   get configuration file name
  +#
  +sub getcfgfilename ($)
  +{
  +    my ($prefix) = @_;
  +    my $cfgfile = "";
  +    $cfgfile = "$prefix/etc/openpkg-registry/registry.cfg" unless ($prefix 
=~ m/[EMAIL PROTECTED]@$/);
  +    return $cfgfile;
  +}
  +
  +#   get default configuration text
  +#
  +sub getdefcfgtxt ($)
  +{
  +    my ($prefix) = @_;
  +    my $txt = qq{
  +        ##
  +        ##  registry.cfg - OpenPKG Registry Configuration
  +        ##
  +        
  +        #   user identification
  +        #
  +        identification {
  +            mode constant; /* constant, naive, basicauth, ase */
  +            ase {
  +                server "http://my.example.com/ase";;
  +            };
  +            default anonymous;
  +        };
  +        
  +        #   databases for registry and session
  +        #
  +        db {
  +            registry {
  +                username   registry;
  +                password   registry;
  +                tablespace registry;
  +                host       127.0.0.1;
  +            };
  +            session {
  +                dbfile "$prefix/var/openpkg-registry/ui/session.db";
  +            };
  +        };
  +
  +        #   enable processing of additional data
  +        request {
  +            package 1;
  +        };
  +        
  +        #   canvas integration
  +        #
  +        canvas {
  +            url ""; /* "http://my.example.com/canvas"; */
  +            urlcache;
  +            mark_head "<!-- CANVAS: HEAD -->";
  +            mark_body "<!-- CANVAS: BODY -->";
  +        };
  +        
  +        #   entry page
  +        #
  +        page {
  +            default "main"; /* "", main, dropxml, login, association, logout 
*/
  +            main q{
  +                <h3>Welcome to the OpenPKG Registry main entrance.</h3>
  +                The registry collects information about instances and 
packages.<br>
  +                <b>NOTICE:</b> Version 0.6 introduced uploading package 
information by default.<br>
  +                Read details in the manpage 
<code>openpkg&nbsp;man&nbsp;register</code><br>
  +                Find more information in the manpage under 
<code>--data</code> option and <code>OPENPKG_PREP</code> file.
  +                <p/>
  +                Use the following software to get the <code>openpkg 
register</code> command.
  +                <p/>
  +                <ul>
  +                    <li>OpenPKG CURRENT<br>
  +                        <i>embedded in bootstrap</i></li>
  +                    <li>OpenPKG 2-STABLE<br>
  +                        <i>embedded in bootstrap</i></li>
  +                    <li>OpenPKG 2-STABLE-20060622 SNAPSHOT<br>
  +                        <i>embedded in bootstrap</i></li>
  +                    <li>OpenPKG 2.5 RELEASE<br>
  +                        <i>embedded in bootstrap</i></li>
  +                    <li>OpenPKG 2.4, 2.3, 2.2, 2.1, 2.0 RELEASE<br>
  +                        <a 
href="http://www.openpkg.org/download/";>Download</a> and install the CURRENT 
openpkg-registry package.</li>
  +                    <li>OpenPKG 1.x<br>
  +                        <i>unsupported</i></li>
  +                </ul>
  +            };
  +        };
  +
  +        ##   status line
  +        #
  +        status {
  +            showuser 1;
  +            showversion 0;
  +            showsid 0;
  +        };
  +
  +        ##   debugging
  +        #
  +        debug {
  +            ui 0;
  +        };
  +    };
  +    $txt =~ s/^\n//s;           # remove leading newline
  +    $txt =~ s/^[ ]{8}//mg;      # clear fixed-width indentation
  +    $txt =~ s/ *$//mg;          # remove trailing spaces
  +    $txt =~ s/^ *\n/\n/sg;      # wipe out whitespace-only lines
  +    $txt =~ s/\n{2,}/\n\n/sg;   # consolidate excessive newlines
  +    return $txt;
  +}
  +
  +#   read configuration text file
  +#
  +sub readcfgtxtfile ($)
  +{
  +    my ($cfgfile) = @_;
  +    my $txt = '';
  +    if ($cfgfile) {
  +        my $io = new IO::File "<$cfgfile";
  +        die "cannot open \"$cfgfile\" for reading ($!)" if(not defined $io);
  +        $txt .= $_ while (<$io>);
  +        $io->close();
  +    }
  +    return $txt;
  +}
  +
  +#   parse configuration text
  +#
  +sub parsecfgtxt ($)
  +{
  +    my ($text) = @_;
  +    my $parse = {};
  +    my $osspcfg = new OSSP::cfg::simple;
  +    $osspcfg->parse($text) || die "error parsing config file";
  +    $parse = $osspcfg->unpack(-index => '.*', -strip => '.*', -flatten => 1) 
|| die "error unpacking config file";
  +    return $parse;
  +}
  +
  +#   merge configuration
  +#
  +#   merges two hashes. First argument is a hash working as accumulator and 
the
  +#   second argument is the hash to be added to it. Either argument can be
  +#   empty.  A typical application is the accumulator being prefilled with
  +#   defaults and the adder comes with overrides. The function recursively
  +#   processes nested hashes. Values with dissimilar keys will be merged,
  +#   missing data on either side will be accumulated and identical keys on 
both
  +#   sides will be overwritten with the added data. Returns a new hash with
  +#   cloned data. The original accumulator and adder passed in remain 
untouched.
  +#   If the first element in an array is a hash it is assumed a pseudo-hash as
  +#   described in perlref(1) encountered and hash merging is attempted.
  +#
  +sub mergecfg ($$) {
  +    my ($acc, $add) = @_;
  +    $acc = clone($acc);
  +    $add = clone($add);
  +    foreach my $k (sort keys %{$add}) {
  +        if (    (ref($acc->{$k}) eq "HASH" || (ref($acc->{$k}) eq "ARRAY" 
and ref($acc->{$k}[0]) eq "HASH"))
  +            and (ref($add->{$k}) eq "HASH" || (ref($add->{$k}) eq "ARRAY" 
and ref($add->{$k}[0]) eq "HASH"))
  +           ) {
  +            $acc->{$k} = &mergecfg($acc->{$k}, $add->{$k});
  +        }
  +        else {
  +            $acc->{$k} = $add->{$k};
  +        }
  +    }
  +    return $acc;
  +}
  +
  +1;
  +
  @@ .
______________________________________________________________________
The OpenPKG Project                                    www.openpkg.org
CVS Repository Commit List                     openpkg-cvs@openpkg.org

Reply via email to