提交 ed81c76b 编写于 作者: J Jeff King 提交者: Junio C Hamano

add sorting infrastructure for list refs

Since we store lists of refs as linked lists, we can use
llist_mergesort to efficiently sort them.
Signed-off-by: NJeff King <peff@peff.net>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 7db8d537
......@@ -7,6 +7,7 @@
#include "dir.h"
#include "tag.h"
#include "string-list.h"
#include "mergesort.h"
enum map_direction { FROM_SRC, FROM_DST };
......@@ -918,6 +919,27 @@ 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);
}
static int count_refspec_match(const char *pattern,
struct ref *refs,
struct ref **matched_ref)
......
......@@ -72,6 +72,8 @@ extern const struct refspec *tag_refspec;
struct ref *alloc_ref(const char *name);
struct ref *copy_ref(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 ref_compare_name(const void *, const void *);
int check_ref_type(const struct ref *ref, int flags);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册