GNU bug report logs -
#19760
[bug] "tail -f" with inotify fails to follow a file after a rename()
Previous Next
Full log
Message #19 received at 19760-done <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
On 31/03/15 07:30, Bernhard Voelker wrote:
> On 03/31/2015 05:15 AM, Pádraig Brady wrote:
>> + tail -f continues to follow changes to a file even after it's renamed.
>> + [bug introduced in coreutils-7.5]
>> +
>
> It is not 100% clear to me by this sentence what was the actual change;
> maybe a little "again" or "now" would help?
>
>> --- /dev/null
>> +++ b/tests/tail-2/f-vs-rename.sh
>> @@ -0,0 +1,51 @@
>> +#!/bin/sh
>> +# demonstrate that tail -f works when renaming the tailed files
>
> s/^d/D/; s/$/./
>
>> +# Before coreutils-8.24, tail -f a would stop tracking additions to b
>> +# after "mv a b".
>> +
>> +# Copyright (C) 2015 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=.}/tests/init.sh"; path_prepend_ ./src
>> +print_ver_ tail
>> +
>> +touch a || framework_failure_
>> +
>> +debug='---disable-inotify'
>> +debug=
>> +tail $debug -f -s.1 a > out 2>&1 & pid=$!
>
> Shouldn't $debug be removed? Otherwise maybe a loop over both the
> inotify and the non-inotify mode would make sense?
>
>> +
>> +check_tail_output()
>> +{
>> + local delay="$1"
>> + grep "$tail_re" out > /dev/null ||
>> + { sleep $delay; return 1; }
>> +}
>
> Please don't discard grep's output: reading the test's log file is
> easier with this included.
>
>> +
>> +# Wait up to 12.7s for tail to start
>
> s/$/./
>
>> +echo x > a
>> +tail_re='^x$' retry_delay_ check_tail_output .1 7 || fail=1
>> +
>> +mv a b || fail=1
>> +
>> +echo y >> b
>> +# Wait up to 12.7s for "y" to appear in the output:
>> +tail_re='^y$' retry_delay_ check_tail_output .1 7 || fail=1
>> +
>> +kill $pid
>> +
>> +wait
>> +
>> +Exit $fail
>
> Otherwise +1 (including the changes in tail.c).
All good suggestions.
Latest attached.
thanks for the review!
Pádraig.
[tail-rename-desc.patch (text/x-patch, attachment)]
This bug report was last modified 10 years and 56 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.