mirror of
https://github.com/beard7n/bsdports.git
synced 2026-04-11 02:51:18 +02:00
create bsd12 branch
This commit is contained in:
111
Tools/scripts/splitpatch.pl
Executable file
111
Tools/scripts/splitpatch.pl
Executable file
@@ -0,0 +1,111 @@
|
||||
#! /usr/bin/env perl
|
||||
# ----------------------------------------------------------------------------
|
||||
# "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: head/Tools/scripts/splitpatch.pl 391618 2015-07-09 06:49:28Z ehaupt $
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
# 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 $_;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user