Johannes Schindelin [off-list ref] writes:
+static int filter_object(const char *path, unsigned mode,
+ const unsigned char *sha1,
+ char **buf, unsigned long *size)
+{
+ enum object_type type;
+
+ *buf = read_sha1_file(sha1, &type, size);
+ if (!*buf)
+ return error(_("cannot read object %s '%s'"),
+ sha1_to_hex(sha1), path);
+ if (type != OBJ_BLOB) {
+ free(*buf);
+ return error(_("blob expected for %s '%s'"),
+ sha1_to_hex(sha1), path);
+ }
+ if (S_ISREG(mode)) {
+ struct strbuf strbuf = STRBUF_INIT;
+ if (convert_to_working_tree(path, *buf, *size, &strbuf)) {
+ free(*buf);
+ *size = strbuf.len;
+ *buf = strbuf_detach(&strbuf, NULL);
+ }
+ }
This needs to error out when mode is not ISREG just like it errors
out when type is not BLOB.
Other than that, I think these four patches are good to go.
Thanks.