apply: refactor read_file_or_gitlink()

Reading a blob out of the object store does not have to require that the
caller has a cache entry for it.

Create a read_blob_object() helper function that takes the object name and
mode, and use it to reimplement the original function as a thin wrapper to
it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano 2012-05-08 15:11:02 -07:00
parent 798b9ce87b
commit e42a96e772

View file

@ -2930,20 +2930,17 @@ static int apply_fragments(struct image *img, struct patch *patch)
return 0;
}
static int read_file_or_gitlink(struct cache_entry *ce, struct strbuf *buf)
static int read_blob_object(struct strbuf *buf, const unsigned char *sha1, unsigned mode)
{
if (!ce)
return 0;
if (S_ISGITLINK(ce->ce_mode)) {
if (S_ISGITLINK(mode)) {
strbuf_grow(buf, 100);
strbuf_addf(buf, "Subproject commit %s\n", sha1_to_hex(ce->sha1));
strbuf_addf(buf, "Subproject commit %s\n", sha1_to_hex(sha1));
} else {
enum object_type type;
unsigned long sz;
char *result;
result = read_sha1_file(ce->sha1, &type, &sz);
result = read_sha1_file(sha1, &type, &sz);
if (!result)
return -1;
/* XXX read_sha1_file NUL-terminates */
@ -2952,6 +2949,13 @@ static int read_file_or_gitlink(struct cache_entry *ce, struct strbuf *buf)
return 0;
}
static int read_file_or_gitlink(struct cache_entry *ce, struct strbuf *buf)
{
if (!ce)
return 0;
return read_blob_object(buf, ce->sha1, ce->ce_mode);
}
static struct patch *in_fn_table(const char *name)
{
struct string_list_item *item;