From 29fb37b272debaf4f5f6eb7cf476de9274492930 Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Sat, 13 Apr 2013 15:28:30 +0200 Subject: attr.c: extract read_index_data() as read_blob_data_from_index() Extract the read_index_data() function from attr.c and move it to read-cache.c; rename it to read_blob_data_from_index() and update the function signature of it to align better with index/cache API functions. This allows for reusing the function in convert.c later. Signed-off-by: Lukas Fleischer Signed-off-by: Junio C Hamano --- read-cache.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'read-cache.c') diff --git a/read-cache.c b/read-cache.c index b4d08254d..48d87e83e 100644 --- a/read-cache.c +++ b/read-cache.c @@ -1895,3 +1895,35 @@ int index_name_is_other(const struct index_state *istate, const char *name, } return 1; } + +void *read_blob_data_from_index(struct index_state *istate, const char *path) +{ + int pos, len; + unsigned long sz; + enum object_type type; + void *data; + + len = strlen(path); + pos = index_name_pos(istate, path, len); + if (pos < 0) { + /* + * We might be in the middle of a merge, in which + * case we would read stage #2 (ours). + */ + int i; + for (i = -pos - 1; + (pos < 0 && i < istate->cache_nr && + !strcmp(istate->cache[i]->name, path)); + i++) + if (ce_stage(istate->cache[i]) == 2) + pos = i; + } + if (pos < 0) + return NULL; + data = read_sha1_file(istate->cache[pos]->sha1, &type, &sz); + if (!data || type != OBJ_BLOB) { + free(data); + return NULL; + } + return data; +} -- cgit v1.2.1