diff options
author | Andreas Gruenbacher <agruen@suse.de> | 2003-01-31 12:45:37 +0000 |
---|---|---|
committer | Andreas Gruenbacher <agruen@suse.de> | 2003-01-31 12:45:37 +0000 |
commit | 21a15e55a81ea4bd2bc21729ceebe6be6a9ccd9b (patch) | |
tree | 150f25f9add7ecb5ae144ab63a62c3b43d25f378 /scripts/parse-patch.in | |
parent | f07f43d191fe23209876061b7a31b5cb1e9a219d (diff) | |
download | quilt-21a15e55a81ea4bd2bc21729ceebe6be6a9ccd9b.tar.gz |
Install binary backup-files into /usr/lib/quilt and the remaining scripts under /usr/share/quilt/scripts.
Diffstat (limited to 'scripts/parse-patch.in')
-rw-r--r-- | scripts/parse-patch.in | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/scripts/parse-patch.in b/scripts/parse-patch.in new file mode 100644 index 0000000..56c3c55 --- /dev/null +++ b/scripts/parse-patch.in @@ -0,0 +1,129 @@ +#!@PERL@ -w + +# This script is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# See the COPYING and AUTHORS files for more details. + +# Extract or update a section from a combined patch + documentation + +# meta information file. + +use FileHandle; +use Getopt::Long; +use File::Temp qw(tempfile); +use strict; + +my $select; +my $update; + +if (!GetOptions("s|select=s" => \$select, + "u|update=s" => \$update) || + (!defined $select && !defined $update)) { + print STDERR "USAGE: $0 {-s|-u} section file [< replacement]\n"; + exit 1; +} + +foreach my $arg (@ARGV) { + my $fh; + + if (! -e $arg) { + $fh = new FileHandle("/dev/null"); + } elsif ($arg =~ /\.gz$/) { + $fh = new FileHandle("gzip -cd $arg |"); + } elsif ($arg =~ /\.bz2$/) { + $fh = new FileHandle("bzip2 -cd $arg |"); + } else { + $fh = new FileHandle("< $arg"); + } + + unless ($fh) { + print STDERR "$arg: $!\n"; + next; + } + + if (defined $select) { + my $section = "head"; + my $newline = ""; + while (<$fh>) { + if (/^%(.*)/) { + last if $section eq $select; + $section = $1; + next; + } + if ($section eq $select) { + print $newline; + if ($_ eq "\n") { + $newline = $_; + } else { + $newline=""; + print; + } + } + } + } elsif (defined $update) { + my ($fh2, $tempname) = tempfile("$arg.XXXXXX"); + if ($arg =~ /\.gz$/) { + $fh2->close(); + if (! -e $tempname) { + die "File $tempname disappeared!\n"; + } + $fh2 = new FileHandle("| gzip -c > $tempname"); + } elsif ($arg =~ /\.bz2$/) { + $fh2->close(); + if (! -e $tempname) { + die "File $tempname disappeared!\n"; + } + $fh2 = new FileHandle("| bzip2 -c > $tempname"); + } + unless ($fh2) { + die "$tempname: $!\n"; + } + + # Copy things before updated section + my $last_was_newline=1; # start first section in first line + while (<$fh>) { + if (/^%(.*)/ && $1 eq $update) { + last; + } + $last_was_newline = ($_ eq "\n"); + print $fh2 $_; + } + print $fh2 "\n" + unless ($last_was_newline); + + # Create/replace updated section + print $fh2 "%$update\n"; + while (<STDIN>) { + print $fh2 $_; + } + print $fh2 "\n"; + + # Skip obsolete section + while (<$fh>) { + if (/^%(.*)/) { + print $fh2 $_; + last; + } + } + # Copy things after updated section + while (<$fh>) { + print $fh2 $_; + } + unless (close $fh2) { + die "$arg.patch: $!\n"; + } + + if (-e $arg) { + unlink "$arg~"; + unless (rename $arg, "$arg~") { + die "Failed to rename $arg to $arg~: $!\n"; + } + } + unless (rename $tempname, $arg) { + rename("$arg~", $arg); + die "Failed to rename $arg.parse to $arg: $!\n"; + } + } + close $fh; +} |