sha1_file: add a "read_sha1_file_repl" function
authorChristian Couder <chriscool@tuxfamily.org>
Fri, 23 Jan 2009 09:07:01 +0000 (10:07 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 1 Jun 2009 00:02:59 +0000 (17:02 -0700)
This new function will replace "read_sha1_file". This latter function
becoming just a stub to call the former will a NULL "replacement"
argument.

This new function is needed because sometimes we need to use the
replacement sha1.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
cache.h
sha1_file.c

diff --git a/cache.h b/cache.h
index b8503ad91c3b13ccaf87a6f596d13918f7ae114b..94b12284a265954d55168d33b699c269a4d8b190 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -649,7 +649,11 @@ char *strip_path_suffix(const char *path, const char *suffix);
 
 /* Read and unpack a sha1 file into memory, write memory to a sha1 file */
 extern int sha1_object_info(const unsigned char *, unsigned long *);
-extern void * read_sha1_file(const unsigned char *sha1, enum object_type *type, unsigned long *size);
+extern void *read_sha1_file_repl(const unsigned char *sha1, enum object_type *type, unsigned long *size, const unsigned char **replacement);
+static inline void *read_sha1_file(const unsigned char *sha1, enum object_type *type, unsigned long *size)
+{
+       return read_sha1_file_repl(sha1, type, size, NULL);
+}
 extern int hash_sha1_file(const void *buf, unsigned long len, const char *type, unsigned char *sha1);
 extern int write_sha1_file(void *buf, unsigned long len, const char *type, unsigned char *return_sha1);
 extern int pretend_sha1_file(void *, unsigned long, enum object_type, unsigned char *);
index 4bf24ffcf6dd45a80a64df937e724c70c57aaca4..9119b795bd2c39d91731f181a304e9575c0564f5 100644 (file)
@@ -2145,8 +2145,10 @@ static void *read_object(const unsigned char *sha1, enum object_type *type,
        return read_packed_sha1(sha1, type, size);
 }
 
-void *read_sha1_file(const unsigned char *sha1, enum object_type *type,
-                    unsigned long *size)
+void *read_sha1_file_repl(const unsigned char *sha1,
+                         enum object_type *type,
+                         unsigned long *size,
+                         const unsigned char **replacement)
 {
        const unsigned char *repl = lookup_replace_object(sha1);
        void *data = read_object(repl, type, size);
@@ -2160,6 +2162,9 @@ void *read_sha1_file(const unsigned char *sha1, enum object_type *type,
        if (!data && (has_loose_object(repl) || has_packed_and_bad(repl)))
                die("object %s is corrupted", sha1_to_hex(repl));
 
+       if (replacement)
+               *replacement = repl;
+
        return data;
 }