bug-gnu-utils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

4 maint+test-related changes


From: Jim Meyering
Subject: 4 maint+test-related changes
Date: Thu, 31 Dec 2009 17:35:26 +0100

1: maint: don't let trailing spaces in diffs perturb make syntax-check
Get past a "make syntax-check" failure.

2: tests: use gnulib's init.sh

3: tests: exercise diff -p's function-name matching
This tests for currently-debatable behavior.

4: maint: newer gnulib; don't hard-code my GPG key ID

>From 37abff282fc5adb392653c7a11e56bb733a672e6 Mon Sep 17 00:00:00 2001
From: Jim Meyering <address@hidden>
Date: Sat, 28 Nov 2009 19:43:28 +0100
Subject: [PATCH 1/4] maint: don't let trailing spaces in diffs perturb make 
syntax-check

* .x-sc_space_tab: New file.
---
 .x-sc_space_tab |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 .x-sc_space_tab

diff --git a/.x-sc_space_tab b/.x-sc_space_tab
new file mode 100644
index 0000000..0c887f2
--- /dev/null
+++ b/.x-sc_space_tab
@@ -0,0 +1 @@
+^gl/lib/.*\.c\.diff$
--
1.6.6.325.g6f5f


>From e0fc06c5ce4e7c370ae2366b35c5952023c537fe Mon Sep 17 00:00:00 2001
From: Jim Meyering <address@hidden>
Date: Sat, 28 Nov 2009 19:31:46 +0100
Subject: [PATCH 2/4] tests: use gnulib's init.sh

* tests/Makefile.am (EXTRA_DIST): Add init.sh.
Remove test-lib.sh.
* tests/init.sh: New file.
* tests/test-lib.sh: Remove file.
* tests/help-version: Use init.sh, not test-lib.sh.
---
 tests/Makefile.am  |    2 +-
 tests/help-version |    3 +-
 tests/init.sh      |  255 ++++++++++++++++++++++++++++++++
 tests/test-lib.sh  |  408 ----------------------------------------------------
 4 files changed, 258 insertions(+), 410 deletions(-)
 create mode 100644 tests/init.sh
 delete mode 100644 tests/test-lib.sh

diff --git a/tests/Makefile.am b/tests/Makefile.am
index 8374fba..88774a1 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -2,7 +2,7 @@ TESTS = \
   help-version

 EXTRA_DIST = \
-  $(TESTS) test-lib.sh t-local.sh
+  $(TESTS) init.sh t-local.sh

 # Note that the first lines are statements.  They ensure that environment
 # variables that can perturb tests are unset or set to expected values.
diff --git a/tests/help-version b/tests/help-version
index 2ab0865..a4220eb 100755
--- a/tests/help-version
+++ b/tests/help-version
@@ -25,7 +25,8 @@ test "$VERBOSE" = yes && set -x
 test "x$SHELL" = x && SHELL=/bin/sh
 export SHELL

-. $srcdir/test-lib.sh
+: ${srcdir=.}
+. "$srcdir/init.sh"; path_prepend_ .

 expected_failure_status_chroot=125
 expected_failure_status_env=125
