comparison tests/pdiff @ 28052:b59ef0c21405

tests: use portable diff script via extdiff extension Before this patch, some tests using external "diff" command via extdiff extension fail on Solaris, because of incompatibility of "diff" command and its output. For example, system standard "diff" (= /usr/bin/diff) on Solaris differs from GNU diff in points below: - "-N" (treat absent files as empty) option isn't supported - files are examined not in dictionary order (maybe, in order in storage) This patch introduces portable diff script "pdiff" and make tests use it via extdiff extension. For portability of tests, this patch invokes "pdiff" script with explicit "sh", because standard shell of runtime platform ("cmd.exe" on Windows) is used at first to invoke external diff command.
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Mon, 08 Feb 2016 18:29:17 +0900
parents
children 869e65e68aee
comparison
equal deleted inserted replaced
28051:413201fbbc82 28052:b59ef0c21405
1 #!/bin/sh
2
3 # Script to get stable diff output on any platform.
4 #
5 # Output of this script is almost equivalent to GNU diff with "-Nru".
6 #
7 # Use this script as "hg pdiff" via extdiff extension with preparation
8 # below in test scripts:
9 #
10 # $ cat >> $HGRCPATH <<EOF
11 # > [extdiff]
12 # > pdiff = sh "$RUNTESTDIR/pdiff"
13 # > EOF
14
15 filediff(){
16 # USAGE: filediff file1 file2 [header]
17
18 # compare with /dev/null if file doesn't exist (as "-N" option)
19 file1="$1"
20 if test ! -f "$file1"; then
21 file1=/dev/null
22 fi
23 file2="$2"
24 if test ! -f "$file2"; then
25 file2=/dev/null
26 fi
27
28 if cmp -s "$file1" "$file2"; then
29 # Return immediately, because comparison isn't needed. This
30 # also avoids redundant message of diff like "No differences
31 # encountered" (on Solaris)
32 return
33 fi
34
35 if test -n "$3"; then
36 # show header only in recursive case
37 echo "$3"
38 fi
39
40 # replace "/dev/null" by corresponded filename (as "-N" option)
41 diff -u "$file1" "$file2" |
42 sed "s@^--- /dev/null\(.*\)\$@--- $1\1@" |
43 sed "s@^\+\+\+ /dev/null\(.*\)\$@+++ $2\1@"
44 }
45
46 if test -d "$1" -o -d "$2"; then
47 # ensure comparison in dictionary order
48 (
49 if test -d "$1"; then (cd "$1" && find . -type f); fi
50 if test -d "$2"; then (cd "$2" && find . -type f); fi
51 ) |
52 sed 's@^\./@@g' | sort | uniq |
53 while read file; do
54 filediff "$1/$file" "$2/$file" "diff -Nru $1/$file $2/$file"
55 done
56 else
57 filediff "$1" "$2"
58 fi