##// END OF EJS Templates
tests: make pdiff return appropriate exit code at comparison of files...
FUJIWARA Katsunori -
r33613:a2b55ee6 stable
parent child Browse files
Show More
@@ -1,58 +1,69 b''
1 1 #!/bin/sh
2 2
3 3 # Script to get stable diff output on any platform.
4 4 #
5 5 # Output of this script is almost equivalent to GNU diff with "-Nru".
6 6 #
7 7 # Use this script as "hg pdiff" via extdiff extension with preparation
8 8 # below in test scripts:
9 9 #
10 10 # $ cat >> $HGRCPATH <<EOF
11 11 # > [extdiff]
12 12 # > pdiff = sh "$RUNTESTDIR/pdiff"
13 13 # > EOF
14 14
15 15 filediff(){
16 16 # USAGE: filediff file1 file2 [header]
17 17
18 18 # compare with /dev/null if file doesn't exist (as "-N" option)
19 19 file1="$1"
20 20 if test ! -f "$file1"; then
21 21 file1=/dev/null
22 22 fi
23 23 file2="$2"
24 24 if test ! -f "$file2"; then
25 25 file2=/dev/null
26 26 fi
27 27
28 28 if cmp -s "$file1" "$file2" 2> /dev/null; then
29 29 # Return immediately, because comparison isn't needed. This
30 30 # also avoids redundant message of diff like "No differences
31 31 # encountered" (on Solaris)
32 32 return
33 33 fi
34 34
35 35 if test -n "$3"; then
36 36 # show header only in recursive case
37 37 echo "$3"
38 38 fi
39 39
40 40 # replace "/dev/null" by corresponded filename (as "-N" option)
41 41 diff -u "$file1" "$file2" |
42 42 sed "s@^--- /dev/null\(.*\)\$@--- $1\1@" |
43 43 sed "s@^\+\+\+ /dev/null\(.*\)\$@+++ $2\1@"
44
45 # in this case, files differ from each other
46 return 1
44 47 }
45 48
46 49 if test -d "$1" -o -d "$2"; then
47 50 # ensure comparison in dictionary order
48 51 (
49 52 if test -d "$1"; then (cd "$1" && find . -type f); fi
50 53 if test -d "$2"; then (cd "$2" && find . -type f); fi
51 54 ) |
52 55 sed 's@^\./@@g' | sort | uniq |
53 56 while read file; do
54 57 filediff "$1/$file" "$2/$file" "diff -Nru $1/$file $2/$file"
55 58 done
59
60 # TODO: there is no portable way for current while-read based
61 # implementation to return 1 at detecting changes.
62 #
63 # On bash and dash, assignment to variable inside while-block
64 # doesn't affect outside, because inside while-block is executed
65 # in sub-shell. BTW, it affects outside while-block on ksh (as sh
66 # on Solaris).
56 67 else
57 68 filediff "$1" "$2"
58 69 fi
General Comments 0
You need to be logged in to leave comments. Login now