From: Gargi Sharma <gs051095@gmail.com>
To: git@vger.kernel.org
Cc: peff@peff.net, olyatelezhnaya@gmail.com,
Gargi Sharma <gs051095@gmail.com>
Subject: [PATCH] mru: Replace mru.[ch] with list.h implementation
Date: Sat, 11 Nov 2017 13:06:46 -0500 [thread overview]
Message-ID: <1510423606-9616-1-git-send-email-gs051095@gmail.com> (raw)
Replace custom allocation in mru.[ch] with generic calls
to list.h API.
Signed-off-by: Gargi Sharma <gs051095@gmail.com>
---
builtin/pack-objects.c | 14 ++++++++------
cache.h | 9 +++++----
mru.c | 27 ---------------------------
mru.h | 40 ----------------------------------------
packfile.c | 28 +++++++++++++++++++---------
5 files changed, 32 insertions(+), 86 deletions(-)
delete mode 100644 mru.c
delete mode 100644 mru.h
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index ba81234..26717c5 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -24,7 +24,7 @@
#include "reachable.h"
#include "sha1-array.h"
#include "argv-array.h"
-#include "mru.h"
+#include "list.h"
#include "packfile.h"
static const char *pack_usage[] = {
@@ -1012,9 +1012,9 @@ static int want_object_in_pack(const unsigned char *sha1,
return want;
}
- list_for_each(pos, &packed_git_mru.list) {
- struct mru *entry = list_entry(pos, struct mru, list);
- struct packed_git *p = entry->item;
+ list_for_each(pos, &packed_git_mru) {
+ struct packed_git *p = list_entry(pos, struct packed_git, mru);
+ struct list_head *entry = &(p->mru);
off_t offset;
if (p == *found_pack)
@@ -1030,8 +1030,10 @@ static int want_object_in_pack(const unsigned char *sha1,
*found_pack = p;
}
want = want_found_object(exclude, p);
- if (!exclude && want > 0)
- mru_mark(&packed_git_mru, entry);
+ if (!exclude && want > 0) {
+ list_del(entry);
+ list_add(entry, &packed_git_mru);
+ }
if (want != -1)
return want;
}
diff --git a/cache.h b/cache.h
index 49b083e..1a275ae 100644
--- a/cache.h
+++ b/cache.h
@@ -4,7 +4,7 @@
#include "git-compat-util.h"
#include "strbuf.h"
#include "hashmap.h"
-#include "mru.h"
+#include "list.h"
#include "advice.h"
#include "gettext.h"
#include "convert.h"
@@ -1566,6 +1566,7 @@ struct pack_window {
extern struct packed_git {
struct packed_git *next;
+ struct list_head mru;
struct pack_window *windows;
off_t pack_size;
const void *index_data;
@@ -1587,10 +1588,10 @@ extern struct packed_git {
} *packed_git;
/*
- * A most-recently-used ordered version of the packed_git list, which can
- * be iterated instead of packed_git (and marked via mru_mark).
+ * A most-recently-used ordered version of the packed_git list.
*/
-extern struct mru packed_git_mru;
+extern struct list_head packed_git_mru;
+
struct pack_entry {
off_t offset;
diff --git a/mru.c b/mru.c
deleted file mode 100644
index 8f3f34c..0000000
--- a/mru.c
+++ /dev/null
@@ -1,27 +0,0 @@
-#include "cache.h"
-#include "mru.h"
-
-void mru_append(struct mru *head, void *item)
-{
- struct mru *cur = xmalloc(sizeof(*cur));
- cur->item = item;
- list_add_tail(&cur->list, &head->list);
-}
-
-void mru_mark(struct mru *head, struct mru *entry)
-{
- /* To mark means to put at the front of the list. */
- list_del(&entry->list);
- list_add(&entry->list, &head->list);
-}
-
-void mru_clear(struct mru *head)
-{
- struct list_head *pos;
- struct list_head *tmp;
-
- list_for_each_safe(pos, tmp, &head->list) {
- free(list_entry(pos, struct mru, list));
- }
- INIT_LIST_HEAD(&head->list);
-}
diff --git a/mru.h b/mru.h
deleted file mode 100644
index 80a589e..0000000
--- a/mru.h
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef MRU_H
-#define MRU_H
-
-#include "list.h"
-
-/**
- * A simple most-recently-used cache, backed by a doubly-linked list.
- *
- * Usage is roughly:
- *
- * // Create a list. Zero-initialization is required.
- * static struct mru cache;
- * INIT_LIST_HEAD(&cache.list);
- *
- * // Add new item to the end of the list.
- * void *item;
- * ...
- * mru_append(&cache, item);
- *
- * // Mark an item as used, moving it to the front of the list.
- * mru_mark(&cache, item);
- *
- * // Reset the list to empty, cleaning up all resources.
- * mru_clear(&cache);
- *
- * Note that you SHOULD NOT call mru_mark() and then continue traversing the
- * list; it reorders the marked item to the front of the list, and therefore
- * you will begin traversing the whole list again.
- */
-
-struct mru {
- struct list_head list;
- void *item;
-};
-
-void mru_append(struct mru *head, void *item);
-void mru_mark(struct mru *head, struct mru *entry);
-void mru_clear(struct mru *head);
-
-#endif /* MRU_H */
diff --git a/packfile.c b/packfile.c
index 502d915..3882d0b 100644
--- a/packfile.c
+++ b/packfile.c
@@ -1,5 +1,5 @@
#include "cache.h"
-#include "mru.h"
+#include "list.h"
#include "pack.h"
#include "dir.h"
#include "mergesort.h"
@@ -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 = {{&packed_git_mru.list, &packed_git_mru.list}};
+LIST_HEAD(packed_git_mru);
#define SZ_FMT PRIuMAX
static inline uintmax_t sz_fmt(size_t s) { return s; }
@@ -859,9 +859,18 @@ static void prepare_packed_git_mru(void)
{
struct packed_git *p;
- mru_clear(&packed_git_mru);
- for (p = packed_git; p; p = p->next)
- mru_append(&packed_git_mru, p);
+ struct list_head *pos;
+ struct list_head *tmp;
+ list_for_each_safe(pos, tmp, &packed_git_mru)
+ list_del_init(pos);
+
+ INIT_LIST_HEAD(&packed_git_mru);
+
+ for (p = packed_git; p; p = p->next) {
+ struct packed_git *cur = xmalloc(sizeof(*packed_git));
+ cur = p;
+ list_add_tail(&cur->mru, &packed_git_mru);
+ }
}
static int prepare_packed_git_run_once = 0;
@@ -1830,10 +1839,11 @@ int find_pack_entry(const unsigned char *sha1, struct pack_entry *e)
if (!packed_git)
return 0;
- 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);
+ list_for_each(pos, &packed_git_mru) {
+ struct packed_git *p = list_entry(pos, struct packed_git, mru);
+ if (fill_pack_entry(sha1, e, p)) {
+ list_del(&p->mru);
+ list_add(&p->mru, &packed_git_mru);
return 1;
}
}
--
2.7.4
next reply other threads:[~2017-11-11 18:08 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-11 18:06 Gargi Sharma [this message]
2017-11-12 9:54 ` [PATCH] mru: Replace mru.[ch] with list.h implementation Jeff King
2017-11-12 9:59 ` Jeff King
2017-11-12 12:49 ` Gargi Sharma
2017-11-12 16:16 ` Jeff King
2017-12-12 14:07 ` Оля Тележная
-- strict thread matches above, loose matches on Subject: below --
2018-01-16 1:46 Gargi Sharma
2018-01-19 18:26 ` Christian Couder
2018-01-19 21:01 ` Junio C Hamano
2018-01-19 21:46 ` Jeff King
2018-01-19 23:39 ` Gargi Sharma
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1510423606-9616-1-git-send-email-gs051095@gmail.com \
--to=gs051095@gmail.com \
--cc=git@vger.kernel.org \
--cc=olyatelezhnaya@gmail.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).