Skip to content

Commit

Permalink
Remove pack file handling dependency from wrapper.o
Browse files Browse the repository at this point in the history
As v1.7.0-rc0~43 (slim down "git show-index", 2010-01-21) explains,
use of xmalloc() brings in a dependency on zlib, the sha1 lib, and the
rest of git's object file access machinery via try_to_free_pack_memory.
That is overkill when xmalloc is just being used as a convenience
wrapper to exit when no memory is available.

So defer setting try_to_free_pack_memory as try_to_free_routine until
the first packfile is opened in add_packed_git().

After this change, a simple program using xmalloc() and no other
functions will not pull in any code from libgit.a aside from wrapper.o
and usage.o.

Improved-by: René Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jonathan Nieder authored and Junio C Hamano committed Nov 10, 2010
1 parent bc9b217 commit e050029
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 3 deletions.
11 changes: 11 additions & 0 deletions sha1_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -818,11 +818,22 @@ static struct packed_git *alloc_packed_git(int extra)
return p;
}

static void try_to_free_pack_memory(size_t size)
{
release_pack_memory(size, -1);
}

struct packed_git *add_packed_git(const char *path, int path_len, int local)
{
static int have_set_try_to_free_routine;
struct stat st;
struct packed_git *p = alloc_packed_git(path_len + 2);

if (!have_set_try_to_free_routine) {
have_set_try_to_free_routine = 1;
set_try_to_free_routine(try_to_free_pack_memory);
}

/*
* Make sure a corresponding .pack file exists and that
* the index looks sane.
Expand Down
5 changes: 2 additions & 3 deletions wrapper.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,11 @@
*/
#include "cache.h"

static void try_to_free_builtin(size_t size)
static void do_nothing(size_t size)
{
release_pack_memory(size, -1);
}

static void (*try_to_free_routine)(size_t size) = try_to_free_builtin;
static void (*try_to_free_routine)(size_t size) = do_nothing;

try_to_free_t set_try_to_free_routine(try_to_free_t routine)
{
Expand Down

0 comments on commit e050029

Please sign in to comment.