2009/1/8 R P Herrold herrold@centos.org:
On Thu, 8 Jan 2009, Amos Shapira wrote:
I found Perl's Conf::INI module but it expects comments beginning with ";", not "#".
and | sed -e 's@^#@;@g' cannot cure that bad habit on generated files or an input stream?
Possibly, but then I'll get pushed back to scripting things around.
When I saw Filipe's pointer to configparser I already finished coding something rough in perl which detects [section]'s in input files, adds the "priority=nnn" for each section and moves the old version to a backup with "~". The code should be generalised to do the other stuff I'm interested in (e.g. configure yum-priorities, or the trigger for all of this - yum-updatesd). It assumes that a section and also end with the first empty line. Maybe this is wrong but it keeps my current files "looking right".
It's small enough that I pasted it below for your amusement.
I also found a python script based on configparser which can do this from command line (http://robinbowes.com/article.php/20081026162228424) but it loses comments.
Cheers,
--Amos
Here is my script:
#!/usr/bin/perl
use strict; use warnings; use IO::File; use Readonly;
Readonly::Hash our %PRIORITIES => ( 'base' => '1', 'updates' => '1', 'addons' => '1', 'extras' => '1', 'centosplus' => '2', 'c5-testing' => '13', 'rpmforce' => '10', );
sub configure_priorities { my $orig_fh = new IO::File; my $new_fh = new IO::File;
for my $repo_file (glob '/etc/yum.repos.d/*.repo') { $orig_fh->open($repo_file, 'r') or die "!!! configure_priorities: failed to open "$repo_file""; rename($repo_file, $repo_file.'~') or die "!!! configure_priorities: failed to rename "$repo_file" to "$repo_file~": $!"; $new_fh->open($repo_file, 'w') or die "!!! configure_priorities: failed to create new "$repo_file": $!";
my $reponame = undef; while (my $line = $orig_fh->getline) { if ($line =~ /^[(.+)])/) { defined $reponame and defined $PRIORITIES{$reponame} and $new_fh->print("priority=", $PRIORITIES{$reponame}, "\n"); $reponame = $1; # will become undef if current $line is empty } $new_fh->print($line); } # if no empty lines after last repo defined $reponame and defined $PRIORITIES{$reponame} and $new_fh->print("priority=", $PRIORITIES{$reponame}, "\n"); $new_fh->close or die "!!! configure_priorities: Failed to close new version of "$repo_file": $!"; } $orig_fh->close or warn "close failed: $!"; }
configure_priorities;
exit 0;