SHA1_Final(sha1, &input_ctx);
if (hashcmp(fill(20), sha1))
die("pack is corrupted (SHA1 mismatch)");
+ use(20);
/* If input_fd is a file, we should have reached its end now. */
if (fstat(input_fd, &st))
die("cannot fstat packfile: %s", strerror(errno));
- if (S_ISREG(st.st_mode) && st.st_size != consumed_bytes + 20)
+ if (S_ISREG(st.st_mode) && st.st_size != consumed_bytes)
die("pack has junk at the end");
if (!nr_deltas)
if (err)
die("error while closing pack file: %s", strerror(errno));
chmod(curr_pack_name, 0444);
+
+ /*
+ * Let's just mimic git-unpack-objects here and write
+ * the last part of the buffer to stdout.
+ */
+ while (input_len) {
+ err = xwrite(1, input_buffer + input_offset, input_len);
+ if (err <= 0)
+ break;
+ input_len -= err;
+ input_offset += err;
+ }
}
if (final_pack_name != curr_pack_name) {
nr_deltas - nr_resolved_deltas);
} else {
/* Flush remaining pack final 20-byte SHA1. */
- use(20);
flush();
}
free(deltas);
free(objects);
free(index_name_buf);
- printf("%s\n", sha1_to_hex(sha1));
+ if (!from_stdin)
+ printf("%s\n", sha1_to_hex(sha1));
return 0;
}