bug-wget
[Top][All Lists]
Advanced

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

Re: [Bug-wget] bug #24806, Option to unlink before clobber


From: Merinov Nikolay
Subject: Re: [Bug-wget] bug #24806, Option to unlink before clobber
Date: Tue, 28 Sep 2010 22:18:08 +0600
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.2 (gnu/linux)

Giuseppe Scrivano <address@hidden> writes:

> Can you please write some documentation for users, so I can commit your
> patch?

I am fix conflict with 2409 revision of Wget source and add small
documentation into wget.texi file. Need I to fix something else?

ChangeLog

2010-09-25  Merinov Nikolay  <address@hidden>
  * wget.texi (Download Options): Document --unlink option

2010-07-25  Merinov Nikolay  <address@hidden>

  * init.c: Adding "unlink" command into command list
  * main.c: Adding "unlink" option into option_data list
  * options.h: Adding unlink field into struct options
  * wget.h: Addind UNLINKERR error into uerr_t enum
  * exits.c (get_status_for_err): define status for UNLINKERR
  * ftp.c (getftp): unlink file if exists, instead clobbering
    (ftp_loop_internal): processing UNLINKERR
  * http.c (gethttp): unlink file if exists, instead clobbering
    (http_loop): processing UNLINKERR

Patch

=== modified file 'doc/wget.texi'
--- doc/wget.texi       2010-09-13 21:44:51 +0000
+++ doc/wget.texi       2010-09-25 10:50:03 +0000
@@ -1075,6 +1075,13 @@
 You can set the default encoding using the @code{remoteencoding}
 command in @file{.wgetrc}. That setting may be overridden from the
 command line.
+
address@hidden unlink
address@hidden --unlink
+
+Force Wget to unlink file instead of clobbering existing file. This
+option is useful for downloading to the directory with hardlinks.
+
 @end table
 
 @node Directory Options, HTTP Options, Download Options, Invoking

=== modified file 'src/exits.c'
--- src/exits.c 2010-05-08 19:56:15 +0000
+++ src/exits.c 2010-09-01 06:36:59 +0000
@@ -59,6 +59,7 @@
     case RETROK:
       return WGET_EXIT_SUCCESS;
     case FOPENERR: case FOPEN_EXCL_ERR: case FWRITEERR: case WRITEFAILED:
+    case UNLINKERR:
       return WGET_EXIT_IO_FAIL;
     case NOCONERROR: case HOSTERR: case CONSOCKERR: case CONERROR:
     case CONSSLERR: case CONIMPOSSIBLE: case FTPRERR: case FTPINVPASV:

=== modified file 'src/ftp.c'
--- src/ftp.c   2010-07-28 19:22:22 +0000
+++ src/ftp.c   2010-09-01 06:36:55 +0000
@@ -1173,7 +1173,22 @@
         }
       else if (opt.noclobber || opt.always_rest || opt.timestamping || 
opt.dirstruct
                || opt.output_document)
