#!/usr/bin/perl # ------------------------------------------------------------------------------ # NAME # fcm_graphic_diff # # SYNOPSIS # fcm_graphic_diff [-u] [-L OLD_DESC] [-L NEW_DESC] OLD NEW # # DESCRIPTION # Wrapper script which invokes a graphical diff tool. Its interface is # compatible with the "svn diff" command and can be used in combination with # its "--diff-cmd" option. The command prints the OLD_DESC and NEW_DESC if # they are both set. The two arguments OLD and NEW must be set and are the # files to compare. The graphical diff tool invoked depends on the value of # the FCM_GRAPHIC_DIFF environment variable. The command exits if the # environment variable is not set. # # COPYRIGHT # This program is part of the FCM system. # (C) Crown copyright Met Office. All rights reserved. # For further details please refer to the file COPYRIGHT.txt # which you should have received as part of this distribution. # ------------------------------------------------------------------------------ # Standard pragmas: use warnings; use strict; use Getopt::Long; # ------------------------------------------------------------------------------ my ($u, @label); GetOptions ('u' => \$u, 'L=s' => \@label); # Check existence of files for my $i (0 .. 1) { die $ARGV[$i], ': not found, abort' unless $ARGV[$i] and -f $ARGV[$i]; } my ($old, $new) = @ARGV; if ($old =~ m#.svn/empty-file$#) { print 'Skipping new file', "\n\n"; } elsif ($new =~ m#.svn/empty-file$#) { print 'Skipping deleted file', "\n\n"; } elsif (-z $old) { print 'Skipping as old file is empty (or does not exist)', "\n\n"; } elsif (-z $new) { print 'Skipping as new file is empty (or deleted)', "\n\n"; } elsif (-B $new) { print 'Skipping binary file', "\n\n"; } else { # Print descriptions of files if (@label >= 2) { print '--- ', $label[0], "\n", '+++ ', $label[1], "\n\n"; } # FCM_GRAPHIC_DIFF is the graphical diff tool command my $cmd = (exists $ENV{FCM_GRAPHIC_DIFF} ? $ENV{FCM_GRAPHIC_DIFF} : 'xxdiff'); if ($cmd) { my @options = (); # Set options for labels if appropriate if (@label >= 2) { if ($cmd eq 'tkdiff') { # Use tkdiff @options = ('-L', $label[0], '-L', $label[1]); } elsif ($cmd eq 'xxdiff') { # Use xxdiff @options = ('--title1', $label[0], '--title2', $label[1]); } } # Execute the command my @command = ($cmd, @options, $old, $new); exec (@command) or die 'Cannot execute: ', join (' ', @command); } exit; } __END__