package handle_configs; # $Id$ use diagnostics; use strict; use common; sub searchstr { # Preceed all characters which are special characters in regexps with # a backslash, so that the returned string used in a regexp searches # a literal occurence of the original string. White space is replaced # by "\s+" # "quotemeta()" does not serve for this, as it also quotes some regular # characters, as the space my ($s) = @_; $s =~ s!([\\/\(\)\[\]\{\}\|\.\$\@\%\*\?#\+\-])!\\$1!g; return $s; } sub read_directives { # Read one or more occurences of a directive my ($lines_ptr, $directive) = @_; my $searchdirective = searchstr($directive); # do not use if_() below because it slow down printerdrake # to the point one can believe in process freeze: map { (/^\s*$searchdirective\s+(\S.*)$/ ? chomp_($1) : ()) } @$lines_ptr; } sub read_unique_directive { # Read a directive, if the directive appears more than once, use # the last occurence and remove all the others, if it does not # occur, return the default value my ($lines_ptr, $directive, $default) = @_; if ((my @d = read_directives($lines_ptr, $directive)) > 0) { my $value = $d[-1]; set_directive($lines_ptr, "$directive $value"); return $value; } else { return $default; } } sub insert_directive { # Insert a directive only if it is not already there my ($lines_ptr, $directive) = @_; my $searchdirective = searchstr($directive); (/^\s*$searchdirective$/ and return 0) foreach @$lines_ptr; push @$lines_ptr, "$directive\n"; return 1; } sub remove_directive { # Remove a directive my ($lines_ptr, $directive) = @_; my $success = 0; my $searchdirective = searchstr($directive); (/^\s*$searchdirective/ and $_ = "" and $success = 1) foreach @$lines_ptr; return $success; } sub comment_directive { # Comment out a directive my ($lines_ptr, $directive, $exactmatch) = @_; my $success = 0; my $searchdirective = searchstr($directive); $searchdirective .= ".*" if !$exactmatch; (s/^\s*($searchdirective)$/#$1/ and $success = 1) foreach @$lines_ptr; return $success; } sub replace_directive { # Replace a directive, if it appears more than once, remove # the additional occurences. my ($lines_ptr, $olddirective, $newdirective) = @_; my $success = 0; $newdirective = "$newdirective\n"; my $searcholddirective = searchstr($olddirective); (/^\s*$searcholddirective/ and $_ = $newdirective and $success = 1 and $newdirective = "") foreach @$lines_ptr; return $success; } sub move_directive_to_version_commented_out { # If there is a version of the directive "commentedout" which is # commented out, the directive "directive" will be moved in its place. my ($lines_ptr, $commentedout, $directive, $exactmatch) = @_; my $success = 0; my $searchcommentedout = searchstr($commentedout); $searchcommentedout .= ".*" if !$exactmatch; (/^\s*#$searchcommentedout$/ and $success = 1 and last) foreach @$lines_ptr; if ($success) { remove_directive($lines_ptr, $directive); (s/^\s*#($searchcommentedout)$/$directive/ and $success = 1 and last) foreach @$lines_ptr; } return $success; } sub set_directive { # Set a directive, replace the old definition or a commented definition my ($lines_ptr, $directive, $full_line) = @_; my $olddirective = $directive; if (!$full_line) { $olddirective =~ s/^\s*(\S+)\s+.*$/$1/s; $olddirective ||= $directive; } my $success = (replace_directive($lines_ptr, $olddirective, $directive) || insert_directive($lines_ptr, $directive)); if ($success) { move_directive_to_version_commented_out($lines_ptr, $directive, $directive, 1); } return $success; } sub add_directive { # Add a directive, replace a commented definition my ($lines_ptr, $directive) = @_; my $success = insert_directive($lines_ptr, $directive); if ($success) { move_directive_to_version_commented_out($lines_ptr, $directive, $directive, 1); } return $success; } 1; lect name='ignorews' onchange='this.form.submit();'><option value='0' selected='selected'>include</option><option value='1'>ignore</option></select></td></tr><tr><td class='label'>mode:</td><td class='ctrl'><select name='dt' onchange='this.form.submit();'><option value='0' selected='selected'>unified</option><option value='1'>ssdiff</option><option value='2'>stat only</option></select></td></tr><tr><td/><td class='ctrl'><noscript><input type='submit' value='reload'/></noscript></td></tr></table></form></div><table summary='commit info' class='commit-info'> <tr><th>author</th><td>Colin Guthrie <colin@mageia.org></td><td class='right'>2014-04-06 19:28:40 +0000</td></tr> <tr><th>committer</th><td>Colin Guthrie <colin@mageia.org></td><td class='right'>2014-04-06 19:28:40 +0000</td></tr> <tr><th>commit</th><td colspan='2' class='sha1'><a href='/infrastructure/puppet/commit/modules/mirror/manifests/base.pp?id=f23000615ecc91b0d0ce6f901725ff21f0a328b5'>f23000615ecc91b0d0ce6f901725ff21f0a328b5</a> (<a href='/infrastructure/puppet/patch/modules/mirror/manifests/base.pp?id=f23000615ecc91b0d0ce6f901725ff21f0a328b5'>patch</a>)</td></tr> <tr><th>tree</th><td colspan='2' class='sha1'><a href='/infrastructure/puppet/tree/?id=f23000615ecc91b0d0ce6f901725ff21f0a328b5'>da15889625b3c78c8cbc526f26e56bfa1bc81866</a> /<a href='/infrastructure/puppet/tree/modules/mirror/manifests/base.pp?id=f23000615ecc91b0d0ce6f901725ff21f0a328b5'>modules/mirror/manifests/base.pp</a></td></tr> <tr><th>parent</th><td colspan='2' class='sha1'><a href='/infrastructure/puppet/commit/modules/mirror/manifests/base.pp?id=e1038ed7293dad23bb2ee254fcf35cb7095d3c32'>e1038ed7293dad23bb2ee254fcf35cb7095d3c32</a> (<a href='/infrastructure/puppet/diff/modules/mirror/manifests/base.pp?id=f23000615ecc91b0d0ce6f901725ff21f0a328b5&id2=e1038ed7293dad23bb2ee254fcf35cb7095d3c32'>diff</a>)</td></tr><tr><th>download</th><td colspan='2' class='sha1'><a href='/infrastructure/puppet/snapshot/puppet-f23000615ecc91b0d0ce6f901725ff21f0a328b5.tar'>puppet-f23000615ecc91b0d0ce6f901725ff21f0a328b5.tar</a><br/><a href='/infrastructure/puppet/snapshot/puppet-f23000615ecc91b0d0ce6f901725ff21f0a328b5.tar.gz'>puppet-f23000615ecc91b0d0ce6f901725ff21f0a328b5.tar.gz</a><br/><a href='/infrastructure/puppet/snapshot/puppet-f23000615ecc91b0d0ce6f901725ff21f0a328b5.tar.bz2'>puppet-f23000615ecc91b0d0ce6f901725ff21f0a328b5.tar.bz2</a><br/><a href='/infrastructure/puppet/snapshot/puppet-f23000615ecc91b0d0ce6f901725ff21f0a328b5.tar.xz'>puppet-f23000615ecc91b0d0ce6f901725ff21f0a328b5.tar.xz</a><br/><a href='/infrastructure/puppet/snapshot/puppet-f23000615ecc91b0d0ce6f901725ff21f0a328b5.zip'>puppet-f23000615ecc91b0d0ce6f901725ff21f0a328b5.zip</a><br/></td></tr></table> <div class='commit-subject'>Redirect http://git.mageia.org/ to http://gitweb.mageia.org/</div><div class='commit-msg'>