diff options
author | Anton Berezin <tobez@FreeBSD.org> | 2005-04-12 10:56:08 +0000 |
---|---|---|
committer | Anton Berezin <tobez@FreeBSD.org> | 2005-04-12 10:56:08 +0000 |
commit | bbd85008bd2069495542eb2f2f9216f405ebcafa (patch) | |
tree | 7962738e5ce68c86dcdf805a700d59d57aa74276 /Tools | |
parent | b15acf8ca74f8ac50547c4e1e53bbf87a5e01e3f (diff) | |
download | ports-bbd85008bd2069495542eb2f2f9216f405ebcafa.tar.gz ports-bbd85008bd2069495542eb2f2f9216f405ebcafa.zip |
Add a splitpatch.pl utility, a small script to convert multi-file
patches to several appropriately named single-file patches.
Requested by: flz
Notes
Notes:
svn path=/head/; revision=133135
Diffstat (limited to 'Tools')
-rw-r--r-- | Tools/scripts/README | 2 | ||||
-rwxr-xr-x | Tools/scripts/splitpatch.pl | 110 |
2 files changed, 112 insertions, 0 deletions
diff --git a/Tools/scripts/README b/Tools/scripts/README index 200de58d33af..9dd53f2de754 100644 --- a/Tools/scripts/README +++ b/Tools/scripts/README @@ -33,6 +33,8 @@ prdone - checks in the port, attempting to fill out the commit message using portsearch - A utility for searching the ports tree. It allows more detailed search criteria than ``make search key=<string>'' and accepts all perl(1) regular expressions. +splitpatch.pl - A small script to convert multi-file patches to several + appropriately named single-file patches. tindex - script used to build INDEXes for supported FreeBSD branches, which are the source of the 'make fetchindex' INDEXes, and the build failure reports on ports@FreeBSD.org diff --git a/Tools/scripts/splitpatch.pl b/Tools/scripts/splitpatch.pl new file mode 100755 index 000000000000..9b69c89fb003 --- /dev/null +++ b/Tools/scripts/splitpatch.pl @@ -0,0 +1,110 @@ +#! /usr/bin/perl -w +# ---------------------------------------------------------------------------- +# "THE BEER-WARE LICENSE" (Revision 42) +# <tobez@FreeBSD.org> wrote this file. As long as you retain this notice you +# can do whatever you want with this stuff. If we meet some day, and you think +# this stuff is worth it, you can buy me a beer in return. Anton Berezin +# ---------------------------------------------------------------------------- +# +# $FreeBSD$ +use strict; + +# good tests: +# /usr/ports/archivers/zoo/files/patch-aa (context diff) +# /usr/ports/astro/xplanet/files/patch-aa (unified with paths) + +my ($in,$fl,$abort,$state,$out); + +if (!@ARGV || $ARGV[0] =~ /^-/) { + print STDERR "Usage: + $0 patchfile ... +" +} + +while (@ARGV) { + $in = shift; + $state = \&nofile; + if (open IN, "< $in") { + $abort = 0; + $out = ""; + $fl = ""; + while (<IN>) { + $state->(); + last if $abort; + } + close IN; + if ($out && !$abort) { + print "Wrote $out\n"; + } + } else { + print STDERR "cannot open $in: $!\n"; + } +} + +sub nofile +{ + if (/^\*\*\*\s+/ && !/^\*\*\*\s+\d+,\d+\s+/) { + $state = \&cstart; + $fl = $_; + } elsif (/^---\s+/ && !/^---\s+\d+,\d+\s+/) { + $state = \&ustart; + $fl = $_; + } +} + +sub cstart +{ + if (!/^---\s+\d+,\d+\s+/ && /^---\s+(\S+)\s+/) { + $state = \&body; + $out = $1; + $out =~ s|/|_|g; + $out = "patch-$out"; + if (open OUT, "> $out") { + print OUT $fl; + print OUT $_; + } else { + print STDERR "Cannot create $out: $!, aborting\n"; + $abort = 1; + } + } else { + print STDERR "Bad context diff in $in, aborting\n"; + $abort = 1; + } +} + +sub ustart +{ + if (/^\+\+\+\s+(\S+)\s+/) { + $state = \&body; + $out = $1; + $out =~ s|/|_|g; + $out = "patch-$out"; + if (open OUT, "> $out") { + print OUT $fl; + print OUT $_; + } else { + print STDERR "Cannot create $out: $!, aborting\n"; + $abort = 1; + } + } else { + print STDERR "Bad unified diff in $in, aborting\n"; + $abort = 1; + } +} + +sub body +{ + if (/^\*\*\*\s+/ && !/^\*\*\*\s+\d+,\d+\s+/) { + close OUT; + print "Wrote $out\n"; + $state = \&cstart; + $fl = $_; + } elsif (/^---\s+/ && !/^---\s+\d+,\d+\s+/) { + close OUT; + print "Wrote $out\n"; + $state = \&ustart; + $fl = $_; + } else { + print OUT $_; + } +} |