#!/usr/bin/perl # git-bdiff -- fake compare binary files use strict; use warnings; my $i; if (@ARGV == 1) { $i = 0; } elsif (@ARGV == 7) { $i = 4; } else { die <<USAGE usage: $0 file or $0 a t A s b B S USAGE } my @deps; (my $path = $ARGV[$i]) =~ s,[^/]*$,,; (my $target = $ARGV[$i]) =~ s,.*/,,; (my $ext = $target) =~ s/.*\.//; (my $basename = $target) =~ s/\.[^.]*$//; chomp(my $repo = `git rev-parse --show-toplevel`); open my $f, '<', "$repo/${path}Makefile" or die "could not open $repo/${path}Makefile: $!\n"; while (<$f>) { # explicit if (/^\Q$target\E:\s*(.*)/) { push @deps, "$repo/$path$_" for split /\s/, $1; last; } # implicit if (/^\.([^ .]+)\.\Q$ext\E\s*:\s*(.*)/) { push @deps, "$repo/$path$basename.$1"; push @deps, "$repo/$path$_" for split /\s/, $2; last; } } close $f; die "no dependencies found, cannot compare\n" if not @deps; $i = 0; for (`git diff HEAD -- @deps`) { print if @ARGV == 7; $i = 1; } exit $i if @ARGV == 1;