Re: [Bug-wget] [PATCH v2] bug #45790: wget prints it's progress even when background
Is there a instruction on how to compile current wget version on windows? Piotr W dniu 30.09.2016 o 10:53, Eli Zaretskii pisze: From: Piotr Wajda <pwa...@gmail.net.pl> Date: Fri, 30 Sep 2016 09:51:37 +0200 Hi, Reworked recent patch to behave correctly on fg and bg. Now user can switch from fg to bg and vice versa and wget will select fd accordingly. Thanks. + /* Initialize this values so we don't have to ask every time we print line */ + shell_is_interactive = isatty (STDIN_FILENO); The MS-Windows version of isatty returns non-zero when its argument file descriptor is open on any character device. Notably, this includes the null device, which is definitely not what we want in this case, I think. So I think using this logic will need to import isatty from Gnulib, or provide an alternative implementation in mswindows.c. static void check_redirect_output (void) { - if (redirect_request == RR_REQUESTED) + /* If it was redirected already to log file by SIGHUP or SIGUSR1, it was permanent */ + if(!redirect_request_signal_name && shell_is_interactive) { - redirect_request = RR_DONE; - redirect_output (); + if(tcgetpgrp(STDIN_FILENO) != getpgrp()) Neither tcgetpgrp nor getpgrp exist on MS-Windows. AFAIU, this test is intended to check whether wget was backgrounded. Since AFAIK that's not possible on MS-Windows, this test should always return zero on Windows, so I suggest a separate predicate function with 2 implementations: one on Windows, the other on Posix platforms.
Re: [Bug-wget] bug #45790: wget prints it's progress even when background
Ok, I'll fix that. Thanks Piotr W dniu 19.09.2016 o 19:30, Darshit Shah pisze: Hi Piotr, The patch looks fine. However, when Wget is foregrounded again, the progress bar remains invisible. When the process is foregrounded again, you should undo the effects of `redirect_output_signal()` * pwa...@gmail.net.pl <pwa...@gmail.net.pl> [160919 18:01]: Hi Darshit, Sorry for pasting patch into email incorrectly. I've send 2 other patches before, but as attachments, so they should be fine. Thanks Piotr W dniu 19.09.2016 o 17:28, Darshit Shah pisze: Hi Piotr, Thanks for your interest in Wget. I shall review your patch soon. However, for future reference please do not send patches that are pasted into the mail like this. It makes it extremely difficult for us to apply the patch. I was unable to apply the provided diff after simply saving your email. Either use `git format-patch` to create a patch file that you attach to the emails, or use `git send-email` to correctly send an inline diff. * pwa...@gmail.net.pl <pwa...@gmail.net.pl> [160918 18:41]: Hi, I've implemented fix for bug #45790. Basically I used approach Noel showed in comment. Please check below diff if it's sane. diff --git a/src/main.c b/src/main.c index ac6ee2c..f324253 100644 --- a/src/main.c +++ b/src/main.c @@ -113,7 +113,7 @@ int numurls = 0; setting up gettext's message catalog using bindtextdomain and textdomain. Does nothing if NLS is disabled or missing. */ -#if defined(SIGHUP) || defined(SIGUSR1) +#if defined(SIGHUP) || defined(SIGUSR1) || defined(SIGCONT) /* Hangup signal handler. When wget receives SIGHUP or SIGUSR1, it will proceed operation as usual, trying to write into a log file. If that is impossible, the output will be turned off. */ @@ -131,12 +131,20 @@ redirect_output_signal (int sig) if (sig == SIGUSR1) signal_name = "SIGUSR1"; #endif +#ifdef SIGCONT + if(sig == SIGCONT) { +/* If process goes to foreground, don't redirect output */ +if(getpgrp() == tcgetpgrp(STDOUT_FILENO)) + return; +signal_name = "SIGCONT"; + } +#endif log_request_redirect_output (signal_name); progress_schedule_redirect (); signal (sig, redirect_output_signal); } -#endif /* defined(SIGHUP) || defined(SIGUSR1) */ +#endif /* defined(SIGHUP) || defined(SIGUSR1) || defined(SIGCONT)*/ static void i18n_initialize (void) @@ -2003,6 +2011,9 @@ only if outputting to a regular file.\n")); #ifdef SIGUSR1 signal (SIGUSR1, redirect_output_signal); #endif +#ifdef SIGCONT + signal (SIGCONT, redirect_output_signal); +#endif #ifdef SIGPIPE /* Writing to a closed socket normally signals SIGPIPE, and the process exits. What we want is to ignore SIGPIPE and just check Thanks Piotr
Re: [Bug-wget] bug #48811: netrc password wins over interactive --ask-password
Sure. W dniu 19.09.2016 o 19:07, Darshit Shah pisze: This patch looks good. However, if we are touching this part of the code, I would like to take the opportunity to clean it up as well. From a brief glance it looks like the code for check for username and password can be abstracted into its own function. This way we can improve readability and reduce redundant code. Could you please refactor this so that both http and ftp use the same function to read the username and password? * Wajda, Piotr <pwa...@gmail.net.pl> [160916 23:47]: I've tried to tackle another bug. I've moved reading from .netrc file to the end, when no user and no passwd is defined (for both http and ftp). Please review. Thanks Piotr -- Thanking You, Darshit Shah PGP Fingerprint: 7845 120B 07CB D8D6 ECE5 FF2B 2A17 43ED A91A 35B6
Re: [Bug-wget] bug #46584: wget --spider always returns zero exit status
I'm not yet fully familiar with git format-patch (weird for me that it's adding email-like headers. Is it suppose to be email creation tool for patches?), I believe it will work for you. Thanks Piotr W dniu 19.09.2016 o 18:56, Darshit Shah pisze: Hi Piotr, How did you create this patch? Because git refuses to accept it. Patch format detection fails. Please regenerate all your patches using `git format-patch` so that we can apply the patches locally. * Wajda, Piotr <pwa...@gmail.net.pl> [160916 22:48]: Hi, I'd like to start contributing to wget. I've chosen http://savannah.gnu.org/bugs/index.php?46584 for a good start. Please let me know if attached patch is sane. Thanks Piotr diff --git a/src/ftp.c b/src/ftp.c index 39f20fa..e05d57b 100644 --- a/src/ftp.c +++ b/src/ftp.c @@ -1191,6 +1191,7 @@ Error in server response, closing control connection.\n")); if (opt.spider) { bool exists = false; + bool all_exist = true; struct fileinfo *f; uerr_t _res = ftp_get_listing (u, original_url, con, ); /* Set the DO_RETR command flag again, because it gets unset when @@ -1206,6 +1207,8 @@ Error in server response, closing control connection.\n")); { exists = true; break; +} else { + all_exist = false; } f = f->next; } @@ -1226,7 +1229,11 @@ Error in server response, closing control connection.\n")); con->csock = -1; fd_close (dtsock); fd_close (local_sock); - return RETRFINISHED; + if(all_exist) { + return RETRFINISHED; + } else { + return FTPNSFOD; + } } if (opt.verbose) >From f0ccb77460d4bd41b45de7d2ddb54294b91e9e3b Mon Sep 17 00:00:00 2001 From: ja <ja@rio.(none)> Date: Sun, 18 Sep 2016 18:47:37 +0200 Subject: [PATCH] Don't print to stdout in background. --- src/main.c | 15 +-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main.c b/src/main.c index ac6ee2c..f324253 100644 --- a/src/main.c +++ b/src/main.c @@ -113,7 +113,7 @@ int numurls = 0; setting up gettext's message catalog using bindtextdomain and textdomain. Does nothing if NLS is disabled or missing. */ -#if defined(SIGHUP) || defined(SIGUSR1) +#if defined(SIGHUP) || defined(SIGUSR1) || defined(SIGCONT) /* Hangup signal handler. When wget receives SIGHUP or SIGUSR1, it will proceed operation as usual, trying to write into a log file. If that is impossible, the output will be turned off. */ @@ -131,12 +131,20 @@ redirect_output_signal (int sig) if (sig == SIGUSR1) signal_name = "SIGUSR1"; #endif +#ifdef SIGCONT + if(sig == SIGCONT) { +/* If process goes to foreground, don't redirect output */ +if(getpgrp() == tcgetpgrp(STDOUT_FILENO)) + return; +signal_name = "SIGCONT"; + } +#endif log_request_redirect_output (signal_name); progress_schedule_redirect (); signal (sig, redirect_output_signal); } -#endif /* defined(SIGHUP) || defined(SIGUSR1) */ +#endif /* defined(SIGHUP) || defined(SIGUSR1) || defined(SIGCONT)*/ static void i18n_initialize (void) @@ -2003,6 +2011,9 @@ only if outputting to a regular file.\n")); #ifdef SIGUSR1 signal (SIGUSR1, redirect_output_signal); #endif +#ifdef SIGCONT + signal (SIGCONT, redirect_output_signal); +#endif #ifdef SIGPIPE /* Writing to a closed socket normally signals SIGPIPE, and the process exits. What we want is to ignore SIGPIPE and just check -- 1.7.9.5
Re: [Bug-wget] bug #45790: wget prints it's progress even when background
Hi Darshit, Sorry for pasting patch into email incorrectly. I've send 2 other patches before, but as attachments, so they should be fine. Thanks Piotr W dniu 19.09.2016 o 17:28, Darshit Shah pisze: Hi Piotr, Thanks for your interest in Wget. I shall review your patch soon. However, for future reference please do not send patches that are pasted into the mail like this. It makes it extremely difficult for us to apply the patch. I was unable to apply the provided diff after simply saving your email. Either use `git format-patch` to create a patch file that you attach to the emails, or use `git send-email` to correctly send an inline diff. * pwa...@gmail.net.pl <pwa...@gmail.net.pl> [160918 18:41]: Hi, I've implemented fix for bug #45790. Basically I used approach Noel showed in comment. Please check below diff if it's sane. diff --git a/src/main.c b/src/main.c index ac6ee2c..f324253 100644 --- a/src/main.c +++ b/src/main.c @@ -113,7 +113,7 @@ int numurls = 0; setting up gettext's message catalog using bindtextdomain and textdomain. Does nothing if NLS is disabled or missing. */ -#if defined(SIGHUP) || defined(SIGUSR1) +#if defined(SIGHUP) || defined(SIGUSR1) || defined(SIGCONT) /* Hangup signal handler. When wget receives SIGHUP or SIGUSR1, it will proceed operation as usual, trying to write into a log file. If that is impossible, the output will be turned off. */ @@ -131,12 +131,20 @@ redirect_output_signal (int sig) if (sig == SIGUSR1) signal_name = "SIGUSR1"; #endif +#ifdef SIGCONT + if(sig == SIGCONT) { +/* If process goes to foreground, don't redirect output */ +if(getpgrp() == tcgetpgrp(STDOUT_FILENO)) + return; +signal_name = "SIGCONT"; + } +#endif log_request_redirect_output (signal_name); progress_schedule_redirect (); signal (sig, redirect_output_signal); } -#endif /* defined(SIGHUP) || defined(SIGUSR1) */ +#endif /* defined(SIGHUP) || defined(SIGUSR1) || defined(SIGCONT)*/ static void i18n_initialize (void) @@ -2003,6 +2011,9 @@ only if outputting to a regular file.\n")); #ifdef SIGUSR1 signal (SIGUSR1, redirect_output_signal); #endif +#ifdef SIGCONT + signal (SIGCONT, redirect_output_signal); +#endif #ifdef SIGPIPE /* Writing to a closed socket normally signals SIGPIPE, and the process exits. What we want is to ignore SIGPIPE and just check Thanks Piotr
[Bug-wget] bug #45790: wget prints it's progress even when background
Hi, I've implemented fix for bug #45790. Basically I used approach Noel showed in comment. Please check below diff if it's sane. diff --git a/src/main.c b/src/main.c index ac6ee2c..f324253 100644 --- a/src/main.c +++ b/src/main.c @@ -113,7 +113,7 @@ int numurls = 0; setting up gettext's message catalog using bindtextdomain and textdomain. Does nothing if NLS is disabled or missing. */ -#if defined(SIGHUP) || defined(SIGUSR1) +#if defined(SIGHUP) || defined(SIGUSR1) || defined(SIGCONT) /* Hangup signal handler. When wget receives SIGHUP or SIGUSR1, it will proceed operation as usual, trying to write into a log file. If that is impossible, the output will be turned off. */ @@ -131,12 +131,20 @@ redirect_output_signal (int sig) if (sig == SIGUSR1) signal_name = "SIGUSR1"; #endif +#ifdef SIGCONT + if(sig == SIGCONT) { +/* If process goes to foreground, don't redirect output */ +if(getpgrp() == tcgetpgrp(STDOUT_FILENO)) + return; +signal_name = "SIGCONT"; + } +#endif log_request_redirect_output (signal_name); progress_schedule_redirect (); signal (sig, redirect_output_signal); } -#endif /* defined(SIGHUP) || defined(SIGUSR1) */ +#endif /* defined(SIGHUP) || defined(SIGUSR1) || defined(SIGCONT)*/ static void i18n_initialize (void) @@ -2003,6 +2011,9 @@ only if outputting to a regular file.\n")); #ifdef SIGUSR1 signal (SIGUSR1, redirect_output_signal); #endif +#ifdef SIGCONT + signal (SIGCONT, redirect_output_signal); +#endif #ifdef SIGPIPE /* Writing to a closed socket normally signals SIGPIPE, and the process exits. What we want is to ignore SIGPIPE and just check Thanks Piotr