head	1.1;
branch	1.1.1;
access;
symbols
	OPENPKG_E1_MP_HEAD:1.1.1.1
	OPENPKG_E1_MP:1.1.1.1
	OPENPKG_E1_MP_2_STABLE:1.1.1.1
	OPENPKG_E1_FP:1.1.1.1
	OPENPKG_2_STABLE_MP:1.1.1.1
	OPENPKG_2_STABLE_20061018:1.1.1.1
	OPENPKG_2_STABLE_20060622:1.1.1.1
	OPENPKG_2_STABLE:1.1.1.1.0.24
	OPENPKG_2_STABLE_BP:1.1.1.1
	OPENPKG_2_5_RELEASE:1.1.1.1
	OPENPKG_2_5_SOLID:1.1.1.1.0.22
	OPENPKG_2_5_SOLID_BP:1.1.1.1
	OPENPKG_2_4_RELEASE:1.1.1.1
	OPENPKG_2_4_SOLID:1.1.1.1.0.20
	OPENPKG_2_4_SOLID_BP:1.1.1.1
	OPENPKG_CW_FP:1.1.1.1
	OPENPKG_2_3_RELEASE:1.1.1.1
	OPENPKG_2_3_SOLID:1.1.1.1.0.18
	OPENPKG_2_3_SOLID_BP:1.1.1.1
	OPENPKG_2_2_RELEASE:1.1.1.1
	OPENPKG_2_2_SOLID:1.1.1.1.0.16
	OPENPKG_2_2_SOLID_BP:1.1.1.1
	OPENPKG_2_1_RELEASE:1.1.1.1
	OPENPKG_2_1_SOLID:1.1.1.1.0.14
	OPENPKG_2_1_SOLID_BP:1.1.1.1
	OPENPKG_2_0_RELEASE:1.1.1.1
	OPENPKG_2_0_SOLID:1.1.1.1.0.12
	OPENPKG_2_0_SOLID_BP:1.1.1.1
	OPENPKG_1_3_RELEASE:1.1.1.1
	OPENPKG_1_3_SOLID:1.1.1.1.0.10
	OPENPKG_1_3_SOLID_BP:1.1.1.1
	OPENPKG_1_STABLE_MP:1.1.1.1
	OPENPKG_1_2_RELEASE:1.1.1.1
	OPENPKG_1_2_SOLID:1.1.1.1.0.8
	OPENPKG_1_2_SOLID_BP:1.1.1.1
	OPENPKG_1_STABLE:1.1.1.1.0.6
	OPENPKG_1_STABLE_BP:1.1.1.1
	OPENPKG_1_1_RELEASE:1.1.1.1
	OPENPKG_1_1_SOLID:1.1.1.1.0.4
	OPENPKG_1_1_SOLID_BP:1.1.1.1
	OPENPKG_1_0_RELEASE:1.1.1.1
	OPENPKG_1_0_SOLID:1.1.1.1.0.2
	OPENPKG_1_0_SOLID_BP:1.1.1.1
	OPENPKG_0_0:1.1.1.1
	OPENPKG:1.1.1;
locks; strict;
comment	@# @;


1.1
date	2001.09.18.09.48.29;	author rse;	state Exp;
branches
	1.1.1.1;
next	;

1.1.1.1
date	2001.09.18.09.48.29;	author rse;	state Exp;
branches;
next	;


desc
@@



1.1
log
@Initial revision
@
text
@#!/usr/bin/perl
##
##  mirror-summary -- Create A Mirror Summary List
##  Copyright (c) 1998-2001 Ralf S. Engelschall <rse@@engelschall.com>
##
##  Usage: mirror-summary 
##

## 
##  parse command line request
##

%R = {};
foreach $arg (@@ARGV) {
    if ($arg =~ m|^(\S+)=(.+)$|) {
        $R->{$1} = $2;
    }
}

##
##  read mirror package configuration
##

#   read all package config files
@@F = glob($R->{'pkgdir'}."/*");
$config = '';
foreach $f (sort(@@F)) {
    open(FP, "<$f") || die;
    $config .= $_ while (<FP>);
    close(FP);
}
$config .= "\n\n";
$config =~ s|^#.+?||mg;