-        {
+        {        
+         if (opt.unlink && file_exists_p (con->target))
+           {
+             int res = unlink (con->target);
+             if (res < 0)
+               {
+                 logprintf (LOG_NOTQUIET, "%s: %s\n", con->target,
+                            strerror (errno));
+                 fd_close (csock);
+                 con->csock = -1;
+                 fd_close (dtsock);
+                 fd_close (local_sock);
+                 return UNLINKERR;
+               }
+           }
+
 #ifdef __VMS
           int open_id;
 
@@ -1484,6 +1499,7 @@
         {
         case HOSTERR: case CONIMPOSSIBLE: case FWRITEERR: case FOPENERR:
         case FTPNSFOD: case FTPLOGINC: case FTPNOPASV: case CONTNOTSUPPORTED:
+        case UNLINKERR:
           /* Fatal errors, give up.  */
           return err;
         case CONSOCKERR: case CONERROR: case FTPSRVERR: case FTPRERR:

=== modified file 'src/http.c'
--- src/http.c  2010-08-09 10:56:49 +0000
+++ src/http.c  2010-09-01 06:36:51 +0000
@@ -2505,6 +2505,19 @@
         }
       else if (ALLOW_CLOBBER)
         {
+         if (opt.unlink && file_exists_p (hs->local_file))
+           {
+             int res = unlink (hs->local_file);
+             if (res < 0)
+               {
+                 logprintf (LOG_NOTQUIET, "%s: %s\n", hs->local_file,
+                            strerror (errno));
+                 CLOSE_INVALIDATE (sock);
+                 xfree (head);
+                 return UNLINKERR;
+               }
+           }
+
 #ifdef __VMS
           int open_id;
 
@@ -2801,6 +2814,13 @@
           logprintf (LOG_NOTQUIET, _("Unable to establish SSL connection.\n"));
           ret = err;
           goto exit;
+        case UNLINKERR:
+          /* Another fatal error.  */
+          logputs (LOG_VERBOSE, "\n");
+          logprintf (LOG_NOTQUIET, _("Cannot unlink %s (%s).\n"),
+                     quote (hstat.local_file), strerror (errno));
+          ret = err;
+          goto exit;
         case NEWLOCATION:
           /* Return the new location to the caller.  */
           if (!*newloc)

=== modified file 'src/init.c'
--- src/init.c  2010-07-28 19:22:22 +0000
+++ src/init.c  2010-07-28 21:18:12 +0000
@@ -252,6 +252,7 @@
   { "timeout",          NULL,                   cmd_spec_timeout },
   { "timestamping",     &opt.timestamping,      cmd_boolean },
   { "tries",            &opt.ntry,              cmd_number_inf },
+  { "unlink",           &opt.unlink,            cmd_boolean },
   { "trustservernames", &opt.trustservernames,  cmd_boolean },
   { "useproxy",         &opt.use_proxy,         cmd_boolean },
   { "user",             &opt.user,              cmd_string },

=== modified file 'src/main.c'
--- src/main.c  2010-09-12 12:21:03 +0000
+++ src/main.c  2010-09-13 05:35:26 +0000
@@ -266,6 +266,7 @@
     { "timeout", 'T', OPT_VALUE, "timeout", -1 },
     { "timestamping", 'N', OPT_BOOLEAN, "timestamping", -1 },
     { "tries", 't', OPT_VALUE, "tries", -1 },
+    { "unlink", 0, OPT_BOOLEAN, "unlink", -1 },
     { "trust-server-names", 0, OPT_BOOLEAN, "trustservernames", -1 },
     { "use-server-timestamps", 0, OPT_BOOLEAN, "useservertimestamps", -1 },
     { "user", 0, OPT_VALUE, "user", -1 },
@@ -515,6 +516,8 @@
        --local-encoding=ENC      use ENC as the local encoding for IRIs.\n"),
     N_("\
        --remote-encoding=ENC     use ENC as the default remote encoding.\n"),
+    N_("\
+       --unlink                  remove file before clobber.\n"),
     "\n",
 
     N_("\

=== modified file 'src/options.h'
--- src/options.h       2010-07-28 19:22:22 +0000
+++ src/options.h       2010-07-28 21:14:34 +0000
@@ -54,6 +54,7 @@
   bool protocol_directories;   /* Whether to prepend "http"/"ftp" to dirs. */
   bool noclobber;              /* Disables clobbering of existing
                                   data. */
+  bool unlink;                 /* remove file before clobbering */
   char *dir_prefix;            /* The top of directory tree */
   char *lfilename;             /* Log filename */
   char *input_filename;                /* Input filename */

=== modified file 'src/wget.h'
--- src/wget.h  2010-05-08 19:56:15 +0000
+++ src/wget.h  2010-09-01 06:36:46 +0000
@@ -351,7 +351,8 @@
   RETRBADPATTERN, RETNOTSUP /* ! */, ROBOTSOK /* ! */, NOROBOTS /* ! */,
   PROXERR,
   /* 50  */
-  AUTHFAILED, QUOTEXC, WRITEFAILED, SSLINITFAILED, VERIFCERTERR
+  AUTHFAILED, QUOTEXC, WRITEFAILED, SSLINITFAILED, VERIFCERTERR,
+  UNLINKERR
 } uerr_t;
 
 /* 2005-02-19 SMS.


--
Sorry for my poor English



--
Sorry for my poor English




reply via email to

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