mirror of
https://github.com/moparisthebest/wget
synced 2024-07-03 16:38:41 -04:00
[svn] Fixed a timestamping related bug in HTTP downloads.
This commit is contained in:
parent
a9c3209a9b
commit
8c45a34a55
@ -1,3 +1,7 @@
|
|||||||
|
2006-08-21 Mauro Tortonesi <mauro@ferrara.linux.it>
|
||||||
|
|
||||||
|
* http.c: Fixed timestamping-related bug.
|
||||||
|
|
||||||
2006-08-16 Mauro Tortonesi <mauro@ferrara.linux.it>
|
2006-08-16 Mauro Tortonesi <mauro@ferrara.linux.it>
|
||||||
|
|
||||||
* http.c: Fixed bug which broke --continue feature. Now if -c is
|
* http.c: Fixed bug which broke --continue feature. Now if -c is
|
||||||
|
108
src/http.c
108
src/http.c
@ -1740,9 +1740,6 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DEBUGP (("hs->local_file is: %s %s\n", hs->local_file,
|
|
||||||
file_exists_p (hs->local_file) ? "(existing)" : "(not existing)"));
|
|
||||||
|
|
||||||
/* TODO: perform this check only once. */
|
/* TODO: perform this check only once. */
|
||||||
if (file_exists_p (hs->local_file))
|
if (file_exists_p (hs->local_file))
|
||||||
{
|
{
|
||||||
@ -1806,7 +1803,7 @@ File `%s' already there; not retrieving.\n\n"), hs->local_file);
|
|||||||
/* Try to stat() the .orig file. */
|
/* Try to stat() the .orig file. */
|
||||||
if (stat (filename_plus_orig_suffix, &st) == 0)
|
if (stat (filename_plus_orig_suffix, &st) == 0)
|
||||||
{
|
{
|
||||||
local_dot_orig_file_exists = 1;
|
local_dot_orig_file_exists = true;
|
||||||
local_filename = filename_plus_orig_suffix;
|
local_filename = filename_plus_orig_suffix;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2019,8 +2016,6 @@ File `%s' already there; not retrieving.\n\n"), hs->local_file);
|
|||||||
else
|
else
|
||||||
*dt &= ~TEXTHTML;
|
*dt &= ~TEXTHTML;
|
||||||
|
|
||||||
DEBUGP (("TEXTHTML is %s.\n", *dt | TEXTHTML ? "on": "off"));
|
|
||||||
|
|
||||||
if (opt.html_extension && (*dt & TEXTHTML))
|
if (opt.html_extension && (*dt & TEXTHTML))
|
||||||
/* -E / --html-extension / html_extension = on was specified, and this is a
|
/* -E / --html-extension / html_extension = on was specified, and this is a
|
||||||
text/html file. If some case-insensitive variation on ".htm[l]" isn't
|
text/html file. If some case-insensitive variation on ".htm[l]" isn't
|
||||||
@ -2230,7 +2225,7 @@ http_loop (struct url *u, char **newloc, char **local_file, const char *referer,
|
|||||||
int *dt, struct url *proxy)
|
int *dt, struct url *proxy)
|
||||||
{
|
{
|
||||||
int count;
|
int count;
|
||||||
bool got_head = false; /* used for time-stamping */
|
bool got_head = false; /* used for time-stamping and filename detection */
|
||||||
bool got_name = false;
|
bool got_name = false;
|
||||||
char *tms;
|
char *tms;
|
||||||
const char *tmrate;
|
const char *tmrate;
|
||||||
@ -2314,7 +2309,7 @@ http_loop (struct url *u, char **newloc, char **local_file, const char *referer,
|
|||||||
on or time-stamping is employed, HEAD_ONLY commands is
|
on or time-stamping is employed, HEAD_ONLY commands is
|
||||||
encoded within *dt. */
|
encoded within *dt. */
|
||||||
if ((opt.spider && !opt.recursive)
|
if ((opt.spider && !opt.recursive)
|
||||||
|| (opt.timestamping && !got_head)
|
|| (opt.timestamping && !got_head)
|
||||||
|| (opt.always_rest && !got_name))
|
|| (opt.always_rest && !got_name))
|
||||||
*dt |= HEAD_ONLY;
|
*dt |= HEAD_ONLY;
|
||||||
else
|
else
|
||||||
@ -2433,6 +2428,8 @@ http_loop (struct url *u, char **newloc, char **local_file, const char *referer,
|
|||||||
/* Did we get the time-stamp? */
|
/* Did we get the time-stamp? */
|
||||||
if (!got_head)
|
if (!got_head)
|
||||||
{
|
{
|
||||||
|
bool restart_loop = false;
|
||||||
|
|
||||||
if (opt.timestamping && !hstat.remote_time)
|
if (opt.timestamping && !hstat.remote_time)
|
||||||
{
|
{
|
||||||
logputs (LOG_NOTQUIET, _("\
|
logputs (LOG_NOTQUIET, _("\
|
||||||
@ -2446,55 +2443,62 @@ Last-modified header missing -- time-stamps turned off.\n"));
|
|||||||
logputs (LOG_VERBOSE, _("\
|
logputs (LOG_VERBOSE, _("\
|
||||||
Last-modified header invalid -- time-stamp ignored.\n"));
|
Last-modified header invalid -- time-stamp ignored.\n"));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
/* The time-stamping section. */
|
||||||
|
if (opt.timestamping)
|
||||||
|
{
|
||||||
|
if (hstat.orig_file_name) /* Perform this check only if the file we're
|
||||||
|
supposed to download already exists. */
|
||||||
|
{
|
||||||
|
if (hstat.remote_time && tmr != (time_t) (-1))
|
||||||
|
{
|
||||||
|
/* Now time-stamping can be used validly. Time-stamping
|
||||||
|
means that if the sizes of the local and remote file
|
||||||
|
match, and local file is newer than the remote file,
|
||||||
|
it will not be retrieved. Otherwise, the normal
|
||||||
|
download procedure is resumed. */
|
||||||
|
if (hstat.orig_file_tstamp >= tmr)
|
||||||
|
{
|
||||||
|
if (hstat.contlen == -1 || hstat.orig_file_size == hstat.contlen)
|
||||||
|
{
|
||||||
|
logprintf (LOG_VERBOSE, _("\
|
||||||
|
Server file no newer than local file `%s' -- not retrieving.\n\n"),
|
||||||
|
hstat.orig_file_name);
|
||||||
|
ret = RETROK;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logprintf (LOG_VERBOSE, _("\
|
||||||
|
The sizes do not match (local %s) -- retrieving.\n"),
|
||||||
|
number_to_static_string (local_size));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
logputs (LOG_VERBOSE,
|
||||||
|
_("Remote file is newer, retrieving.\n"));
|
||||||
|
|
||||||
|
logputs (LOG_VERBOSE, "\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* free_hstat (&hstat); */
|
||||||
|
hstat.timestamp_checked = true;
|
||||||
|
restart_loop = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (opt.always_rest)
|
||||||
|
{
|
||||||
|
got_name = true;
|
||||||
|
restart_loop = true;
|
||||||
|
}
|
||||||
|
|
||||||
/* The time-stamping section. */
|
|
||||||
if (opt.timestamping && !got_head)
|
|
||||||
{
|
|
||||||
got_head = true; /* no more time-stamping */
|
got_head = true; /* no more time-stamping */
|
||||||
*dt &= ~HEAD_ONLY;
|
*dt &= ~HEAD_ONLY;
|
||||||
count = 0; /* the retrieve count for HEAD is reset */
|
count = 0; /* the retrieve count for HEAD is reset */
|
||||||
|
|
||||||
if (hstat.remote_time && tmr != (time_t) (-1))
|
|
||||||
{
|
|
||||||
/* Now time-stamping can be used validly. Time-stamping
|
|
||||||
means that if the sizes of the local and remote file
|
|
||||||
match, and local file is newer than the remote file,
|
|
||||||
it will not be retrieved. Otherwise, the normal
|
|
||||||
download procedure is resumed. */
|
|
||||||
if (hstat.orig_file_tstamp >= tmr)
|
|
||||||
{
|
|
||||||
if (hstat.contlen == -1 || hstat.orig_file_size == hstat.contlen)
|
|
||||||
{
|
|
||||||
logprintf (LOG_VERBOSE, _("\
|
|
||||||
Server file no newer than local file `%s' -- not retrieving.\n\n"),
|
|
||||||
hstat.orig_file_name);
|
|
||||||
ret = RETROK;
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
logprintf (LOG_VERBOSE, _("\
|
|
||||||
The sizes do not match (local %s) -- retrieving.\n"),
|
|
||||||
number_to_static_string (local_size));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
logputs (LOG_VERBOSE,
|
|
||||||
_("Remote file is newer, retrieving.\n"));
|
|
||||||
|
|
||||||
logputs (LOG_VERBOSE, "\n");
|
if (restart_loop)
|
||||||
}
|
continue;
|
||||||
|
|
||||||
/* free_hstat (&hstat); */
|
|
||||||
hstat.timestamp_checked = true;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (opt.always_rest && !got_name)
|
|
||||||
{
|
|
||||||
got_name = true;
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((tmr != (time_t) (-1))
|
if ((tmr != (time_t) (-1))
|
||||||
|
Loading…
Reference in New Issue
Block a user