mru: use double-linked list from list.h

Simplify mru.[ch] and related code by reusing the double-linked list
implementation from list.h instead of a custom one.
This commit is an intermediate step. Our final goal is to get rid of
mru.[ch] at all and inline all logic.

Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored by: Jeff King <peff@peff.net>
Signed-off-by: Olga Telezhnaia <olyatelezhnaya@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Olga Telezhnaya
2017-09-30 17:51:01 +00:00
committed by Junio C Hamano
parent 20fed7cad4
commit 8865859dfc
4 changed files with 33 additions and 59 deletions

View File

@ -40,7 +40,7 @@ static unsigned int pack_max_fds;
static size_t peak_pack_mapped;
static size_t pack_mapped;
struct packed_git *packed_git;
struct mru packed_git_mru;
struct mru packed_git_mru = {{&packed_git_mru.list, &packed_git_mru.list}};
#define SZ_FMT PRIuMAX
static inline uintmax_t sz_fmt(size_t s) { return s; }
@ -1824,13 +1824,14 @@ static int fill_pack_entry(const unsigned char *sha1,
*/
int find_pack_entry(const unsigned char *sha1, struct pack_entry *e)
{
struct mru_entry *p;
struct list_head *pos;
prepare_packed_git();
if (!packed_git)
return 0;
for (p = packed_git_mru.head; p; p = p->next) {
list_for_each(pos, &packed_git_mru.list) {
struct mru *p = list_entry(pos, struct mru, list);
if (fill_pack_entry(sha1, e, p->item)) {
mru_mark(&packed_git_mru, p);
return 1;