init.sh: make "compare /dev/null FILE" output more readable
authorJim Meyering <meyering@redhat.com>
Tue, 22 Nov 2011 13:51:45 +0000 (14:51 +0100)
committerJim Meyering <meyering@redhat.com>
Tue, 22 Nov 2011 19:24:22 +0000 (20:24 +0100)
* 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.

ChangeLog
tests/init.sh

index 0fbcf89..b9e5d59 100644 (file)
--- 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>
 
index 5079010..e2f6119 100644 (file)
@@ -221,6 +221,15 @@ export MALLOC_PERTURB_
 # 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 @@ compare_dev_null_ ()
   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 @@ else
   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 ()