diff --git a/tests/init.sh b/tests/init.sh
new file mode 100644
index 0000000..cc02487
--- /dev/null
+++ b/tests/init.sh
@@ -0,0 +1,255 @@
+# source this file; set up for tests
+
+# Copyright (C) 2009 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Using this file in a test
+# =========================
+#
+# The typical skeleton of a test looks like this:
+#
+#   #!/bin/sh
+#   : ${srcdir=.}
+#   . "$srcdir/init.sh"; path_prepend_ .
+#   Execute some commands.
+#   Note that these commands are executed in a subdirectory, therefore you
+#   need to prepend "../" to relative filenames in the build directory.
+#   Set the exit code 0 for success, 77 for skipped, or 1 or other for failure.
+#   Use the skip_ and fail_ functions to print a diagnostic and then exit
+#   with the corresponding exit code.
+#   Exit $?
+
+# Executing a test that uses this file
+# ====================================
+#
+# Running a single test:
+#   $ make check TESTS=test-foo.sh
+#
+# Running a single test, with verbose output:
+#   $ make check TESTS=test-foo.sh VERBOSE=yes
+#
+# Running a single test, with single-stepping:
+#   1. Go into a sub-shell:
+#   $ bash
+#   2. Set relevant environment variables from TESTS_ENVIRONMENT in the
+#      Makefile:
+#   $ export srcdir=../../tests # this is an example
+#   3. Execute the commands from the test, copy&pasting them one by one:
+#   $ . "$srcdir/init.sh"; path_prepend_ .
+#   ...
+#   4. Finally
+#   $ exit
+
+# We use a trap below for cleanup.  This requires us to go through
+# hoops to get the right exit status transported through the handler.
+# So use `Exit STATUS' instead of `exit STATUS' inside of the tests.
+# Turn off errexit here so that we don't trip the bug with OSF1/Tru64
+# sh inside this function.
+Exit () { set +e; (exit $1); exit $1; }
+
+fail_() { echo "$ME_: failed test: $@" 1>&2; Exit 1; }
+skip_() { echo "$ME_: skipped test: $@" 1>&2; Exit 77; }
+
+# This is a stub function that is run upon trap (upon regular exit and
+# interrupt).  Override it with a per-test function, e.g., to unmount
+# a partition, or to undo any other global state changes.
+cleanup_() { :; }
+
+if ( diff --version < /dev/null 2>&1 | grep GNU ) 2>&1 > /dev/null; then
+  compare() { diff -u "$@"; }
+elif ( cmp --version < /dev/null 2>&1 | grep GNU ) 2>&1 > /dev/null; then
+  compare() { cmp -s "$@"; }
+else
+  compare() { cmp "$@"; }
+fi
+
+# An arbitrary prefix to help distinguish test directories.
+testdir_prefix_() { printf gt; }
+
+# Run the user-overridable cleanup_ function, remove the temporary
+# directory and exit with the incoming value of $?.
+remove_tmp_()
+{
+  __st=$?
+  cleanup_
+  # cd out of the directory we're about to remove
+  cd "$initial_cwd_" || cd / || cd /tmp
+  chmod -R u+rwx "$test_dir_"
+  # If removal fails and exit status was to be 0, then change it to 1.
+  rm -rf "$test_dir_" || { test $__st = 0 && __st=1; }
+  exit $__st
+}
+
+# Use this function to prepend to PATH an absolute name for each
+# specified, possibly-$initial_cwd_relative, directory.
+path_prepend_()
+{
+  while test $# != 0; do
+    path_dir_=$1
+    case $path_dir_ in
+      '') fail_ "invalid path dir: '$1'";;
+      /*) abs_path_dir_=$path_dir_;;
+      *) abs_path_dir_=`cd "$initial_cwd_/$path_dir_" && echo "$PWD"` \
+           || fail_ "invalid path dir: $path_dir_";;
+    esac
+    case $abs_path_dir_ in
+      *:*) fail_ "invalid path dir: '$abs_path_dir_'";;
+    esac
+    PATH="$abs_path_dir_:$PATH"
+    shift
+  done
+  export PATH
+}
+
+setup_()
+{
+  test "$VERBOSE" = yes && set -x
+
+  initial_cwd_=$PWD
+  ME_=`expr "./$0" : '.*/\(.*\)$'`
+
+  pfx_=`testdir_prefix_`
+  test_dir_=`mktempd_ "$initial_cwd_" "$pfx_-$ME_.XXXX"` \
+    || fail_ "failed to create temporary directory in $initial_cwd_"
+  cd "$test_dir_"
+
+  # This pair of trap statements ensures that the temporary directory,
+  # $test_dir_, is removed upon exit as well as upon catchable signal.
+  trap remove_tmp_ 0
+  trap 'Exit $?' 1 2 13 15
+}
+
+# Create a temporary directory, much like mktemp -d does.
+# Written by Jim Meyering.
+#
+# Usage: mktempd_ /tmp phoey.XXXXXXXXXX
+#
+# First, try to use the mktemp program.
+# Failing that, we'll roll our own mktemp-like function:
+#  - try to get random bytes from /dev/urandom
+#  - failing that, generate output from a combination of quickly-varying
+#      sources and gzip.  Ignore non-varying gzip header, and extract
+#      "random" bits from there.
+#  - given those bits, map to file-name bytes using tr, and try to create
+#      the desired directory.
+#  - make only $MAX_TRIES_ attempts
+
+# Helper function.  Print $N pseudo-random bytes from a-zA-Z0-9.
+rand_bytes_()
+{
+  n_=$1
+
+  # Maybe try openssl rand -base64 $n_prime_|tr '+/=\012' abcd first?
+  # But if they have openssl, they probably have mktemp, too.
+
+  chars_=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
+  dev_rand_=/dev/urandom
+  if test -r "$dev_rand_"; then
+    # Note: 256-length($chars_) == 194; 3 copies of $chars_ is 186 + 8 = 194.
+    dd ibs=$n_ count=1 if=$dev_rand_ 2>/dev/null \
+      | tr -c $chars_ 01234567$chars_$chars_$chars_
+    return
+  fi
+
+  n_plus_50_=`expr $n_ + 50`
+  cmds_='date; date +%N; free; who -a; w; ps auxww; ps ef; netstat -n'
+  data_=` (eval "$cmds_") 2>&1 | gzip `
+
+  # Ensure that $data_ has length at least 50+$n_
+  while :; do
+    len_=`echo "$data_"|wc -c`
+    test $n_plus_50_ -le $len_ && break;
+    data_=` (echo "$data_"; eval "$cmds_") 2>&1 | gzip `
+  done
+
+  echo "$data_" \
+    | dd bs=1 skip=50 count=$n_ 2>/dev/null \
+    | tr -c $chars_ 01234567$chars_$chars_$chars_
+}
+
+mktempd_()
+{
+  case $# in
+  2);;
+  *) fail_ "Usage: $ME DIR TEMPLATE";;
+  esac
+
+  destdir_=$1
+  template_=$2
+
+  MAX_TRIES_=4
+
+  # Disallow any trailing slash on specified destdir:
+  # it would subvert the post-mktemp "case"-based destdir test.
+  case $destdir_ in
+  /) ;;
+  */) fail_ "invalid destination dir: remove trailing slash(es)";;
+  esac
+
+  case $template_ in
+  *XXXX) ;;
+  *) fail_ "invalid template: $template_ (must have a suffix of at least 4 
X's)";;
+  esac
+
+  fail=0
+
+  # First, try to use mktemp.
+  d=`env -u TMPDIR mktemp -d -t -p "$destdir_" "$template_" 2>/dev/null` \
+    || fail=1
+
+  # The resulting name must be in the specified directory.
+  case $d in "$destdir_"*);; *) fail=1;; esac
+
+  # It must have created the directory.
+  test -d "$d" || fail=1
+
+  # It must have 0700 permissions.  Handle sticky "S" bits.
+  perms=`ls -dgo "$d" 2>/dev/null|tr S -` || fail=1
+  case $perms in drwx------*) ;; *) fail=1;; esac
+
+  test $fail = 0 && {
+    echo "$d"
+    return
+  }
+
+  # If we reach this point, we'll have to create a directory manually.
+
+  # Get a copy of the template without its suffix of X's.
+  base_template_=`echo "$template_"|sed 's/XX*$//'`
+
+  # Calculate how many X's we've just removed.
+  template_length_=`echo "$template_" | wc -c`
+  nx_=`echo "$base_template_" | wc -c`
+  nx_=`expr $template_length_ - $nx_`
+
+  err_=
+  i_=1
+  while :; do
+    X_=`rand_bytes_ $nx_`
+    candidate_dir_="$destdir_/$base_template_$X_"
+    err_=`mkdir -m 0700 "$candidate_dir_" 2>&1` \
+      && { echo "$candidate_dir_"; return; }
+    test $MAX_TRIES_ -le $i_ && break;
+    i_=`expr $i_ + 1`
+  done
+  fail_ "$err_"
+}
+
+# If you want to override the testdir_prefix_ function,
+# or to add more utility functions, use this file.
+test -f "$srcdir/init.cfg" \
+  && . "$srcdir/init.cfg"
+
+setup_ "$@"
diff --git a/tests/test-lib.sh b/tests/test-lib.sh
deleted file mode 100644
index b39d06c..0000000
--- a/tests/test-lib.sh
+++ /dev/null
@@ -1,408 +0,0 @@
-# source this file; set up for tests
-
-# Copyright (C) 2009 Free Software Foundation, Inc.
-
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# Skip this test if the shell lacks support for functions.
-unset function_test
-eval 'function_test() { return 11; }; function_test'
-if test $? != 11; then
-  echo "$0: /bin/sh lacks support for functions; skipping this test." 1>&2
-  Exit 77
-fi
-
-skip_test_()
-{
-  echo "$0: skipping test: $@" | head -1 1>&9
-  echo "$0: skipping test: $@" 1>&2
-  Exit 77
-}
-
-getlimits_()
-{
-    eval $(getlimits)
-    test "$INT_MAX" ||
-    error_ "Error running getlimits"
-}
-
-require_acl_()
-{
-  getfacl --version < /dev/null > /dev/null 2>&1 \
-    && setfacl --version < /dev/null > /dev/null 2>&1 \
-      || skip_test_ "This test requires getfacl and setfacl."
-
-  id -u bin > /dev/null 2>&1 \
-    || skip_test_ "This test requires a local user named bin."
-}
-
-# Skip this test if we're not in SELinux "enforcing" mode.
-require_selinux_enforcing_()
-{
-  test "$(getenforce)" = Enforcing \
-    || skip_test_ "This test is useful only with SELinux in Enforcing mode."
-}
-
-
-require_openat_support_()
-{
-  # Skip this test if your system has neither the openat-style functions
-  # nor /proc/self/fd support with which to emulate them.
-  test -z "$CONFIG_HEADER" \
-    && skip_test_ 'internal error: CONFIG_HEADER not defined'
-
-  _skip=yes
-  grep '^#define HAVE_OPENAT' "$CONFIG_HEADER" > /dev/null && _skip=no
-  test -d /proc/self/fd && _skip=no
-  if test $_skip = yes; then
-    skip_test_ 'this system lacks openat support'
-  fi
-}
-
-require_ulimit_()
-{
-  ulimit_works=yes
-  # Expect to be able to exec a program in 10MB of virtual memory,
-  # but not in 20KB.  I chose "date".  It must not be a shell built-in
-  # function, so you can't use echo, printf, true, etc.
-  # Of course, in coreutils, I could use $top_builddir/src/true,
-  # but this should be able to work for other projects, too.
-  ( ulimit -v 10000; date ) > /dev/null 2>&1 || ulimit_works=no
-  ( ulimit -v 20;    date ) > /dev/null 2>&1 && ulimit_works=no
-
-  test $ulimit_works = no \
-    && skip_test_ "this shell lacks ulimit support"
-}
-
-require_readable_root_()
-{
-  test -r / || skip_test_ "/ is not readable"
-}
-
-# Skip the current test if strace is not available or doesn't work
-# with the named syscall.  Usage: require_strace_ unlink
-require_strace_()
-{
-  test $# = 1 || framework_failure
-
-  strace -V < /dev/null > /dev/null 2>&1 ||
-    skip_test_ 'no strace program'
-
-  strace -qe "$1" echo > /dev/null 2>&1 ||
-    skip_test_ 'strace -qe "'"$1"'" does not work'
-}
-
-# Require a controlling input `terminal'.
-require_controlling_input_terminal_()
-{
-  tty -s || have_input_tty=no
-  test -t 0 || have_input_tty=no
-  if test "$have_input_tty" = no; then
-    skip_test_ 'requires controlling input terminal
-This test must have a controlling input "terminal", so it may not be
-run via "batch", "at", or "ssh".  On some systems, it may not even be
-run in the background.'
-  fi
-}
-
-require_built_()
-{
-  skip_=no
-  for i in "$@"; do
-    case " $built_programs " in
-      *" $i "*) ;;
-      *) echo "$i: not built" 1>&2; skip_=yes ;;
-    esac
-  done
-
-  test $skip_ = yes && skip_test_ "required program(s) not built"
-}
-
-uid_is_privileged_()
-{
-  # Make sure id -u succeeds.
-  my_uid=$(id -u) \
-    || { echo "$0: cannot run \`id -u'" 1>&2; return 1; }
-
-  # Make sure it gives valid output.
-  case $my_uid in
-    0) ;;
-    *[!0-9]*)
-      echo "$0: invalid output (\`$my_uid') from \`id -u'" 1>&2
-      return 1 ;;
-    *) return 1 ;;
-  esac
-}
-
-get_process_status_()
-{
-  sed -n '/^State:[     ]*\([[:alpha:]]\).*/s//\1/p' /proc/$1/status
-}
-
-# Convert an ls-style permission string, like drwxr----x and -rw-r-x-wx
-# to the equivalent chmod --mode (-m) argument, (=,u=rwx,g=r,o=x and
-# =,u=rw,g=rx,o=wx).  Ignore ACLs.
-rwx_to_mode_()
-{
-  case $# in
-    1) rwx=$1;;
-    *) echo "$0: wrong number of arguments" 1>&2
-      echo "Usage: $0 ls-style-mode-string" 1>&2
-      return;;
-  esac
-
-  case $rwx in
-    [ld-][rwx-][rwx-][rwxsS-][rwx-][rwx-][rwxsS-][rwx-][rwx-][rwxtT-]) ;;
-    [ld-][rwx-][rwx-][rwxsS-][rwx-][rwx-][rwxsS-][rwx-][rwx-][rwxtT-][+.]) ;;
-    *) echo "$0: invalid mode string: $rwx" 1>&2; return;;
-  esac
-
-  # Perform these conversions:
-  # S  s
-  # s  xs
-  # T  t
-  # t  xt
-  # The `T' and `t' ones are only valid for `other'.
-  s='s/S/@/;s/s/x@/;s/@/s/'
-  t='s/T/@/;s/t/x@/;s/@/t/'
-
-  u=`echo $rwx|sed 's/^.\(...\).*/,u=\1/;s/-//g;s/^,u=$//;'$s`
-  g=`echo $rwx|sed 's/^....\(...\).*/,g=\1/;s/-//g;s/^,g=$//;'$s`
-  o=`echo $rwx|sed 's/^.......\(...\).*/,o=\1/;s/-//g;s/^,o=$//;'$s';'$t`
-  echo "=$u$g$o"
-}
-
-skip_if_()
-{
-  case $1 in
-    root) skip_test_ must be run as root ;;
-    non-root) skip_test_ must be run as non-root ;;
-    *) ;;  # FIXME?
-  esac
-}
-
-require_selinux_()
-{
-  case `ls -Zd .` in
-    '? .'|'unlabeled .')
-      skip_test_ "this system (or maybe just" \
-        "the current file system) lacks SELinux support"
-    ;;
-  esac
-}
-
-very_expensive_()
-{
-  if test "$RUN_VERY_EXPENSIVE_TESTS" != yes; then
-    skip_test_ 'very expensive: disabled by default
-This test is very expensive, so it is disabled by default.
-To run it anyway, rerun make check with the RUN_VERY_EXPENSIVE_TESTS
-environment variable set to yes.  E.g.,
-
-  env RUN_VERY_EXPENSIVE_TESTS=yes make check
-'
-  fi
-}
-
-expensive_()
-{
-  if test "$RUN_EXPENSIVE_TESTS" != yes; then
-    skip_test_ 'expensive: disabled by default
-This test is relatively expensive, so it is disabled by default.
-To run it anyway, rerun make check with the RUN_EXPENSIVE_TESTS
-environment variable set to yes.  E.g.,
-
-  env RUN_EXPENSIVE_TESTS=yes make check
-'
-  fi
-}
-
-require_root_()
-{
-  uid_is_privileged_ || skip_test_ "must be run as root"
-  NON_ROOT_USERNAME=${NON_ROOT_USERNAME=nobody}
-  NON_ROOT_GROUP=${NON_ROOT_GROUP=$(id -g $NON_ROOT_USERNAME)}
-}
-
-skip_if_root_() { uid_is_privileged_ && skip_test_ "must be run as non-root"; }
-error_() { echo "$0: $@" 1>&2; Exit 1; }
-framework_failure() { error_ 'failure in testing framework'; }
-
-# Set `groups' to a space-separated list of at least two groups
-# of which the user is a member.
-require_membership_in_two_groups_()
-{
-  test $# = 0 || framework_failure
-
-  groups=${COREUTILS_GROUPS-`(id -G || /usr/xpg4/bin/id -G) 2>/dev/null`}
-  case "$groups" in
-    *' '*) ;;
-    *) skip_test_ 'requires membership in two groups
-this test requires that you be a member of more than one group,
-but running `id -G'\'' either failed or found just one.  If you really
-are a member of at least two groups, then rerun this test with
-COREUTILS_GROUPS set in your environment to the space-separated list
-of group names or numbers.  E.g.,
-
-  env COREUTILS_GROUPS='users cdrom' make check
-
-'
-     ;;
-  esac
-}
-
-# Is /proc/$PID/status supported?
-require_proc_pid_status_()
-{
-    sleep 2 &
-    local pid=$!
-    sleep .5
-    grep '^State:[      ]*[S]' /proc/$pid/status > /dev/null 2>&1 ||
-    skip_test_ "/proc/$pid/status: missing or 'different'"
-    kill $pid
-}
-
-# Does the current (working-dir) file system support sparse files?
-require_sparse_support_()
-{
-  test $# = 0 || framework_failure
-  # Test whether we can create a sparse file.
-  # For example, on Darwin6.5 with a file system of type hfs, it's not 
possible.
-  # NTFS requires 128K before a hole appears in a sparse file.
-  t=sparse.$$
-  dd bs=1 seek=128K of=$t < /dev/null 2> /dev/null
-  set x `du -sk $t`
-  kb_size=$2
-  rm -f $t
-  if test $kb_size -ge 128; then
-    skip_test_ 'this file system does not support sparse files'
-  fi
-}
-
-mkfifo_or_skip_()
-{
-  test $# = 1 || framework_failure
-  if ! mkfifo "$1"; then
-    # Make an exception of this case -- usually we interpret framework-creation
-    # failure as a test failure.  However, in this case, when running on a 
SunOS
-    # system using a disk NFS mounted from OpenBSD, the above fails like this:
-    # mkfifo: cannot make fifo `fifo-10558': Not owner
-    skip_test_ 'NOTICE: unable to create test prerequisites'
-  fi
-}
-
-# Disable the current test if the working directory seems to have
-# the setgid bit set.
-skip_if_setgid_()
-{
-  setgid_tmpdir=setgid-$$
-  (umask 77; mkdir $setgid_tmpdir)
-  perms=$(stat --printf %A $setgid_tmpdir)
-  rmdir $setgid_tmpdir
-  case $perms in
-    drwx------);;
-    drwxr-xr-x);;  # Windows98 + DJGPP 2.03
-    *) skip_test_ 'this directory has the setgid bit set';;
-  esac
-}
-
-skip_if_mcstransd_is_running_()
-{
-  test $# = 0 || framework_failure
-
-  # When mcstransd is running, you'll see only the 3-component
-  # version of file-system context strings.  Detect that,
-  # and if it's running, skip this test.
-  __ctx=$(stat --printf='%C\n' .) || framework_failure
-  case $__ctx in
-    *:*:*:*) ;; # four components is ok
-    *) # anything else probably means mcstransd is running
-        skip_test_ "unexpected context '$__ctx'; turn off mcstransd" ;;
-  esac
-}
-
-# Skip the current test if umask doesn't work as usual.
-# This test should be run in the temporary directory that ends
-# up being removed via the trap commands.
-working_umask_or_skip_()
-{
-  umask 022
-  touch file1 file2
-  chmod 644 file2
-  perms=`ls -l file1 file2 | sed 's/ .*//' | uniq`
-  rm -f file1 file2
-
-  case $perms in
-  *'
-  '*) skip_test_ 'your build directory has unusual umask semantics'
-  esac
-}
-
-# We use a trap below for cleanup.  This requires us to go through
-# hoops to get the right exit status transported through the signal.
-# So use `Exit STATUS' instead of `exit STATUS' inside of the tests.
-# Turn off errexit here so that we don't trip the bug with OSF1/Tru64
-# sh inside this function.
-Exit ()
-{
-  set +e
-  (exit $1)
-  exit $1
-}
-
-test_dir_=$(pwd)
-
-this_test_() { echo "./$0" | sed 's,.*/,,'; }
-this_test=$(this_test_)
-
-# This is a stub function that is run upon trap (upon regular exit and
-# interrupt).  Override it with a per-test function, e.g., to unmount
-# a partition, or to undo any other global state changes.
-cleanup_() { :; }
-
-t_=$(mktemp -d --tmp="$test_dir_" di-$this_test.XXXXXXXXXX)\
-    || error_ "failed to create temporary directory in $test_dir_"
-
-# Eval the following upon cleanup.
-# This is useful if you have more than than one cleanup function,
-# and for encapsulated cleanup functions; append any addition.
-cleanup_eval_=':'
-
-remove_tmp_()
-{
-  __st=$?
-  cleanup_
-  test -n "$cleanup_eval_" && eval "$cleanup_eval_"
-  cd "$test_dir_" && chmod -R u+rwx "$t_" && rm -rf "$t_" && exit $__st
-}
-
-. $srcdir/t-local.sh
-
-# Run each test from within a temporary sub-directory named after the
-# test itself, and arrange to remove it upon exception or normal exit.
-trap remove_tmp_ 0
-trap 'Exit $?' 1 2 13 15
-
-cd "$t_" || error_ "failed to cd to $t_"
-
-if ( diff --version < /dev/null 2>&1 | grep GNU ) 2>&1 > /dev/null; then
-  compare() { diff -u "$@"; }
-elif ( cmp --version < /dev/null 2>&1 | grep GNU ) 2>&1 > /dev/null; then
-  compare() { cmp -s "$@"; }
-else
-  compare() { cmp "$@"; }
-fi
-
-# Initialize; all bourne shell scripts end with "Exit $fail".
-fail=0
--
1.6.6.325.g6f5f


