1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-04-18 17:56:54 +02:00

tail: display consistent diagnostics upon file replacement

* src/tail.c (recheck): Display diagnostices for replaced files
even with reused inodes which is a common case.
* tests/tail-2/F-vs-missing.sh: Use correct diagnostic in comment.
* tests/tail-2/F-vs-rename.sh: Likewise.
This commit is contained in:
Pádraig Brady
2015-06-09 11:33:44 +01:00
parent 6878ae412d
commit aee9826278
3 changed files with 26 additions and 31 deletions

View File

@@ -1019,42 +1019,37 @@ recheck (struct File_spec *f, bool blocking)
assert (f->fd == -1);
error (0, 0, _("%s has become accessible"), quote (pretty_name (f)));
}
else if (f->fd == -1)
{
/* A new file even when inodes haven't changed as <dev,inode>
pairs can be reused, and we know the file was missing
on the previous iteration. Note this also means the file
is redisplayed in --follow=name mode if renamed away from
and back to a monitored name. */
new_file = true;
error (0, 0,
_("%s has appeared; following new file"),
quote (pretty_name (f)));
}
else if (f->ino != new_stats.st_ino || f->dev != new_stats.st_dev)
{
/* File has been replaced (e.g., via log rotation) --
tail the new one. */
new_file = true;
if (f->fd == -1)
{
error (0, 0,
_("%s has appeared; following new file"),
quote (pretty_name (f)));
}
else
{
/* Close the old one. */
close_fd (f->fd, pretty_name (f));
/* File has been replaced (e.g., via log rotation) --
tail the new one. */
error (0, 0,
_("%s has been replaced; following new file"),
quote (pretty_name (f)));
}
error (0, 0,
_("%s has been replaced; following new file"),
quote (pretty_name (f)));
/* Close the old one. */
close_fd (f->fd, pretty_name (f));
}
else
{
if (f->fd == -1)
{
/* This happens when one iteration finds the file missing,
then the preceding <dev,inode> pair is reused as the
file is recreated. Note this also means the file is redisplayed
in --follow=name mode if renamed away from and back to
a monitored name. */
new_file = true;
}
else
{
close_fd (fd, pretty_name (f));
}
/* No changes detected, so close new fd. */
close_fd (fd, pretty_name (f));
}
/* FIXME: When a log is rotated, daemons tend to log to the

View File

@@ -48,7 +48,7 @@ for mode in '' '---disable-inotify'; do
(cd missing && echo x > file) || framework_failure_
# Wait up to 12.7s for this to appear in the output:
# "tail: '...' has appeared; following end of new file"
# "tail: '...' has appeared; following new file"
tail_re='has appeared' retry_delay_ check_tail_output .1 7 ||
{ echo "$0: file: unexpected delay?"; cat out; fail=1; }

View File

@@ -53,7 +53,7 @@ for mode in '' '---disable-inotify'; do
echo x > a
# Wait up to 12.7s for this to appear in the output:
# "tail: '...' has appeared; following end of new file"
# "tail: '...' has appeared; following new file"
tail_re='has appeared' retry_delay_ check_tail_output .1 7 ||
{ echo "$0: a: unexpected delay?"; cat out; fail=1; }