view tests/pdiff @ 28238:b57d45ec33b2

test: update test-bundle2-format.t comment Now that bundle2 is used by default for all exchanges, this comment is obviously out of date. Having deep testing of the API and expected behavior of the format and its processing is still valuable, so the comment is updated.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Thu, 25 Feb 2016 10:34:31 +0100
parents b59ef0c21405
children 869e65e68aee
line wrap: on
line source

#!/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