mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 23:38:50 +03:00
469ca8bae6
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.
59 lines
1.5 KiB
Bash
Executable File
59 lines
1.5 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Script to get stable diff output on any platform.
|
|
#
|
|
# Output of this script is almost equivalent to GNU diff with "-Nru".
|
|
#
|
|
# Use this script as "hg pdiff" via extdiff extension with preparation
|
|
# below in test scripts:
|
|
#
|
|
# $ cat >> $HGRCPATH <<EOF
|
|
# > [extdiff]
|
|
# > pdiff = sh "$RUNTESTDIR/pdiff"
|
|
# > EOF
|
|
|
|
filediff(){
|
|
# USAGE: filediff file1 file2 [header]
|
|
|
|
# compare with /dev/null if file doesn't exist (as "-N" option)
|
|
file1="$1"
|
|
if test ! -f "$file1"; then
|
|
file1=/dev/null
|
|
fi
|
|
file2="$2"
|
|
if test ! -f "$file2"; then
|
|
file2=/dev/null
|
|
fi
|
|
|
|
if cmp -s "$file1" "$file2"; then
|
|
# Return immediately, because comparison isn't needed. This
|
|
# also avoids redundant message of diff like "No differences
|
|
# encountered" (on Solaris)
|
|
return
|
|
fi
|
|
|
|
if test -n "$3"; then
|
|
# show header only in recursive case
|
|
echo "$3"
|
|
fi
|
|
|
|
# replace "/dev/null" by corresponded filename (as "-N" option)
|
|
diff -u "$file1" "$file2" |
|
|
sed "s@^--- /dev/null\(.*\)\$@--- $1\1@" |
|
|
sed "s@^\+\+\+ /dev/null\(.*\)\$@+++ $2\1@"
|
|
}
|
|
|
|
if test -d "$1" -o -d "$2"; then
|
|
# ensure comparison in dictionary order
|
|
(
|
|
if test -d "$1"; then (cd "$1" && find . -type f); fi
|
|
if test -d "$2"; then (cd "$2" && find . -type f); fi
|
|
) |
|
|
sed 's@^\./@@g' | sort | uniq |
|
|
while read file; do
|
|
filediff "$1/$file" "$2/$file" "diff -Nru $1/$file $2/$file"
|
|
done
|
|
else
|
|
filediff "$1" "$2"
|
|
fi
|