Thanks for the quick fix Jim! I verified the bug is now fixed in the git repository.
-Tim On Sun, Apr 24, 2011 at 2:22 PM, Jim Meyering <j...@meyering.net> wrote: > Thanks again. > Here's the fix I expect to use: > > From 79a476abb35a69f409e2848019c8ebc24cc687cf Mon Sep 17 00:00:00 2001 > From: Jim Meyering <meyer...@redhat.com> > Date: Sun, 24 Apr 2011 23:20:01 +0200 > Subject: [PATCH] tail --follow=name no longer implies --retry > > * src/tail.c (tail_forever_inotify): Just as without inotify, > tail --follow=name now terminates when the last tailed-by-name file > is unlinked or moved aside. This bug was introduced on 2009-06-15 > via commit ae494d4b, "tail: use inotify if it is available". > Reported by Tim Underwood in > http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/22286 > * NEWS (Bug fixes): Mention this. > * tests/tail-2/follow-name: Test for this. > * tests/Makefile.am (TESTS): Add it. > --- > NEWS | 5 +++++ > THANKS.in | 1 + > src/tail.c | 10 ++++++++++ > tests/Makefile.am | 1 + > tests/tail-2/follow-name | 32 ++++++++++++++++++++++++++++++++ > 5 files changed, 49 insertions(+), 0 deletions(-) > create mode 100755 tests/tail-2/follow-name > > diff --git a/NEWS b/NEWS > index 7bc2ef3..3307e71 100644 > --- a/NEWS > +++ b/NEWS > @@ -2,6 +2,11 @@ GNU coreutils NEWS -*- > outline -*- > > * Noteworthy changes in release ?.? (????-??-??) [?] > > +** Bug fixes > + > + tail's --follow=name option no longer implies --retry on systems > + with inotify support. [bug introduced in coreutils-7.5] > + > ** Changes in behavior > > cp's extent-based (FIEMAP) copying code is more reliable in the face > diff --git a/THANKS.in b/THANKS.in > index 342a52c..d1ca380 100644 > --- a/THANKS.in > +++ b/THANKS.in > @@ -560,6 +560,7 @@ Tim J. Robbins t...@freebsd.org > Tim Mooney moo...@dogbert.cc.ndsu.nodak.edu > Tim Ryan tim_r...@bnz.co.nz > Tim Smithers mo...@dmouse.com.au > +Tim Underwood timunderw...@gmail.com > Tim Waugh twaugh@redhat > Toby Peterson t...@opendarwin.org > Todd A. Jacobs tjac...@codegnome.org > diff --git a/src/tail.c b/src/tail.c > index 88fbd10..e6d8164 100644 > --- a/src/tail.c > +++ b/src/tail.c > @@ -1432,6 +1432,16 @@ tail_forever_inotify (int wd, struct File_spec *f, > size_t n_files, > struct File_spec *fspec; > struct inotify_event *ev; > > + /* When following by name without --retry, and the last file has > + been unlinked or renamed-away, diagnose it and return. */ > + if (follow_mode == Follow_name > + && ! reopen_inaccessible_files > + && hash_get_n_entries (wd_to_name) == 0) > + { > + error (0, 0, _("no files remaining")); > + return false; > + } > + > /* When watching a PID, ensure that a read from WD will not block > indefinitely. */ > if (pid) > diff --git a/tests/Makefile.am b/tests/Makefile.am > index 685eb52..2f4a561 100644 > --- a/tests/Makefile.am > +++ b/tests/Makefile.am > @@ -489,6 +489,7 @@ TESTS = \ > tail-2/assert-2 \ > tail-2/big-4gb \ > tail-2/flush-initial \ > + tail-2/follow-name \ > tail-2/follow-stdin \ > tail-2/pipe-f \ > tail-2/pipe-f2 \ > diff --git a/tests/tail-2/follow-name b/tests/tail-2/follow-name > new file mode 100755 > index 0000000..ef9434a > --- /dev/null > +++ b/tests/tail-2/follow-name > @@ -0,0 +1,32 @@ > +#!/bin/sh > +# ensure that --follow=name does not imply --retry > + > +# Copyright (C) 2011 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/>. > + > +. "${srcdir=.}/init.sh"; path_prepend_ ../src > +print_ver_ tail > + > +cat <<\EOF > exp || framework_failure_ > +tail: cannot open `no-such' for reading: No such file or directory > +tail: no files remaining > +EOF > + > +timeout 10 tail --follow=name no-such > out 2> err > +test $? = 1 || fail=1 > + > +compare err exp || fail=1 > + > +Exit $fail > -- > 1.7.5.rc3.316.gd1ff9 >