>From 9fe26edf840736d3c4d6c89005b3a0c860444d4c Mon Sep 17 00:00:00 2001
From: Jim Meyering <address@hidden>
Date: Sat, 28 Nov 2009 19:36:01 +0100
Subject: [PATCH 3/4] tests: exercise diff -p's function-name matching

* tests/label-vs-func: New file.
* tests/Makefile.am (TESTS): Add label-vs-func.
Reported by Simon Arlott <address@hidden>
http://article.gmane.org/gmane.linux.kernel.janitors/14260
---
 tests/Makefile.am   |    3 ++-
 tests/label-vs-func |   31 +++++++++++++++++++++++++++++++
 2 files changed, 33 insertions(+), 1 deletions(-)
 create mode 100755 tests/label-vs-func

diff --git a/tests/Makefile.am b/tests/Makefile.am
index 88774a1..5104fe6 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,5 +1,6 @@
 TESTS = \
-  help-version
+  help-version \
+  label-vs-func

 EXTRA_DIST = \
   $(TESTS) init.sh t-local.sh
diff --git a/tests/label-vs-func b/tests/label-vs-func
new file mode 100755
index 0000000..77b11f2
--- /dev/null
+++ b/tests/label-vs-func
@@ -0,0 +1,31 @@
+#!/bin/sh
+# Show how diff's -p option can mistakenly match a label: in column 1.
+: ${srcdir=.}
+. "$srcdir/init.sh"; path_prepend_ .
+
+fail=0
+cat <<EOF > exp || fail=1
+@@ -4 +4 @@ label:
+-1;
++2;
+EOF
+
+cat <<EOF > a || fail=1
+func ()
+{
+label:
+1;
+}
+EOF
+
+sed s/1/2/ a > b || fail=1
+diff -p -u0 a b > out 2> err; test $? = 1 || fail=1
+
+tail -3 out > k && mv k out || fail=1
+
+compare out exp || fail=1
+
+# expect empty stderr
+compare err /dev/null || fail=1
+
+Exit $fail
--
1.6.6.325.g6f5f


