#!/usr/bin/perl use strict; my $sourcedir = shift @ARGV; unless ($sourcedir) { print <; chomp; exit if ($_ && $_ == undef); # abort if any value other than a number my $minlevel = $_ || $sourcelevel; # main patching loop foreach (@dirlist) { /(\d+)$/; my $level = $1; if (($level >= $minlevel) && ($level != $sourcelevel)) { print "\nPatching $_ ...\n"; chdir $_; print `git diff -U3 --minimal $sourcedir | patch -p2`; push @failed, $specname . '-' . $level if $?; chdir $rootdir; } } # wrap it up if (@failed == 0) { my $dirs = join ' ', @dirlist; print "\n\nWould you like me to issue `git commit $dirs`?\n"; print "Enter arguments (e.g. -m 'message' --amend) or leave blank to skip commit.\n"; print "git commit : "; my $args = ; chomp $args; if ($args) { print "Executing git commit $args $dirs ...\n\n"; exec "git commit $args $dirs"; } } else { die "\n\nPatching failed for @failed, please fix and commit manually.\n"; }