mirror of
https://github.com/git/git
synced 2024-08-24 18:26:02 +00:00
Update partial HTTP transfers.
Add the sanity checks discussed on the list with Nick Hengeveld in <20050927000931.GA15615@reactrix.com>. * unlink of previous and rename from temp to previous can fail for reasons other than benign ones (missing previous and missing temp). Report these failures when we encounter them, to make diagnosing problems easier. * when rewinding the partially written result, make sure to truncate the file. Also verify the pack after downloading by calling verify_packfile(). Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
49a0f240f7
commit
271421cd34
15
http-fetch.c
15
http-fetch.c
|
@ -1,6 +1,6 @@
|
||||||
#include "cache.h"
|
#include "cache.h"
|
||||||
#include "commit.h"
|
#include "commit.h"
|
||||||
|
#include "pack.h"
|
||||||
#include "fetch.h"
|
#include "fetch.h"
|
||||||
|
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
@ -431,6 +431,8 @@ static int fetch_pack(struct alt_base *repo, unsigned char *sha1)
|
||||||
lst = &((*lst)->next);
|
lst = &((*lst)->next);
|
||||||
*lst = (*lst)->next;
|
*lst = (*lst)->next;
|
||||||
|
|
||||||
|
if (verify_pack(target, 0))
|
||||||
|
return -1;
|
||||||
install_packed_git(target);
|
install_packed_git(target);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -456,9 +458,13 @@ static int fetch_object(struct alt_base *repo, unsigned char *sha1)
|
||||||
|
|
||||||
snprintf(tmpfile, sizeof(tmpfile), "%s.temp", filename);
|
snprintf(tmpfile, sizeof(tmpfile), "%s.temp", filename);
|
||||||
snprintf(prevfile, sizeof(prevfile), "%s.prev", filename);
|
snprintf(prevfile, sizeof(prevfile), "%s.prev", filename);
|
||||||
unlink(prevfile);
|
|
||||||
rename(tmpfile, prevfile);
|
if (unlink(prevfile) && (errno != ENOENT))
|
||||||
unlink(tmpfile);
|
return error("Failed to unlink %s (%s)",
|
||||||
|
prevfile, strerror(errno));
|
||||||
|
if (rename(tmpfile, prevfile) && (errno != ENOENT))
|
||||||
|
return error("Failed to rename %s to %s (%s)",
|
||||||
|
tmpfile, prevfile, strerror(errno));
|
||||||
|
|
||||||
local = open(tmpfile, O_WRONLY | O_CREAT | O_EXCL, 0666);
|
local = open(tmpfile, O_WRONLY | O_CREAT | O_EXCL, 0666);
|
||||||
|
|
||||||
|
@ -523,6 +529,7 @@ static int fetch_object(struct alt_base *repo, unsigned char *sha1)
|
||||||
if (prev_posn>0) {
|
if (prev_posn>0) {
|
||||||
prev_posn = 0;
|
prev_posn = 0;
|
||||||
lseek(local, SEEK_SET, 0);
|
lseek(local, SEEK_SET, 0);
|
||||||
|
ftruncate(local, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue