#!@PERL5@ # # $NetBSD: patchdiff.pl,v 1.16 2016/02/10 16:00:10 wiz Exp $ # # patchdiff: compares a set of patches in the patch dir with their predecessors # # Copyright (c) 2000, 2011 by Dieter Baron and # Thomas Klausner # Copyright (c) 2016 Thomas Klausner # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHORS # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # use Getopt::Std; use Cwd; use File::Spec; my $patchdir, $patchdir; my $wrkdir, $thisdir; my %orig, %new; sub getfilename { my $fname=shift; local $_; local *handle; open(handle, $fname); while () { next unless m/^\+\+\+[ ]([^ ]*)/; close(handle); $_ = $1; chomp(); s/^\.\///; # ignore leading "./", if any. return $_; } close(handle); return undef; } sub putinhash { my $hash=shift; my $files=shift; my $temp; local *handle; open(handle, "ls $files|"); while() { chomp; $temp=getfilename($_); $$hash{$temp}=File::Spec->abs2rel($_, $thisdir); } close(handle); } getopts('Dd:h'); if ($opt_h) { ($prog) = ($0 =~ /([^\/]+)$/); print STDERR <) { $orig = $_; chomp($orig); $new = $orig; $new =~ s/.orig$//; if (! -f "$new") { print "File $new removed\n"; } else { $diff=`diff $orig $new`; if ($diff) { if (! -s $orig) { print "New file $new\n"; } else { print "Comparing $orig to $new\n$diff"; } } else { print "$orig and $new are the same"; } } }