mirror of
https://github.com/git/git.git
synced 2024-11-24 02:17:02 +08:00
sha1_file: change GIT_TRACE_PACK_ACCESS logging to use trace API
This changes GIT_TRACE_PACK_ACCESS functionality as follows: * supports the same options as GIT_TRACE (e.g. printing to stderr) * no longer supports relative paths * appends to the trace file rather than overwriting Signed-off-by: Karsten Blees <blees@dcon.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
eb9250dfd5
commit
67dc598ec4
@ -925,11 +925,11 @@ Unsetting the variable, or setting it to empty, "0" or
|
||||
"false" (case insensitive) disables trace messages.
|
||||
|
||||
'GIT_TRACE_PACK_ACCESS'::
|
||||
If this variable is set to a path, a file will be created at
|
||||
the given path logging all accesses to any packs. For each
|
||||
Enables trace messages for all accesses to any packs. For each
|
||||
access, the pack file name and an offset in the pack is
|
||||
recorded. This may be helpful for troubleshooting some
|
||||
pack-related performance problems.
|
||||
See 'GIT_TRACE' for available trace output options.
|
||||
|
||||
'GIT_TRACE_PACKET'::
|
||||
Enables trace messages for all packets coming in or out of a
|
||||
|
30
sha1_file.c
30
sha1_file.c
@ -36,9 +36,6 @@ static inline uintmax_t sz_fmt(size_t s) { return s; }
|
||||
|
||||
const unsigned char null_sha1[20];
|
||||
|
||||
static const char *no_log_pack_access = "no_log_pack_access";
|
||||
static const char *log_pack_access;
|
||||
|
||||
/*
|
||||
* This is meant to hold a *small* number of objects that you would
|
||||
* want read_sha1_file() to be able to return, but yet you do not want
|
||||
@ -2085,27 +2082,9 @@ static void *read_object(const unsigned char *sha1, enum object_type *type,
|
||||
|
||||
static void write_pack_access_log(struct packed_git *p, off_t obj_offset)
|
||||
{
|
||||
static FILE *log_file;
|
||||
|
||||
if (!log_pack_access)
|
||||
log_pack_access = getenv("GIT_TRACE_PACK_ACCESS");
|
||||
if (!log_pack_access)
|
||||
log_pack_access = no_log_pack_access;
|
||||
if (log_pack_access == no_log_pack_access)
|
||||
return;
|
||||
|
||||
if (!log_file) {
|
||||
log_file = fopen(log_pack_access, "w");
|
||||
if (!log_file) {
|
||||
error("cannot open pack access log '%s' for writing: %s",
|
||||
log_pack_access, strerror(errno));
|
||||
log_pack_access = no_log_pack_access;
|
||||
return;
|
||||
}
|
||||
}
|
||||
fprintf(log_file, "%s %"PRIuMAX"\n",
|
||||
p->pack_name, (uintmax_t)obj_offset);
|
||||
fflush(log_file);
|
||||
static struct trace_key pack_access = TRACE_KEY_INIT(PACK_ACCESS);
|
||||
trace_printf_key(&pack_access, "%s %"PRIuMAX"\n",
|
||||
p->pack_name, (uintmax_t)obj_offset);
|
||||
}
|
||||
|
||||
int do_check_packed_object_crc;
|
||||
@ -2130,8 +2109,7 @@ void *unpack_entry(struct packed_git *p, off_t obj_offset,
|
||||
int delta_stack_nr = 0, delta_stack_alloc = UNPACK_ENTRY_STACK_PREALLOC;
|
||||
int base_from_cache = 0;
|
||||
|
||||
if (log_pack_access != no_log_pack_access)
|
||||
write_pack_access_log(p, obj_offset);
|
||||
write_pack_access_log(p, obj_offset);
|
||||
|
||||
/* PHASE 1: drill down to the innermost base object */
|
||||
for (;;) {
|
||||
|
Loading…
Reference in New Issue
Block a user