Skip to content

Commit e1111ce

Browse files
committed
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>
1 parent 4bbf5a2 commit e1111ce

File tree

3 files changed

+14
-4
lines changed

3 files changed

+14
-4
lines changed

cache.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -756,10 +756,18 @@ char *strip_path_suffix(const char *path, const char *suffix);
756756
int daemon_avoid_alias(const char *path);
757757
int offset_1st_component(const char *path);
758758

759+
/* object replacement */
760+
extern void *read_sha1_file(const unsigned char *sha1, enum object_type *type, unsigned long *size);
761+
extern const unsigned char *do_lookup_replace_object(const unsigned char *sha1);
762+
static inline const unsigned char *lookup_replace_object(const unsigned char *sha1)
763+
{
764+
if (!read_replace_refs)
765+
return sha1;
766+
return do_lookup_replace_object(sha1);
767+
}
768+
759769
/* Read and unpack a sha1 file into memory, write memory to a sha1 file */
760770
extern int sha1_object_info(const unsigned char *, unsigned long *);
761-
extern void *read_sha1_file(const unsigned char *sha1, enum object_type *type, unsigned long *size);
762-
extern const unsigned char *lookup_replace_object(const unsigned char *sha1);
763771
extern int hash_sha1_file(const void *buf, unsigned long len, const char *type, unsigned char *sha1);
764772
extern int write_sha1_file(const void *buf, unsigned long len, const char *type, unsigned char *return_sha1);
765773
extern int pretend_sha1_file(void *, unsigned long, enum object_type, unsigned char *);

environment.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ const char *editor_program;
4242
const char *askpass_program;
4343
const char *excludes_file;
4444
enum auto_crlf auto_crlf = AUTO_CRLF_FALSE;
45-
int read_replace_refs = 1;
45+
int read_replace_refs = 1; /* NEEDSWORK: rename to use_replace_refs */
4646
enum eol eol = EOL_UNSET;
4747
enum safe_crlf safe_crlf = SAFE_CRLF_WARN;
4848
unsigned whitespace_rule_cfg = WS_DEFAULT_RULE;

replace_object.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,14 @@ static void prepare_replace_object(void)
8585

8686
for_each_replace_ref(register_replace_ref, NULL);
8787
replace_object_prepared = 1;
88+
if (!replace_object_nr)
89+
read_replace_refs = 0;
8890
}
8991

9092
/* We allow "recursive" replacement. Only within reason, though */
9193
#define MAXREPLACEDEPTH 5
9294

93-
const unsigned char *lookup_replace_object(const unsigned char *sha1)
95+
const unsigned char *do_lookup_replace_object(const unsigned char *sha1)
9496
{
9597
int pos, depth = MAXREPLACEDEPTH;
9698
const unsigned char *cur = sha1;

0 commit comments

Comments
 (0)