view tests/pdiff @ 32516:37d70ba1d9d1

bundle: add an experimental knob to include obsmarkers in bundle The "hg bundle" command is a good place to test if the inclusion of obsmarkers within a bundle is working well (part exists, content is correct etc). So we add a way to have them included. Ideally, this would be controlled by a change around bundlespec (bundlespec "v3" + arguments). However, my main goal is to have obsmarkers included in bundle created by the 'hg strip' command, not the 'hg bundle' so for now I'm avoiding the detour through bundlespec rework territory. Better debug output for obsmarkers in 'debugbundle' will be added in later changesets. The 'test-obsolete-bundle-strip.t' test will also get updated in a later changeset to keep the current changeset smaller.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Sun, 28 May 2017 11:50:43 -0700
parents 869e65e68aee
children a2b55ee62803
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" 2> /dev/null; 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