From: Jim Meyering Date: Sun, 24 Apr 2011 21:20:01 +0000 (+0200) Subject: tail --follow=name no longer implies --retry X-Git-Tag: v8.12~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=61de57cd2369914542d44d32b4a2e001f638ada8;p=thirdparty%2Fcoreutils.git 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. --- diff --git a/NEWS b/NEWS index 7bc2ef39ac..3307e71e9b 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 342a52c811..d1ca380720 100644 --- a/THANKS.in +++ b/THANKS.in @@ -560,6 +560,7 @@ Tim J. Robbins tjr@FreeBSD.org Tim Mooney mooney@dogbert.cc.ndsu.NoDak.edu Tim Ryan Tim_Ryan@bnz.co.nz Tim Smithers mouse@dmouse.com.au +Tim Underwood timunderwood@gmail.com Tim Waugh twaugh@redhat Toby Peterson toby@opendarwin.org Todd A. Jacobs tjacobs@codegnome.org diff --git a/src/tail.c b/src/tail.c index 88fbd10b81..e6d816432b 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 685eb52b95..2f4a5613aa 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 0000000000..ef9434a60c --- /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 . + +. "${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