[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] tail: display file headers correctly with inotify
From: |
Bernhard Voelker |
Subject: |
Re: [PATCH] tail: display file headers correctly with inotify |
Date: |
Tue, 09 Jun 2015 08:20:05 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 |
Nice one, but I think the fix is not sufficient ... see below.
On 06/09/2015 02:54 AM, Pádraig Brady wrote:
> diff --git a/src/tail.c b/src/tail.c
> index c9736ca..047d93c 100644
> --- a/src/tail.c
> +++ b/src/tail.c
> @@ -1046,7 +1046,9 @@ recheck (struct File_spec *f, bool blocking)
> {
> /* This happens when one iteration finds the file missing,
> then the preceding <dev,inode> pair is reused as the
> - file is recreated. */
> + file is recreated. XXX: This means the file is redisplayed
> + in --follow=name mode if renamed away from and back to
> + a monitored name. */
> new_file = true;
> }
> else
s/XXX: // ?
> diff --git a/tests/tail-2/F-headers.sh b/tests/tail-2/F-headers.sh
> new file mode 100755
> index 0000000..9355c0c
> --- /dev/null
> +++ b/tests/tail-2/F-headers.sh
> @@ -0,0 +1,59 @@
> +#!/bin/sh
> +# Ensure tail -F distinguishes output with the correct headers
> +# Between coreutils 7.5 and 8.23 inclusive, 'tail -F ...' would
> +# not output headers for cor created/renamed files in certain cases.
s/ cor / /
> +for mode in '' '---disable-inotify'; do
> + rm -f a b out
> +
> + tail $mode -F $fastpoll a b > out 2>&1 & pid=$!
> +
> + # Wait up to 12.7s for tail to start.
> + tail_re="cannot open 'b'" retry_delay_ check_tail_output .1 7 ||
> + { cat out; fail=1; }
> +
> + echo x > a
> + # Wait up to 12.7s for a's header to appear in the output:
> + tail_re='==> a <==' retry_delay_ check_tail_output .1 7 ||
> + { echo "$0: a: unexpected delay?"; cat out; fail=1; }
> +
> + echo y > b
> + # Wait up to 12.7s for a's header to appear in the output:
> + tail_re='==> b <==' retry_delay_ check_tail_output .1 7 ||
> + { echo "$0: a: unexpected delay?"; cat out; fail=1; }
s/ a: / b: /
While this patch fixes the outputting of the header for multiple
files, it does not fix the same issue for the same file, i.e. the
"==> file <==" header is missing when a file re-appears the 2nd
time. Reproducer:
rm -f a b out
src/tail -F a b > out 2>&1 &
sleep 2; echo a > a
sleep 2; rm a
sleep 2; echo a > a
sleep 2; kill $!
Output:
src/tail: cannot open ‘a’ for reading: No such file or directory
src/tail: cannot open ‘b’ for reading: No such file or directory
src/tail: ‘a’ has appeared; following new file
==> a <==
a
src/tail: ‘a’ has been replaced; following new file
a
Shouldn't tail(1) output the "==> a <==" header before the last
line here, too?
Thanks & have a nice day,
Berny