Commits

Anonymous committed 271421c

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>

  • Participants
  • Parent commits 49a0f24

Comments (0)

Files changed (1)

 #include "cache.h"
 #include "commit.h"
-
+#include "pack.h"
 #include "fetch.h"
 
 #include <curl/curl.h>
 		lst = &((*lst)->next);
 	*lst = (*lst)->next;
 
+	if (verify_pack(target, 0))
+		return -1;
 	install_packed_git(target);
 
 	return 0;
 
 	snprintf(tmpfile, sizeof(tmpfile), "%s.temp", filename);
 	snprintf(prevfile, sizeof(prevfile), "%s.prev", filename);
-	unlink(prevfile);
-	rename(tmpfile, prevfile);
-	unlink(tmpfile);
+
+	if (unlink(prevfile) && (errno != ENOENT))
+		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);
 
 		if (prev_posn>0) {
 			prev_posn = 0;
 			lseek(local, SEEK_SET, 0);
+			ftruncate(local, 0);
 		}
 	}