author | Junio C Hamano <gitster@pobox.com> | |
Sun, 22 Mar 2009 05:53:36 +0000 (22:53 -0700) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Sun, 22 Mar 2009 05:53:36 +0000 (22:53 -0700) |
* jc/maint-1.6.0-pack-directory:
Fix odb_mkstemp() on AIX
Make sure objects/pack exists before creating a new pack
Conflicts:
wrapper.c
Fix odb_mkstemp() on AIX
Make sure objects/pack exists before creating a new pack
Conflicts:
wrapper.c
1 | 2 | |||
---|---|---|---|---|
builtin-pack-objects.c | patch | | diff1 | | diff2 | | blob | history |
fast-import.c | patch | | diff1 | | diff2 | | blob | history |
git-compat-util.h | patch | | diff1 | | diff2 | | blob | history |
index-pack.c | patch | | diff1 | | diff2 | | blob | history |
pack-write.c | patch | | diff1 | | diff2 | | blob | history |
t/t5300-pack-object.sh | patch | | diff1 | | diff2 | | blob | history |
wrapper.c | patch | | diff1 | | diff2 | | blob | history |
diff --cc builtin-pack-objects.c
Simple merge
diff --cc fast-import.c
index 23e970d581ad00c97ba8ea870c0e43b16258b219,f0114948ec1a48b5fa8fa848c231e0c37c2e7426..f246d5347b4131f274edad5c7c687fb7ddbbd99e
--- 1/fast-import.c
--- 2/fast-import.c
+++ b/fast-import.c
c = next;
}
- snprintf(tmpfile, sizeof(tmpfile),
- "%s/pack/tmp_idx_XXXXXX", get_object_directory());
- idx_fd = xmkstemp(tmpfile);
+ idx_fd = odb_mkstemp(tmpfile, sizeof(tmpfile),
+ "pack/tmp_idx_XXXXXX");
f = sha1fd(idx_fd, tmpfile);
sha1write(f, array, 256 * sizeof(int));
- SHA1_Init(&ctx);
+ git_SHA1_Init(&ctx);
for (c = idx; c != last; c++) {
uint32_t offset = htonl((*c)->offset);
sha1write(f, &offset, 4);
diff --cc git-compat-util.h
Simple merge
diff --cc index-pack.c
Simple merge
diff --cc pack-write.c
Simple merge
diff --cc t/t5300-pack-object.sh
Simple merge
diff --cc wrapper.c
index c85ca52ec63a679a2da7bd8980ad4e2df4e38794,5e9de294d51c158cbbe60a9a04c1b13765c353e8..d8efb1365a01104db568633fa8f6aef0c67b4cd1
+++ b/wrapper.c
return fd;
}
+/*
+ * zlib wrappers to make sure we don't silently miss errors
+ * at init time.
+ */
+void git_inflate_init(z_streamp strm)
+{
+ const char *err;
+
+ switch (inflateInit(strm)) {
+ case Z_OK:
+ return;
+
+ case Z_MEM_ERROR:
+ err = "out of memory";
+ break;
+ case Z_VERSION_ERROR:
+ err = "wrong version";
+ break;
+ default:
+ err = "error";
+ }
+ die("inflateInit: %s (%s)", err, strm->msg ? strm->msg : "no message");
+}
+
+void git_inflate_end(z_streamp strm)
+{
+ if (inflateEnd(strm) != Z_OK)
+ error("inflateEnd: %s", strm->msg ? strm->msg : "failed");
+}
+
+int git_inflate(z_streamp strm, int flush)
+{
+ int ret = inflate(strm, flush);
+ const char *err;
+
+ switch (ret) {
+ /* Out of memory is fatal. */
+ case Z_MEM_ERROR:
+ die("inflate: out of memory");
+
+ /* Data corruption errors: we may want to recover from them (fsck) */
+ case Z_NEED_DICT:
+ err = "needs dictionary"; break;
+ case Z_DATA_ERROR:
+ err = "data stream error"; break;
+ case Z_STREAM_ERROR:
+ err = "stream consistency error"; break;
+ default:
+ err = "unknown error"; break;
+
+ /* Z_BUF_ERROR: normal, needs more space in the output buffer */
+ case Z_BUF_ERROR:
+ case Z_OK:
+ case Z_STREAM_END:
+ return ret;
+ }
+ error("inflate: %s (%s)", err, strm->msg ? strm->msg : "no message");
+ return ret;
+}
++
+ int odb_mkstemp(char *template, size_t limit, const char *pattern)
+ {
+ int fd;
+
+ snprintf(template, limit, "%s/%s",
+ get_object_directory(), pattern);
+ fd = mkstemp(template);
+ if (0 <= fd)
+ return fd;
+
+ /* slow path */
+ /* some mkstemp implementations erase template on failure */
+ snprintf(template, limit, "%s/%s",
+ get_object_directory(), pattern);
+ safe_create_leading_directories(template);
+ return xmkstemp(template);
+ }
+
+ int odb_pack_keep(char *name, size_t namesz, unsigned char *sha1)
+ {
+ int fd;
+
+ snprintf(name, namesz, "%s/pack/pack-%s.keep",
+ get_object_directory(), sha1_to_hex(sha1));
+ fd = open(name, O_RDWR|O_CREAT|O_EXCL, 0600);
+ if (0 <= fd)
+ return fd;
+
+ /* slow path */
+ safe_create_leading_directories(name);
+ return open(name, O_RDWR|O_CREAT|O_EXCL, 0600);
+ }