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>
|
||||
|
||||
* 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. */
|
||||
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. */
|
||||
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;
|
||||
}
|
||||
}
|
||||
@ -2019,8 +2016,6 @@ File `%s' already there; not retrieving.\n\n"), hs->local_file);
|
||||
else
|
||||
*dt &= ~TEXTHTML;
|
||||
|
||||
DEBUGP (("TEXTHTML is %s.\n", *dt | TEXTHTML ? "on": "off"));
|
||||
|
||||
if (opt.html_extension && (*dt & TEXTHTML))
|
||||
/* -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
|
||||
@ -2230,7 +2225,7 @@ http_loop (struct url *u, char **newloc, char **local_file, const char *referer,
|
||||
int *dt, struct url *proxy)
|
||||
{
|
||||
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;
|
||||
char *tms;
|
||||
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
|
||||
encoded within *dt. */
|
||||
if ((opt.spider && !opt.recursive)
|
||||
|| (opt.timestamping && !got_head)
|
||||
|| (opt.timestamping && !got_head)
|
||||
|| (opt.always_rest && !got_name))
|
||||
*dt |= HEAD_ONLY;
|
||||
else
|
||||
@ -2433,6 +2428,8 @@ http_loop (struct url *u, char **newloc, char **local_file, const char *referer,
|
||||
/* Did we get the time-stamp? */
|
||||
if (!got_head)
|
||||
{
|
||||
bool restart_loop = false;
|
||||
|
||||
if (opt.timestamping && !hstat.remote_time)
|
||||
{
|
||||
logputs (LOG_NOTQUIET, _("\
|
||||
@ -2446,55 +2443,62 @@ Last-modified header missing -- time-stamps turned off.\n"));
|
||||
logputs (LOG_VERBOSE, _("\
|
||||
Last-modified header invalid -- time-stamp ignored.\n"));
|
||||
}
|
||||
}
|
||||
|
||||
/* The time-stamping section. */
|
||||
if (opt.timestamping && !got_head)
|
||||
{
|
||||
/* 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;
|
||||
}
|
||||
|
||||
got_head = true; /* no more time-stamping */
|
||||
*dt &= ~HEAD_ONLY;
|
||||
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");
|
||||
}
|
||||
|
||||
/* free_hstat (&hstat); */
|
||||
hstat.timestamp_checked = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (opt.always_rest && !got_name)
|
||||
{
|
||||
got_name = true;
|
||||
continue;
|
||||
if (restart_loop)
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((tmr != (time_t) (-1))
|
||||
|
Loading…
Reference in New Issue
Block a user