Fix up-to-date repo databases being redownloaded when sandboxed
Signed-off-by: Remi Gacogne <rgacogne@archlinux.org> Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
parent
f0a7f85dbb
commit
24304c6df0
2 changed files with 17 additions and 7 deletions
|
@ -413,14 +413,13 @@ static void curl_set_handle_opts(CURL *curl, struct dload_payload *payload)
|
||||||
curl_easy_setopt(curl, CURLOPT_USERAGENT, useragent);
|
curl_easy_setopt(curl, CURLOPT_USERAGENT, useragent);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!payload->force && payload->destfile_name &&
|
if(!payload->force && payload->mtime_existing_file) {
|
||||||
stat(payload->destfile_name, &st) == 0) {
|
|
||||||
/* start from scratch, but only download if our local is out of date. */
|
/* start from scratch, but only download if our local is out of date. */
|
||||||
curl_easy_setopt(curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE);
|
curl_easy_setopt(curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE);
|
||||||
curl_easy_setopt(curl, CURLOPT_TIMEVALUE, (long)st.st_mtime);
|
curl_easy_setopt(curl, CURLOPT_TIMEVALUE, payload->mtime_existing_file);
|
||||||
_alpm_log(handle, ALPM_LOG_DEBUG,
|
_alpm_log(handle, ALPM_LOG_DEBUG,
|
||||||
"%s: using time condition %ld\n",
|
"%s: using time condition %ld\n",
|
||||||
payload->remote_name, (long)st.st_mtime);
|
payload->remote_name, (long)payload->mtime_existing_file);
|
||||||
} else if(stat(payload->tempfile_name, &st) == 0 && payload->allow_resume) {
|
} else if(stat(payload->tempfile_name, &st) == 0 && payload->allow_resume) {
|
||||||
/* a previous partial download exists, resume from end of file. */
|
/* a previous partial download exists, resume from end of file. */
|
||||||
payload->tempfile_openmode = "ab";
|
payload->tempfile_openmode = "ab";
|
||||||
|
@ -1138,11 +1137,20 @@ static void prepare_resumable_downloads(alpm_list_t *payloads, const char *local
|
||||||
alpm_list_t *p;
|
alpm_list_t *p;
|
||||||
for(p = payloads; p; p = p->next) {
|
for(p = payloads; p; p = p->next) {
|
||||||
struct dload_payload *payload = p->data;
|
struct dload_payload *payload = p->data;
|
||||||
|
if(payload->destfile_name) {
|
||||||
|
const char *destfilename = mbasename(payload->destfile_name);
|
||||||
|
char *dest = _alpm_get_fullpath(localpath, destfilename, "");
|
||||||
|
struct stat deststat;
|
||||||
|
if(stat(dest, &deststat) == 0 && deststat.st_size != 0) {
|
||||||
|
payload->mtime_existing_file = deststat.st_mtime;
|
||||||
|
}
|
||||||
|
FREE(dest);
|
||||||
|
}
|
||||||
if(!payload->tempfile_name) {
|
if(!payload->tempfile_name) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const char *filename = mbasename(payload->tempfile_name);
|
const char *filename = mbasename(payload->tempfile_name);
|
||||||
char *src = _alpm_get_fullpath(localpath, filename, "");;
|
char *src = _alpm_get_fullpath(localpath, filename, "");
|
||||||
struct stat st;
|
struct stat st;
|
||||||
if(stat(src, &st) != 0 || st.st_size == 0) {
|
if(stat(src, &st) != 0 || st.st_size == 0) {
|
||||||
FREE(src);
|
FREE(src);
|
||||||
|
@ -1249,7 +1257,7 @@ download_signature:
|
||||||
ret = updated ? 0 : 1;
|
ret = updated ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (finalize_download_locations(payloads, localpath) != 0) {
|
if (finalize_download_locations(payloads, localpath) != 0 && ret == 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -42,6 +42,8 @@ struct dload_payload {
|
||||||
alpm_list_t *cache_servers;
|
alpm_list_t *cache_servers;
|
||||||
alpm_list_t *servers;
|
alpm_list_t *servers;
|
||||||
long respcode;
|
long respcode;
|
||||||
|
/* the mtime of the existing version of this file, if there is one */
|
||||||
|
long mtime_existing_file;
|
||||||
off_t initial_size;
|
off_t initial_size;
|
||||||
off_t max_size;
|
off_t max_size;
|
||||||
off_t prevprogress;
|
off_t prevprogress;
|
||||||
|
|
Loading…
Add table
Reference in a new issue