blob: 6b358e53498727676bb70ea27a1411ca5c21cb3b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
#!/usr/bin/perl
#
# Copyright (c) 2002, DecisionSoft Limited All rights reserved.
# Please see:
# http://software.decisionsoft.com/licence.html
# for more information.
#
# Modified for the Fedora Docs Project by Tommy.Reynolds@MegaCoder.com
#
#
# xmldiff: xmldiff program - uses xmlpp, which must be on the ${PATH}
#
#Change this if xmlpp is not in your current path
#for example: $XMLPP = "./xmlpp";
$XMLPP = "xmlpp";
use Getopt::Std;
getopts('tscupChHSi');
if ($opt_h || @ARGV != 2) {
usage();
}
my $diffOpts;
my $outputFmt = $opt_u + $opt_c + $opt_s + $opt_p + $opt_C;
if( $outputFmt == 0 ) {
$outputFmt = $opt_p = 1;
}
if( $outputFmt > 1 ) {
print STDERR "Error: Only one mode may be specified\n";
usage();
}
if( $opt_s ) {
# Standard diff, no playing around
} elsif( $opt_c ) {
# Plain context diff
$diffOpts .= "-c ";
} elsif( $opt_u ) {
# Plain unified diff
$diffOpts .= "-u ";
} elsif( $opt_p ) {
# Colorized unified diff
# $diffOpts .= "-u ";
$diffOpts .= "--new-line-format='[1m[33m+ %l\n[m' ";
$diffOpts .= "--old-line-format='[1m[31m- %l\n[m' ";
$diffOpts .= "--unchanged-line-format='[1m[30m %l[m\n' ";
} elsif( $opt_C ) {
$diffOpts .= "--changed-group-format='\n<<<<<<<<<<<<<<\n%<==============\n%>>>>>>>>>>>>>>>\n\n' ";
$diffOpts .= "--new-line-format='+ %l\n' ";
$diffOpts .= "--old-line-format='- %l\n' ";
$diffOpts .= "--unchanged-line-format=' %l\n' ";
} elsif( $opt_H ) {
$diffOpts .= "--changed-group-format='%<%>' ";
$diffOpts .= " --new-group-format='%>' ";
$diffOpts .= "--old-group-format='%<' ";
$diffOpts .= "--new-line-format='<font color=\"green\">+ %l</font>\n' ";
$diffOpts .= "--old-line-format='<font color=\"red\">- %l</font>\n' ";
$diffOpts .= "--unchanged-line-format='<font color=\"gray\"> %l</font>\n' ";
}
# Set up xmlpp options
my $prettyOpts = $opt_t ? "-t " : "";
$prettyOpts .= $opt_S ? "-S " : "";
$prettyOpts .= $opt_H ? "-H " : "";
$prettyOpts .= "-s -e ";
$file1 = "xmlppTEMP1.$$";
$file2 = "xmlppTEMP2.$$";
my $results = 0;
$results += system("$XMLPP $prettyOpts '$ARGV[0]' > $file1");
$results += system("$XMLPP $prettyOpts '$ARGV[1]' > $file2");
if($opt_H) {
print "<HTML>\n";
print " <HEAD>\n";
print " <TITLE>XML Diff</TITLE>\n";
print " </HEAD>\n";
print " <BODY bgcolor=\"#FEFEFF\">\n";
print " <PRE>";
$results += system("/usr/bin/diff -bB $diffOpts $file1 $file2");
# Do not add extra whitespace before the </PRE>
print "</PRE>\n";
print " </BODY>\n";
print "</HTML>\n";
} else {
$results += system("/usr/bin/diff -bB $diffOpts $file1 $file2");
}
unlink($file1,$file2);
exit( $results );
sub usage {
print STDERR <<EOF;
usage: $0 [ mode ] [ options ] oldfile.xml newfile.xml
mode must be one of:
-p coloured unified diff [default]
-c context diff
-u unified diff
-s standard diff output
-C vaguely CVS like unified diff
options:
-H HTML output
-t split attributes - good for spotting changes in attributes
-S schema hack mode - good for diffing schemas
-i ignore element and attribute contents
EOF
exit 1;
}
|