##// 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 #!/bin/sh
1 #!/bin/sh
2
2
3 # Script to get stable diff output on any platform.
3 # Script to get stable diff output on any platform.
4 #
4 #
5 # Output of this script is almost equivalent to GNU diff with "-Nru".
5 # Output of this script is almost equivalent to GNU diff with "-Nru".
6 #
6 #
7 # Use this script as "hg pdiff" via extdiff extension with preparation
7 # Use this script as "hg pdiff" via extdiff extension with preparation
8 # below in test scripts:
8 # below in test scripts:
9 #
9 #
10 # $ cat >> $HGRCPATH <<EOF
10 # $ cat >> $HGRCPATH <<EOF
11 # > [extdiff]
11 # > [extdiff]
12 # > pdiff = sh "$RUNTESTDIR/pdiff"
12 # > pdiff = sh "$RUNTESTDIR/pdiff"
13 # > EOF
13 # > EOF
14
14
15 filediff(){
15 filediff(){
16 # USAGE: filediff file1 file2 [header]
16 # USAGE: filediff file1 file2 [header]
17
17
18 # compare with /dev/null if file doesn't exist (as "-N" option)
18 # compare with /dev/null if file doesn't exist (as "-N" option)
19 file1="$1"
19 file1="$1"
20 if test ! -f "$file1"; then
20 if test ! -f "$file1"; then
21 file1=/dev/null
21 file1=/dev/null
22 fi
22 fi
23 file2="$2"
23 file2="$2"
24 if test ! -f "$file2"; then
24 if test ! -f "$file2"; then
25 file2=/dev/null
25 file2=/dev/null
26 fi
26 fi
27
27
28 if cmp -s "$file1" "$file2" 2> /dev/null; then
28 if cmp -s "$file1" "$file2" 2> /dev/null; then
29 # Return immediately, because comparison isn't needed. This
29 # Return immediately, because comparison isn't needed. This
30 # also avoids redundant message of diff like "No differences
30 # also avoids redundant message of diff like "No differences
31 # encountered" (on Solaris)
31 # encountered" (on Solaris)
32 return
32 return
33 fi
33 fi
34
34
35 if test -n "$3"; then
35 if test -n "$3"; then
36 # show header only in recursive case
36 # show header only in recursive case
37 echo "$3"
37 echo "$3"
38 fi
38 fi
39
39
40 # replace "/dev/null" by corresponded filename (as "-N" option)
40 # replace "/dev/null" by corresponded filename (as "-N" option)
41 diff -u "$file1" "$file2" |
41 diff -u "$file1" "$file2" |
42 sed "s@^--- /dev/null\(.*\)\$@--- $1\1@" |
42 sed "s@^--- /dev/null\(.*\)\$@--- $1\1@" |
43 sed "s@^\+\+\+ /dev/null\(.*\)\$@+++ $2\1@"
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 if test -d "$1" -o -d "$2"; then
49 if test -d "$1" -o -d "$2"; then
47 # ensure comparison in dictionary order
50 # ensure comparison in dictionary order
48 (
51 (
49 if test -d "$1"; then (cd "$1" && find . -type f); fi
52 if test -d "$1"; then (cd "$1" && find . -type f); fi
50 if test -d "$2"; then (cd "$2" && find . -type f); fi
53 if test -d "$2"; then (cd "$2" && find . -type f); fi
51 ) |
54 ) |
52 sed 's@^\./@@g' | sort | uniq |
55 sed 's@^\./@@g' | sort | uniq |
53 while read file; do
56 while read file; do
54 filediff "$1/$file" "$2/$file" "diff -Nru $1/$file $2/$file"
57 filediff "$1/$file" "$2/$file" "diff -Nru $1/$file $2/$file"
55 done
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 else
67 else
57 filediff "$1" "$2"
68 filediff "$1" "$2"
58 fi
69 fi
General Comments 0
You need to be logged in to leave comments. Login now