diff options
author | Junio C Hamano <gitster@pobox.com> | 2011-05-15 12:54:53 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-05-15 15:23:33 -0700 |
commit | e1111cef23cef1d48e9e7f222db87d58c1d51ece (patch) | |
tree | 81bad41c6310ed76a63934a68ffbcbce7fdc771b /replace_object.c | |
parent | read_sha1_file(): get rid of read_sha1_file_repl() madness (diff) | |
download | tgif-e1111cef23cef1d48e9e7f222db87d58c1d51ece.tar.xz |
inline lookup_replace_object() calls
In a repository without object replacement, lookup_replace_object() should
be a no-op. Check the flag "read_replace_refs" on the side of the caller,
and bypess a function call when we know we are not dealing with replacement.
Also, even when we are set up to replace objects, if we do not find any
replacement defined, flip that flag off to avoid function call overhead
for all the later object accesses.
As this change the semantics of the flag from "do we need read the
replacement definition?" to "do we need to check with the lookup table?"
the flag needs to be renamed later to something saner, e.g. "use_replace",
when the codebase is calmer, but not now.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'replace_object.c')
-rw-r--r-- | replace_object.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/replace_object.c b/replace_object.c index 7c6c7544ad..d0b1548726 100644 --- a/replace_object.c +++ b/replace_object.c @@ -85,12 +85,14 @@ static void prepare_replace_object(void) for_each_replace_ref(register_replace_ref, NULL); replace_object_prepared = 1; + if (!replace_object_nr) + read_replace_refs = 0; } /* We allow "recursive" replacement. Only within reason, though */ #define MAXREPLACEDEPTH 5 -const unsigned char *lookup_replace_object(const unsigned char *sha1) +const unsigned char *do_lookup_replace_object(const unsigned char *sha1) { int pos, depth = MAXREPLACEDEPTH; const unsigned char *cur = sha1; |