From 5e6cfc80e26a4d0ebac38cff74c2cdebbe66cd27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Scharfe?= Date: Sat, 19 May 2007 00:09:41 +0200 Subject: git-archive: convert archive entries like checkouts do As noted by Johan Herland, git-archive is a kind of checkout and needs to apply any checkout filters that might be configured. This patch adds the convenience function convert_sha1_file which returns a buffer containing the object's contents, after converting, if necessary (i.e. it's a combination of read_sha1_file and convert_to_working_tree). Direct calls to read_sha1_file in git-archive are then replaced by calls to convert_sha1_file. Since convert_sha1_file expects its path argument to be NUL-terminated -- a convention it inherits from convert_to_working_tree -- the patch also changes the path handling in archive-tar.c to always NUL-terminate the string. It used to solely rely on the len field of struct strbuf before. archive-zip.c already NUL-terminates the path and thus needs no such change. Signed-off-by: Rene Scharfe Signed-off-by: Junio C Hamano --- convert.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'convert.c') diff --git a/convert.c b/convert.c index 12abdaf2a5..c64880bdf5 100644 --- a/convert.c +++ b/convert.c @@ -652,3 +652,18 @@ char *convert_to_working_tree(const char *path, const char *src, unsigned long * return buf; } + +void *convert_sha1_file(const char *path, const unsigned char *sha1, + unsigned int mode, enum object_type *type, + unsigned long *size) +{ + void *buffer = read_sha1_file(sha1, type, size); + if (S_ISREG(mode) && buffer) { + void *converted = convert_to_working_tree(path, buffer, size); + if (converted) { + free(buffer); + buffer = converted; + } + } + return buffer; +} -- cgit v1.2.1