Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Tools
obs-service-regex_replace
regex_replace
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File regex_replace of Package obs-service-regex_replace
#!/usr/bin/perl # (C) 2010 by Adrian Schröter <adrian@suse.de> # (C) 2014 martin.koegler@chello.at # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # See http://www.gnu.org/licenses/gpl-2.0.html for full license text. my $regex; my $replace; my $outdir; my @files; use strict; use warnings; sub usage() { print<<END Open Build Service source service "regex_replace" Used to update build files using regular expressions. Required: --outdir: output directory for modified sources --regex: regular expression --replace: replacement expression --file: modify this build description. maybe used multiple times. END ; exit; } while (@ARGV) { usage() if $ARGV[0] eq '--help'; if ($ARGV[0] eq '--outdir') { shift @ARGV; $outdir = shift @ARGV; next; } elsif ($ARGV[0] eq '--regex') { shift @ARGV; $regex = shift @ARGV; next; } elsif ($ARGV[0] eq '--replace') { shift @ARGV; $replace = shift @ARGV; next; } elsif ($ARGV[0] eq '--file') { shift @ARGV; my $file = shift @ARGV; # avoid jailbreak with .. $file =~ s#.*/(.*)$#$1#; push @files, $file; next; } else { die("Unknown argument $ARGV[0]!"); } last; } usage() unless $outdir; usage() unless $regex; usage() unless $replace; usage() unless @files; # to replace tags in .spec and .dsc files sub replace_file { my ($filename, $regex, $replace) = @_; local *R; local *W; if (!open(R, '<', $filename)) { die("unable to read $filename: $!\n"); return undef; } if (!open(W, '>', "$outdir/.$filename")) { die("unable to write .$filename: $!\n"); return undef; } my $line; while (defined($line = <R>)) { $line =~ s/\n$//; $line =~ s/$regex/$replace/g; print W "$line\n"; } close R; close W; rename("$outdir/.$filename", "$outdir/$filename") || die("rename failed"); } for my $pattern (@files) { my @files = glob $pattern; for my $file (@files) { replace_file($file, $regex, $replace); } }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor