Browse Source

fetch-pack: use DEFINE_LIST_SORT

Build a static typed ref sorting function using DEFINE_LIST_SORT along
with a typed comparison function near its only two callers instead of
having an exported version that calls llist_mergesort().  This gets rid
of the next pointer accessor functions and their calling overhead at the
cost of a slightly increased object text size.

Before:
__TEXT	__DATA	__OBJC	others	dec	hex
23231	389	0	113689	137309	2185d	fetch-pack.o
29158	80	0	146864	176102	2afe6	remote.o

With this patch:
__TEXT	__DATA	__OBJC	others	dec	hex
23591	389	0	117759	141739	229ab	fetch-pack.o
29070	80	0	145718	174868	2ab14	remote.o

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
René Scharfe 3 years ago committed by Junio C Hamano
parent
commit
6fc9fec07b
  1. 8
      fetch-pack.c
  2. 22
      remote.c
  3. 2
      remote.h

8
fetch-pack.c

@ -26,6 +26,7 @@
#include "commit-reach.h" #include "commit-reach.h"
#include "commit-graph.h" #include "commit-graph.h"
#include "sigchain.h" #include "sigchain.h"
#include "mergesort.h"


static int transfer_unpack_limit = -1; static int transfer_unpack_limit = -1;
static int fetch_unpack_limit = -1; static int fetch_unpack_limit = -1;
@ -1010,6 +1011,13 @@ static int get_pack(struct fetch_pack_args *args,
return 0; return 0;
} }


static int ref_compare_name(const struct ref *a, const struct ref *b)
{
return strcmp(a->name, b->name);
}

DEFINE_LIST_SORT(static, sort_ref_list, struct ref, next);

static int cmp_ref_by_name(const void *a_, const void *b_) static int cmp_ref_by_name(const void *a_, const void *b_)
{ {
const struct ref *a = *((const struct ref **)a_); const struct ref *a = *((const struct ref **)a_);

22
remote.c

@ -10,7 +10,6 @@
#include "dir.h" #include "dir.h"
#include "tag.h" #include "tag.h"
#include "string-list.h" #include "string-list.h"
#include "mergesort.h"
#include "strvec.h" #include "strvec.h"
#include "commit-reach.h" #include "commit-reach.h"
#include "advice.h" #include "advice.h"
@ -1031,27 +1030,6 @@ void free_refs(struct ref *ref)
} }
} }


int ref_compare_name(const void *va, const void *vb)
{
const struct ref *a = va, *b = vb;
return strcmp(a->name, b->name);
}

static void *ref_list_get_next(const void *a)
{
return ((const struct ref *)a)->next;
}

static void ref_list_set_next(void *a, void *next)
{
((struct ref *)a)->next = next;
}

void sort_ref_list(struct ref **l, int (*cmp)(const void *, const void *))
{
*l = llist_mergesort(*l, ref_list_get_next, ref_list_set_next, cmp);
}

int count_refspec_match(const char *pattern, int count_refspec_match(const char *pattern,
struct ref *refs, struct ref *refs,
struct ref **matched_ref) struct ref **matched_ref)

2
remote.h

@ -207,9 +207,7 @@ struct ref *find_ref_by_name(const struct ref *list, const char *name);
struct ref *alloc_ref(const char *name); struct ref *alloc_ref(const char *name);
struct ref *copy_ref(const struct ref *ref); struct ref *copy_ref(const struct ref *ref);
struct ref *copy_ref_list(const struct ref *ref); struct ref *copy_ref_list(const struct ref *ref);
void sort_ref_list(struct ref **, int (*cmp)(const void *, const void *));
int count_refspec_match(const char *, struct ref *refs, struct ref **matched_ref); int count_refspec_match(const char *, struct ref *refs, struct ref **matched_ref);
int ref_compare_name(const void *, const void *);


int check_ref_type(const struct ref *ref, int flags); int check_ref_type(const struct ref *ref, int flags);



Loading…
Cancel
Save