#   convert package config into internal structure
$P = {};
$config =~ s|package=(\S+).*?\n(.+?\n)\n|&do_package($1, $2), ''|sge;
sub do_package {
    my ($name, $config) = @@_;
    $P->{$name} = {};
    $config =~ s|^\s*([a-zA-Z0-9_-]+)([+=].*?)$|$P->{$name}->{$1} = $2, ''|mge;
}

#   expand the key+value notation
foreach $e (keys(%{$P->{'defaults'}})) {
    $P->{'defaults'}->{$e} =~ s|^=||;
}
foreach $p (keys(%{$P})) {
    next if ($p eq 'defaults');
    foreach $e (keys(%{$P->{$p}})) {
        ($op, $val) = ($P->{$p}->{$e} =~ m|^([+=])(.*)$|);
        if ($op eq '+') {
            $P->{$p}->{$e} = $P->{'defaults'}->{$e}.$val;
        }
        else {
            $P->{$p}->{$e} = $val;
        }
    }
}

##
##  generate summary
##

#   place a string into a specific number of columns   
sub cutfill {
    my ($str, $col) = @@_;
    if (length($str) > $col) {
        $str = substr($str, 0, $col-1)."+";
    }
    elsif (length($str) < $col) {
        $str = substr($str." "."."x$col, 0, $col);
    }
    return $str;
}

if ($R->{'excerpt'} ne '') {
    %O = ();
    foreach $p (sort(keys(%{$P}))) {
        next if ($p eq 'defaults');
        next if ($P->{$p}->{'skip'} eq 'yes');
        $what = $P->{$p}->{'comment'};
        if ($what =~ s|\s*\[\*\]||) {
            $from = "ftp://".$P->{$p}->{'site'}.$P->{$p}->{'remote_dir'};
            $to   = $P->{$p}->{'local_dir'};
            $to   =~ s|^$R->{'rootdir'}||;
            $O{$to} = sprintf("%-30s %-35s\n", &cutfill($to, 30), $what);
        }
    }
    $T = '';
    foreach $o (sort(keys(%O))) {
        $T .= $O{$o};
    }

    ($user, $group, $files, $begin, $prefix, $end) = split(':', $R->{'excerpt'});
    if ($files =~ m|.+\+.+|) {
        @@F = split(/\+/, $files);
    }
    else {
        @@F = ($files);
    }
    $T =~ s|^|$prefix|mg;
    foreach $file (@@F) {
        open(FP, "<$file");
        $text = '';
        $text .= $_ while (<FP>);
        close(FP);
        $text =~ s|(.*$begin.*?\n).*\n(.*?$end.*)|$1$T$2|s;
        open(FP, ">$file.new");
        print FP $text;
        close(FP);
        system("cp $file.new $file && rm -f $file.new");
        system("chown $user:$group $file");
    }
}

if ($R->{'full'} ne '') {
    %O = ();
    foreach $p (sort(keys(%{$P}))) {
        next if ($p eq 'defaults');
        next if ($P->{$p}->{'skip'} eq 'yes');
        $what = $P->{$p}->{'comment'};
        $what =~ s|\s*\[\*\]||;
	$from = "ftp://".$P->{$p}->{'site'}.$P->{$p}->{'remote_dir'}."/";
	$from =~ s|/+$|/|;
	$to   = $P->{$p}->{'local_dir'}."/";
	$to   =~ s|^$R->{'rootdir'}|$R->{'rooturl'}|;
	$to   =~ s|/+$|/|;
	$O{$what}  = "$what\n";
	$O{$what} .= "    Origin: $from\n";
	$O{$what} .= "    Mirror: $to\n";
	$O{$what} .= "\n";
    }
    $T = "\n";
    foreach $o (sort(keys(%O))) {
        $T .= $O{$o};
    }

    ($user, $group, $file, $begin, $prefix, $end) = split(':', $R->{'full'});
    $T =~ s|^|$prefix|mg;
    open(FP, "<$file");
    $text = '';
    $text .= $_ while (<FP>);
    close(FP);
    $text =~ s|(.*$begin.*?\n).*\n(.*?$end.*)|$1$T$2|s;
    open(FP, ">$file.new");
    print FP $text;
    close(FP);
    system("cp $file.new $file && rm -f $file.new");
    system("chown $user:$group $file");
}

@


1.1.1.1
log
@Import OpenPKG sources into CVS repository

@
text
@@
