Progress tickers had been used inconsistently for a long time, and
documentation was outdated, too. Factor out common code to ease
maintenance, use the report_flush() function, and add and use a macro
(want_progress()) to determine if progress ticker output is desired.
This makes for a much more consistent look on screen and in logfiles and
should be much easier to fix later on.
TODO: test syslog output.
svn path=/branches/BRANCH_6-3/; revision=5290
termination signal properly through sys/wait.h macros.
* When acquiring a body, understand NIL ("no such data item"), as returned by
some MS Exchange versions. Fixes BerliOS Bug #11980 by KB Sriram.
termination signal properly through sys/wait.h macros.
* When acquiring a body, understand NIL ("no such data item"), as returned by
some MS Exchange versions. Fixes BerliOS Bug #11980 by KB Sriram.
+* Make progress tickers (-v/--showdots) consistent, and update documentation
+ accordingly ("." for each 1024 octets read, "#" for a header written, and "*"
+ for each body line written.)
+ The conditions under which these had been printed were inconsistent,
+ illogical, and documentation hadn't matched real behaviour for long.
# CHANGES
* Make the comparison of the SSL fingerprints case insensitive, to
# CHANGES
* Make the comparison of the SSL fingerprints case insensitive, to
+static int eat_trailer(int sock, struct query *ctl)
+{
+ /* we only need this LF if we're printing ticker dots
+ * AND we are dumping protocol traces. */
+ if (outlevel >= O_VERBOSE && want_progress()) fputc('\n', stdout);
+ return (ctl->server.base_protocol->trail)(sock, ctl, tag);
+}
+
static int fetch_messages(int mailserver_socket, struct query *ctl,
int count, int **msgsizes, int maxfetch,
int *fetches, int *dispatches, int *deletions)
static int fetch_messages(int mailserver_socket, struct query *ctl,
int count, int **msgsizes, int maxfetch,
int *fetches, int *dispatches, int *deletions)
if (len > 0)
report_build(stdout, wholesize ? GT_(" (%d octets)")
: GT_(" (%d header octets)"), len);
if (len > 0)
report_build(stdout, wholesize ? GT_(" (%d octets)")
: GT_(" (%d header octets)"), len);
- if (outlevel >= O_VERBOSE)
- report_complete(stdout, "\n");
+ if (want_progress()) {
+ /* flush and add a blank to append ticker dots */
+ report_flush(stdout);
+ putchar(' ');
+ }
/* pass the suppress_readbody flag only if the underlying
* protocol does not fetch the body separately */
separatefetchbody ? 0 : &suppress_readbody);
/* pass the suppress_readbody flag only if the underlying
* protocol does not fetch the body separately */
separatefetchbody ? 0 : &suppress_readbody);
if (err == PS_RETAINED)
suppress_forward = suppress_delete = retained = TRUE;
else if (err == PS_TRANSIENT)
if (err == PS_RETAINED)
suppress_forward = suppress_delete = retained = TRUE;
else if (err == PS_TRANSIENT)
/* tell server we got it OK and resynchronize */
if (separatefetchbody && ctl->server.base_protocol->trail)
{
/* tell server we got it OK and resynchronize */
if (separatefetchbody && ctl->server.base_protocol->trail)
{
- if (outlevel >= O_VERBOSE && !is_a_file(1) && !run.use_syslog)
- {
- fputc('\n', stdout);
- fflush(stdout);
- }
-
- if ((err = (ctl->server.base_protocol->trail)(mailserver_socket, ctl, tag)))
- return(err);
+ err = eat_trailer(mailserver_socket, ctl);
+ if (err) return(err);
}
/* do not read the body which is not being forwarded only if
}
/* do not read the body which is not being forwarded only if
*/
if (len == -1)
len = msgsize - msgblk.msglen;
*/
if (len == -1)
len = msgsize - msgblk.msglen;
- if (outlevel > O_SILENT && !wholesize)
- report_build(stdout,
- GT_(" (%d body octets)"), len);
+ if (!wholesize) {
+ if (outlevel > O_SILENT)
+ report_build(stdout,
+ GT_(" (%d body octets)"), len);
+ if (want_progress()) {
+ report_flush(stdout);
+ putchar(' ');
+ }
+ }
}
/* process the body now */
}
/* process the body now */
ctl,
!suppress_forward,
len);
ctl,
!suppress_forward,
len);
if (err == PS_TRANSIENT)
suppress_delete = suppress_forward = TRUE;
else if (err)
return(err);
/* tell server we got it OK and resynchronize */
if (err == PS_TRANSIENT)
suppress_delete = suppress_forward = TRUE;
else if (err)
return(err);
/* tell server we got it OK and resynchronize */
- if (ctl->server.base_protocol->trail)
- {
- if (outlevel >= O_VERBOSE && !is_a_file(1) && !run.use_syslog)
- {
- fputc('\n', stdout);
- fflush(stdout);
- }
-
- err = (ctl->server.base_protocol->trail)(mailserver_socket, ctl, tag);
- if (err != 0)
- return(err);
+ if (ctl->server.base_protocol->trail) {
+ err = eat_trailer(mailserver_socket, ctl);
+ if (err) return(err);
flag = FALSE;\
else\
flag = (dflt)
flag = FALSE;\
else\
flag = (dflt)
- /* one global gets treated specially */
- DEFAULT(run.showdots, run.poll_interval==0 || nodetach);
/* merge in wired defaults, do sanity checks and prepare internal fields */
for (ctl = querylist; ctl; ctl = ctl->next)
/* merge in wired defaults, do sanity checks and prepare internal fields */
for (ctl = querylist; ctl; ctl = ctl->next)
/* prototype from rfc822valid.c */
int rfc822_valid_msgid(const unsigned char *);
/* prototype from rfc822valid.c */
int rfc822_valid_msgid(const unsigned char *);
+/* macro to determine if we want to spam progress to stdout */
+#define want_progress() \
+ ((outlevel >= O_VERBOSE || (outlevel > O_SILENT && run.showdots)) \
+ && !run.use_syslog \
+ && (run.showdots || !is_a_file(1)))
+
#endif
/* fetchmail.h ends here */
#endif
/* fetchmail.h ends here */
The
.B \-\-showdots
option (keyword: set showdots) forces fetchmail to show progress dots
The
.B \-\-showdots
option (keyword: set showdots) forces fetchmail to show progress dots
-even if the current tty is not stdout (for example logfiles).
-Fetchmail shows the dots by default when run in nodetach mode or when
-daemon mode is not enabled.
+even if the output goes to a file or fetchmail is not in verbose mode.
+Fetchmail shows the dots by default when run in \-\-verbose mode
+\fIand\fP output goes to console. This option is ignored in \-\-silent mode.
.PP
By specifying the
.B \-\-tracepolls
.PP
By specifying the
.B \-\-tracepolls
*tickervar += bytes;
while (*tickervar >= SIZETICKER)
{
*tickervar += bytes;
while (*tickervar >= SIZETICKER)
{
- if (outlevel > O_SILENT && run.showdots && !run.use_syslog)
{
fputc('.', stdout);
fflush(stdout);
{
fputc('.', stdout);
fflush(stdout);
- if ((run.poll_interval == 0 || nodetach) && outlevel >= O_VERBOSE && !is_a_file(1) && !run.use_syslog)
fputc('#', stdout);
/* write error notifications */
fputc('#', stdout);
/* write error notifications */
release_sink(ctl);
return(PS_IOERR);
}
release_sink(ctl);
return(PS_IOERR);
}
- else if (outlevel >= O_VERBOSE && !is_a_file(1) && !run.use_syslog)
+ else if (want_progress())
{
fputc('*', stdout);
fflush(stdout);
{
fputc('*', stdout);
fflush(stdout);