>From 10d11122eaa135104737d462015d48041c304f1d Mon Sep 17 00:00:00 2001
From: Jim Meyering <address@hidden>
Date: Thu, 31 Dec 2009 17:20:42 +0100
Subject: [PATCH 4/4] maint: newer gnulib; don't hard-code my GPG key ID

* cfg.mk (gpg_key_ID): Remove definition, now that maint.mk automates it.
* gnulib: Update to latest.
---
 cfg.mk |    3 ---
 gnulib |    2 +-
 2 files changed, 1 insertions(+), 4 deletions(-)

diff --git a/cfg.mk b/cfg.mk
index ab50ba4..b317e9c 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -17,9 +17,6 @@
 # Used in maint.mk's web-manual rule
 manual_title = Comparing and Merging Files

-# The GnuPG ID of the key used to sign the tarballs.
-gpg_key_ID = B9AB9A16
-
 # Tests not to run as part of "make distcheck".
 local-checks-to-skip =         \
   sc_error_message_period      \
diff --git a/gnulib b/gnulib
index 1398c0d..d91a0d2 160000
--- a/gnulib
+++ b/gnulib
@@ -1 +1 @@
-Subproject commit 1398c0de968352891dfaaf26d4f8bf6676e5b060
+Subproject commit d91a0d2dc678afe8a2c696077f0640e6874f52bc
--
1.6.6.325.g6f5f




reply via email to

[Prev in Thread] Current Thread [Next in Thread]