changeset 16117:58ec7181ad64

init.sh: make "compare /dev/null FILE" output more readable * tests/init.sh (compare_): Document the preferred order of arguments. (emit_diff_u_header_): New function. (compare_dev_null_): Emit a simulated diff, rather than just the contents of the unexpected file. Suggestion from Bruno Haible.
author Jim Meyering <meyering@redhat.com>
date Tue, 22 Nov 2011 14:51:45 +0100
parents f66a61056b41
children adc7476b18ed
files ChangeLog tests/init.sh
diffstat 2 files changed, 28 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2011-11-22  Jim Meyering  <meyering@redhat.com>
+
+	init.sh: make "compare /dev/null FILE" output more readable
+	* tests/init.sh (compare_): Document the preferred order of arguments.
+	(emit_diff_u_header_): New function.
+	(compare_dev_null_): Emit a simulated diff, rather than just the
+	contents of the unexpected file.  Suggestion from Bruno Haible.
+
 2011-11-21  Jim Meyering  <meyering@redhat.com>
 	    Eric Blake  <eblake@redhat.com>
 
--- a/tests/init.sh
+++ b/tests/init.sh
@@ -221,6 +221,15 @@
 # a partition, or to undo any other global state changes.
 cleanup_ () { :; }
 
+# Emit a header similar to that from diff -u;  Print the simulated "diff"
+# command so that the order of arguments is clear.  Don't bother with @@ lines.
+emit_diff_u_header_ ()
+{
+  printf '%s\n' "diff -u $*" \
+    "--- $1	1970-01-01" \
+    "+++ $2	1970-01-01"
+}
+
 # Arrange not to let diff or cmp operate on /dev/null,
 # since on some systems (at least OSF/1 5.1), that doesn't work.
 # When there are not two arguments, or no argument is /dev/null, return 2.
@@ -232,17 +241,18 @@
   test $# = 2 || return 2
 
   if test "x$1" = x/dev/null; then
-    set dummy "$2" "$1"; shift
+    test -s "$2" || return 0
+    { emit_diff_u_header_ "$@"; sed 's/^/+/' -- "$2"; } >&2
+    return 1
   fi
 
-  test "x$2" = x/dev/null || return 2
-
-  test -s "$1" || return 0
+  if test "x$2" = x/dev/null; then
+    test -s "$1" || return 0
+    { emit_diff_u_header_ "$@"; sed 's/^/-/' -- "$1"; } >&2
+    return 1
+  fi
 
-  cat - "$1" <<EOF >&2
-Unexpected contents of $1:
-EOF
-  return 1
+  return 2
 }
 
 if diff_out_=`( diff -u "$0" "$0" < /dev/null ) 2>/dev/null`; then
@@ -288,6 +298,8 @@
   compare_ () { cmp "$@"; }
 fi
 
+# Usage: compare EXPECTED ACTUAL
+#
 # Given compare_dev_null_'s preprocessing, defer to compare_ if 2 or more.
 # Otherwise, propagate $? to caller: any diffs have already been printed.
 compare ()