| 
									
										
										
										
											2014-05-06 15:44:51 -04:00
										 |  |  | #! /bin/sh | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #   Copyright | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #	Copyright (C) 2009-2010 Jari Aalto <jari.aalto@cante.net> | 
					
						
							|  |  |  | #	Copyright (C) 2008 Matthieu Moy <Matthieu.Moy@imag.fr> | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #   License | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #       This program is free software; you can redistribute it and/or modify | 
					
						
							|  |  |  | #       it under the terms of the GNU General Public License as published by | 
					
						
							|  |  |  | #       the Free Software Foundation; either version 2 of the License, or | 
					
						
							|  |  |  | #       (at your option) any later version. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #       This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | #       but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | #       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
					
						
							|  |  |  | #       GNU General Public License for more details | 
					
						
							|  |  |  | #       at <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ "$debug" ] && set -x | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PROGRAM=$(basename $0) | 
					
						
							| 
									
										
										
										
											2014-07-16 08:27:27 -04:00
										 |  |  | prg="/home/bkuhn/hacks/Small-Hacks/cwdiff --diff --ab" | 
					
						
							| 
									
										
										
										
											2014-05-06 15:44:51 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | if [ -x /opt/csw/bin/gdiff ]; then 			# SUN/OS Solaris | 
					
						
							|  |  |  |     prg=/opt/csw/bin/gdiff | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DIFF_PROGRAM=${DIFF_PROGRAM:-$prg} | 
					
						
							| 
									
										
										
										
											2014-07-16 08:27:27 -04:00
										 |  |  | diff_prg_name=`basename $DIFF_PROGRAM` | 
					
						
							| 
									
										
										
										
											2014-05-06 15:44:51 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | Warn () | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     echo "$*" >&2 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Die () | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Warn "$PROGRAM: [ERROR] $*" | 
					
						
							|  |  |  |     exit 1 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | usage () | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     echo "\ | 
					
						
							|  |  |  | NAME | 
					
						
							|  |  |  |     $PROGRAM - Diff Open Document files | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SYNOPSIS | 
					
						
							|  |  |  |     [debug=1] $PROGRAM [options] FILE1 [FILE2] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DESCRIPTION | 
					
						
							|  |  |  |    Show difference of openoffice documents as plain text ASCII. | 
					
						
							|  |  |  |    If FILE2 is not provided, $PROGRAM will search for an svn base | 
					
						
							|  |  |  |    file, and show the diff against the last commited version in SVN. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Depends on program odt2txt being installed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | OPTIONS | 
					
						
							|  |  |  |     Options are same as in diff(1) command. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     If variable 'debug' exists in environment, the program is run | 
					
						
							|  |  |  |     with shell \"set -x\" option. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | EXAMPLES | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     To use form command line: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         oodiff file-v1.odt file-v2.odt | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     To use from Git: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         [debug=1] GIT_EXTERNAL_DIFF=oodiff git diff file.odt | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | AUTHORS | 
					
						
							|  |  |  |     Original author is Matthieu Moy <Matthieu.Moy@imag.fr> | 
					
						
							|  |  |  |     Major cleanup by Jari Aalto <jari.aalto@cante.net> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | AVAILABILITY | 
					
						
							|  |  |  |     http://www-verimag.imag.fr/~moy/opendocument/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | COPYRIGHT | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     License GPL-2+: GNU GPL version 2 or later | 
					
						
							|  |  |  |     <http://gnu.org/licenses/gpl.html>. This is free software: you | 
					
						
							|  |  |  |     are free to change and redistribute it. There is NO WARRANTY, | 
					
						
							|  |  |  |     to the extent permitted by law. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SEE ALSO | 
					
						
							|  |  |  |     odt2txt(1)" | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | clean_up () | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     [ "$ft1" ] && rm -f "$ft1" | 
					
						
							|  |  |  |     [ "$ft2" ] && rm -f "$ft2" | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Main () | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     file1="" | 
					
						
							|  |  |  |     file2="" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     while test $# -ne 0; do | 
					
						
							|  |  |  | 	case "$1" in | 
					
						
							|  |  |  | 	    --help|-h) | 
					
						
							|  |  |  | 		usage | 
					
						
							|  |  |  | 		exit 0 | 
					
						
							|  |  |  | 		;; | 
					
						
							|  |  |  | 	    -*) | 
					
						
							|  |  |  | 		opts="$opts $1" | 
					
						
							|  |  |  | 		;; | 
					
						
							|  |  |  | 	    *) | 
					
						
							|  |  |  | 		if [ ! "$file1" ]; then | 
					
						
							|  |  |  | 		    file1=$1 | 
					
						
							|  |  |  | 		elif [ ! "$file2" ]; then | 
					
						
							|  |  |  | 		    file2=$1 | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 		    usage | 
					
						
							|  |  |  | 		    exit 1 | 
					
						
							|  |  |  | 		fi | 
					
						
							|  |  |  | 		;; | 
					
						
							|  |  |  | 	esac | 
					
						
							|  |  |  | 	shift | 
					
						
							|  |  |  |     done | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if [ ! "$file1" ]; then | 
					
						
							|  |  |  | 	Die "missing FILE1 argument." | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     svnfile="$(dirname "$file1")/.svn/text-base/${file1##*/}.svn-base" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if [ ! "$file2" ]; then | 
					
						
							|  |  |  |         if [ -f "$svnfile" ]; then | 
					
						
							|  |  |  | 	    file2="$file1" | 
					
						
							|  |  |  | 	    file1="$svnfile" | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  | 	    Die "missing FILE2 argument" \ | 
					
						
							|  |  |  | 		"(tried SVN base file, but it doesn't exist: $svnfile)" | 
					
						
							|  |  |  |         fi | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if [ -d "$file1" ]; then | 
					
						
							|  |  |  | 	# Be recursive. | 
					
						
							|  |  |  | 	# echo "entering $file1" | 
					
						
							|  |  |  | 	for file in "$file1"/* | 
					
						
							|  |  |  | 	do | 
					
						
							|  |  |  | 	    "$0" $opts "$file" $(echo "$file" | sed "s@^$file1/@$file2/@") | 
					
						
							|  |  |  | 	done | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  | 	ft1=$(mktemp /tmp/oodiff.$$.1.XXXXXXXXXX) \ | 
					
						
							|  |  |  | 	    || ft1="/tmp/oodiff.$$.1" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	ft2=$(mktemp /tmp/oodiff.$$.2.XXXXXXXXXX) \ | 
					
						
							|  |  |  | 	    || ft2="/tmp/oodiff.$$.2" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	trap 'clean_up; exit 0' 1 2 3 15 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if odt2txt "$file1" > "$ft1" 2>/dev/null && \ | 
					
						
							|  |  |  | 	   odt2txt "$file2" > "$ft2" 2>/dev/null | 
					
						
							|  |  |  | 	then | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-16 08:27:37 -04:00
										 |  |  |             diffopts="-L \"$file1\" -L \"$file2\"" | 
					
						
							|  |  |  |             if [ "$diff_prg_name" == "cwdiff" ]; then | 
					
						
							|  |  |  |                 diffopts="--diff-opts \"--new-file --unified --show-c-function --recursive -L \"$file1\" -L \"$file2\"" | 
					
						
							|  |  |  |             fi | 
					
						
							|  |  |  | 	    if $DIFF_PROGRAM  $opts "$ft1" "$ft2" | 
					
						
							| 
									
										
										
										
											2014-05-06 15:44:51 -04:00
										 |  |  | 	    then | 
					
						
							|  |  |  | 		# no text change | 
					
						
							|  |  |  | 		if diff -q "$file1" "$file2"; then | 
					
						
							|  |  |  | 		    : # no change at all | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 		    echo "OpenDocument files $file1 and $file2 files differ" \ | 
					
						
							|  |  |  | 			 "(same text content)" | 
					
						
							|  |  |  | 		fi | 
					
						
							|  |  |  | 	    fi | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 	    $DIFF_PROGRAM $opts "$file1" "$file2" | 
					
						
							|  |  |  | 	fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	clean_up | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Main "$@" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # End of file |