author | Junio C Hamano <gitster@pobox.com> | |
Wed, 25 Feb 2009 22:48:30 +0000 (14:48 -0800) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Wed, 25 Feb 2009 22:50:05 +0000 (14:50 -0800) |
* jc/maint-1.6.0-pack-directory:
Make sure objects/pack exists before creating a new pack
Make sure objects/pack exists before creating a new pack
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 3ef3413e69896d45012ea94b3678959d5d2cceb0,f0114948ec1a48b5fa8fa848c231e0c37c2e7426..3748ddf48d9bdeea890af805016b69e76493a79d
--- 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,231a58f1a9581b2f7e150ffe4e2f908dca3e3e61..b07cdf299af66d4c503d5a788858b9cc56683143
+++ 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 */
+ safe_create_leading_directories(template);
+ snprintf(template, limit, "%s/%s",
+ get_object_directory(), pattern);
+ 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);
+ }