bug-wget
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-wget] [PATCH v4] bug #45790: wget prints it's progress even whe


From: Tim Rühsen
Subject: Re: [Bug-wget] [PATCH v4] bug #45790: wget prints it's progress even when background
Date: Fri, 21 Oct 2016 12:42:04 +0200
User-agent: KMail/5.2.3 (Linux/4.7.0-1-amd64; KDE/5.27.0; x86_64; ; )

Could you fix these, please...

Applying: bug #45790: wget prints it's progress even when background
.git/rebase-apply/patch:104: trailing whitespace.
      if (!filelogfp) 
.git/rebase-apply/patch:126: trailing whitespace.
      else 
.git/rebase-apply/patch:158: trailing whitespace.
  /* If it was redirected already to log file by SIGHUP or SIGUSR1, 
.git/rebase-apply/patch:159: trailing whitespace.
   * it was permanent and since that redirect_request_signal_name is set. 
.git/rebase-apply/patch:160: trailing whitespace.
   * If there was no SIGHUP or SIGUSR1 and shell is interactive 
warning: squelched 3 whitespace errors
warning: 8 lines add whitespace errors.

On Mittwoch, 19. Oktober 2016 11:53:21 CEST losgrandes wrote:
> * src/log.c: Use tcgetpgrp(STDIN_FILENO) != getpgrp() to determine when to
> print to STD* or logfile. Deprecate log_request_redirect_output function.
>   Use different file handles for STD* and logfile, to easily switch between
> them when changing fg/bg. * src/log.h: Make redirect_output function
> externally linked.
> * src/main.c: Don't use deprecated log_request_redirect_output function. Use
> redirect_output instead. * src/mswindows.c: Don't use deprecated
> log_request_redirect_output function. Use redirect_output instead. ---
>  src/log.c       | 125
> +++++++++++++++++++++++++++++++++++++------------------- src/log.h       | 
>  1 +
>  src/main.c      |   2 +-
>  src/mswindows.c |   5 +--
>  4 files changed, 85 insertions(+), 48 deletions(-)
> 
> diff --git a/src/log.c b/src/log.c
> index a1338ca..bcd4d2e 100644
> --- a/src/log.c
> +++ b/src/log.c
> @@ -80,6 +80,18 @@ as that of the covered work.  */
>     logging is inhibited, logfp is set back to NULL. */
>  static FILE *logfp;
> 
> +/* Descriptor of the stdout|stderr */
> +static FILE *stdlogfp;
> +
> +/* Descriptor of the wget.log* file (if created) */
> +static FILE *filelogfp;
> +
> +/* Name of log file */
> +static char *logfile;
> +
> +/* Is interactive shell ? */
> +static int shell_is_interactive;
> +
>  /* A second file descriptor pointing to the temporary log file for the
>     WARC writer.  If WARC writing is disabled, this is NULL.  */
>  static FILE *warclogfp;
> @@ -611,16 +623,18 @@ log_init (const char *file, bool appendp)
>      {
>        if (HYPHENP (file))
>          {
> -          logfp = stdout;
> +          stdlogfp = stdout;
> +          logfp = stdlogfp;
>          }
>        else
>          {
> -          logfp = fopen (file, appendp ? "a" : "w");
> -          if (!logfp)
> +          filelogfp = fopen (file, appendp ? "a" : "w");
> +          if (!filelogfp)
>              {
>                fprintf (stderr, "%s: %s: %s\n", exec_name, file, strerror
> (errno)); exit (WGET_EXIT_GENERIC_ERROR);
>              }
> +          logfp = filelogfp;
>          }
>      }
>    else
> @@ -631,7 +645,8 @@ log_init (const char *file, bool appendp)
>           stderr only if the user actually specifies `-O -'.  He says
>           this inconsistency is harder to document, but is overall
>           easier on the user.  */
> -      logfp = stderr;
> +      stdlogfp = stderr;
> +      logfp = stdlogfp;
> 
>        if (1
>  #ifdef HAVE_ISATTY
> @@ -646,6 +661,11 @@ log_init (const char *file, bool appendp)
>            save_context_p = true;
>          }
>      }
> +
> +#ifndef WINDOWS
> +  /* Initialize this values so we don't have to ask every time we print
> line */ +  shell_is_interactive = isatty (STDIN_FILENO);
> +#endif
>  }
> 
>  /* Close LOGFP (only if we opened it, not if it's stderr), inhibit
> @@ -880,59 +900,78 @@ log_cleanup (void)
> 
>  /* When SIGHUP or SIGUSR1 are received, the output is redirected
>     elsewhere.  Such redirection is only allowed once. */
> -static enum { RR_NONE, RR_REQUESTED, RR_DONE } redirect_request = RR_NONE;
>  static const char *redirect_request_signal_name;
> 
> -/* Redirect output to `wget-log'.  */
> +/* Redirect output to `wget-log' or back to stdout/stderr.  */
> 
> -static void
> -redirect_output (void)
> +void
> +redirect_output (bool to_file, const char *signal_name)
>  {
> -  char *logfile;
> -  logfp = unique_create (DEFAULT_LOGFILE, false, &logfile);
> -  if (logfp)
> +  if (to_file && logfp != filelogfp)
>      {
> -      fprintf (stderr, _("\n%s received, redirecting output to %s.\n"),
> -               redirect_request_signal_name, quote (logfile));
> -      xfree (logfile);
> -      /* Dump the context output to the newly opened log.  */
> -      log_dump_context ();
> +      if (signal_name)
> +        {
> +          fprintf (stderr, "\n%s received.", signal_name);
> +        }
> +      if (!filelogfp)
> +        {
> +          filelogfp = unique_create (DEFAULT_LOGFILE, false, &logfile);
> +          if (filelogfp)
> +            {
> +              fprintf (stderr, _("\nRedirecting output to %s.\n"),
> +                  quote (logfile));
> +              /* Store signal name to tell wget it's permanent redirect to
> log file */ +              redirect_request_signal_name = signal_name;
> +              logfp = filelogfp;
> +              /* Dump the context output to the newly opened log.  */
> +              log_dump_context ();
> +            }
> +          else
> +            {
> +              /* Eek!  Opening the alternate log file has failed.  Nothing
> we +                can do but disable printing completely. */
> +              fprintf (stderr, _("%s: %s; disabling logging.\n"),
> +                      (logfile) ? logfile : DEFAULT_LOGFILE, strerror
> (errno)); +              inhibit_logging = true;
> +            }
> +        }
> +      else
> +        {
> +          fprintf (stderr, _("\nRedirecting output to %s.\n"),
> +              quote (logfile));
> +          logfp = filelogfp;
> +          log_dump_context ();
> +        }
>      }
> -  else
> +  else if (!to_file && logfp != stdlogfp)
>      {
> -      /* Eek!  Opening the alternate log file has failed.  Nothing we
> -         can do but disable printing completely. */
> -      fprintf (stderr, _("\n%s received.\n"),
> redirect_request_signal_name); -      fprintf (stderr, _("%s: %s; disabling
> logging.\n"),
> -               (logfile) ? logfile : DEFAULT_LOGFILE, strerror (errno));
> -      inhibit_logging = true;
> +      logfp = stdlogfp;
> +      log_dump_context ();
>      }
> -  save_context_p = false;
>  }
> 
> -/* Check whether a signal handler requested the output to be
> -   redirected. */
> +/* Check whether there's a need to redirect output. */
> 
>  static void
>  check_redirect_output (void)
>  {
> -  if (redirect_request == RR_REQUESTED)
> +#ifndef WINDOWS
> +  /* If it was redirected already to log file by SIGHUP or SIGUSR1,
> +   * it was permanent and since that redirect_request_signal_name is set.
> +   * If there was no SIGHUP or SIGUSR1 and shell is interactive
> +   * we check if process is fg or bg before every line is printed.*/
> +  if (!redirect_request_signal_name && shell_is_interactive)
>      {
> -      redirect_request = RR_DONE;
> -      redirect_output ();
> +      if (tcgetpgrp (STDIN_FILENO) != getpgrp ())
> +        {
> +          // Process backgrounded
> +          redirect_output (true,NULL);
> +        }
> +      else
> +        {
> +          // Process foregrounded
> +          redirect_output (false,NULL);
> +        }
>      }
> -}
> -
> -/* Request redirection at a convenient time.  This may be called from
> -   a signal handler. */
> -
> -void
> -log_request_redirect_output (const char *signal_name)
> -{
> -  if (redirect_request == RR_NONE && save_context_p)
> -    /* Request output redirection.  The request will be processed by
> -       check_redirect_output(), which is called from entry point log
> -       functions. */
> -    redirect_request = RR_REQUESTED;
> -  redirect_request_signal_name = signal_name;
> +#endif /* WINDOWS */
>  }
> diff --git a/src/log.h b/src/log.h
> index 0ccc26d..c3b7fec 100644
> --- a/src/log.h
> +++ b/src/log.h
> @@ -52,6 +52,7 @@ void log_init (const char *, bool);
>  void log_close (void);
>  void log_cleanup (void);
>  void log_request_redirect_output (const char *);
> +void redirect_output (bool, const char *);
> 
>  const char *escnonprint (const char *);
>  const char *escnonprint_uri (const char *);
> diff --git a/src/main.c b/src/main.c
> index ac6ee2c..35fbf16 100644
> --- a/src/main.c
> +++ b/src/main.c
> @@ -132,7 +132,7 @@ redirect_output_signal (int sig)
>      signal_name = "SIGUSR1";
>  #endif
> 
> -  log_request_redirect_output (signal_name);
> +  redirect_output (true,signal_name);
>    progress_schedule_redirect ();
>    signal (sig, redirect_output_signal);
>  }
> diff --git a/src/mswindows.c b/src/mswindows.c
> index 9735370..90e6ec4 100644
> --- a/src/mswindows.c
> +++ b/src/mswindows.c
> @@ -53,9 +53,6 @@ as that of the covered work.  */
>  #endif
> 
> 
> -/* Defined in log.c.  */
> -void log_request_redirect_output (const char *);
> -
>  /* Windows version of xsleep in utils.c.  */
> 
>  void
> @@ -98,7 +95,7 @@ static void
>  ws_hangup (const char *reason)
>  {
>    fprintf (stderr, _("Continuing in background.\n"));
> -  log_request_redirect_output (reason);
> +  redirect_output (true, reason);
> 
>    /* Detach process from the current console.  Under Windows 9x, if we
>       were launched from a 16-bit process (which is usually the case;

Attachment: signature.asc
Description: This is a digitally signed message part.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]