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 ## ## 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 (); 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 (); 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 (); 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 @@