From: "brian m. carlson" <sandals@crustytoothpaste.net>
To: git@vger.kernel.org
Cc: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>,
"Junio C Hamano" <gitster@pobox.com>,
"Eric Sunshine" <sunshine@sunshineco.com>,
"Martin Ågren" <martin.agren@gmail.com>,
"SZEDER Gábor" <szeder.dev@gmail.com>
Subject: [PATCH v2 17/42] pack-redundant: convert linked lists to use struct object_id
Date: Wed, 2 May 2018 00:25:45 +0000 [thread overview]
Message-ID: <20180502002610.915892-18-sandals@crustytoothpaste.net> (raw)
In-Reply-To: <20180502002610.915892-1-sandals@crustytoothpaste.net>
Convert struct llist_item and the rest of the linked list code to use
struct object_id. Add a use of GIT_MAX_HEXSZ to avoid a dependency on a
hard-coded constant.
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
---
builtin/pack-redundant.c | 50 +++++++++++++++++++++-------------------
1 file changed, 26 insertions(+), 24 deletions(-)
diff --git a/builtin/pack-redundant.c b/builtin/pack-redundant.c
index 0fe1ff3cb7..0494dceff7 100644
--- a/builtin/pack-redundant.c
+++ b/builtin/pack-redundant.c
@@ -20,7 +20,7 @@ static int load_all_packs, verbose, alt_odb;
struct llist_item {
struct llist_item *next;
- const unsigned char *sha1;
+ const struct object_id *oid;
};
static struct llist {
struct llist_item *front;
@@ -90,14 +90,14 @@ static struct llist * llist_copy(struct llist *list)
return ret;
new_item = ret->front = llist_item_get();
- new_item->sha1 = list->front->sha1;
+ new_item->oid = list->front->oid;
old_item = list->front->next;
while (old_item) {
prev = new_item;
new_item = llist_item_get();
prev->next = new_item;
- new_item->sha1 = old_item->sha1;
+ new_item->oid = old_item->oid;
old_item = old_item->next;
}
new_item->next = NULL;
@@ -108,10 +108,10 @@ static struct llist * llist_copy(struct llist *list)
static inline struct llist_item *llist_insert(struct llist *list,
struct llist_item *after,
- const unsigned char *sha1)
+ const struct object_id *oid)
{
struct llist_item *new_item = llist_item_get();
- new_item->sha1 = sha1;
+ new_item->oid = oid;
new_item->next = NULL;
if (after != NULL) {
@@ -131,21 +131,21 @@ static inline struct llist_item *llist_insert(struct llist *list,
}
static inline struct llist_item *llist_insert_back(struct llist *list,
- const unsigned char *sha1)
+ const struct object_id *oid)
{
- return llist_insert(list, list->back, sha1);
+ return llist_insert(list, list->back, oid);
}
static inline struct llist_item *llist_insert_sorted_unique(struct llist *list,
- const unsigned char *sha1, struct llist_item *hint)
+ const struct object_id *oid, struct llist_item *hint)
{
struct llist_item *prev = NULL, *l;
l = (hint == NULL) ? list->front : hint;
while (l) {
- int cmp = hashcmp(l->sha1, sha1);
+ int cmp = oidcmp(l->oid, oid);
if (cmp > 0) { /* we insert before this entry */
- return llist_insert(list, prev, sha1);
+ return llist_insert(list, prev, oid);
}
if (!cmp) { /* already exists */
return l;
@@ -154,11 +154,11 @@ static inline struct llist_item *llist_insert_sorted_unique(struct llist *list,
l = l->next;
}
/* insert at the end */
- return llist_insert_back(list, sha1);
+ return llist_insert_back(list, oid);
}
/* returns a pointer to an item in front of sha1 */
-static inline struct llist_item * llist_sorted_remove(struct llist *list, const unsigned char *sha1, struct llist_item *hint)
+static inline struct llist_item * llist_sorted_remove(struct llist *list, const struct object_id *oid, struct llist_item *hint)
{
struct llist_item *prev, *l;
@@ -166,7 +166,7 @@ static inline struct llist_item * llist_sorted_remove(struct llist *list, const
l = (hint == NULL) ? list->front : hint;
prev = NULL;
while (l) {
- int cmp = hashcmp(l->sha1, sha1);
+ int cmp = oidcmp(l->oid, oid);
if (cmp > 0) /* not in list, since sorted */
return prev;
if (!cmp) { /* found */
@@ -201,7 +201,7 @@ static void llist_sorted_difference_inplace(struct llist *A,
b = B->front;
while (b) {
- hint = llist_sorted_remove(A, b->sha1, hint);
+ hint = llist_sorted_remove(A, b->oid, hint);
b = b->next;
}
}
@@ -268,9 +268,11 @@ static void cmp_two_packs(struct pack_list *p1, struct pack_list *p2)
/* cmp ~ p1 - p2 */
if (cmp == 0) {
p1_hint = llist_sorted_remove(p1->unique_objects,
- p1_base + p1_off, p1_hint);
+ (const struct object_id *)(p1_base + p1_off),
+ p1_hint);
p2_hint = llist_sorted_remove(p2->unique_objects,
- p1_base + p1_off, p2_hint);
+ (const struct object_id *)(p1_base + p1_off),
+ p2_hint);
p1_off += p1_step;
p2_off += p2_step;
continue;
@@ -501,7 +503,7 @@ static void load_all_objects(void)
l = pl->all_objects->front;
while (l) {
hint = llist_insert_sorted_unique(all_objects,
- l->sha1, hint);
+ l->oid, hint);
l = l->next;
}
pl = pl->next;
@@ -562,7 +564,7 @@ static struct pack_list * add_pack(struct packed_git *p)
base += 256 * 4 + ((p->index_version < 2) ? 4 : 8);
step = the_hash_algo->rawsz + ((p->index_version < 2) ? 4 : 0);
while (off < p->num_objects * step) {
- llist_insert_back(l.all_objects, base + off);
+ llist_insert_back(l.all_objects, (const struct object_id *)(base + off));
off += step;
}
/* this list will be pruned in cmp_two_packs later */
@@ -603,8 +605,8 @@ int cmd_pack_redundant(int argc, const char **argv, const char *prefix)
int i;
struct pack_list *min, *red, *pl;
struct llist *ignore;
- unsigned char *sha1;
- char buf[42]; /* 40 byte sha1 + \n + \0 */
+ struct object_id *oid;
+ char buf[GIT_MAX_HEXSZ + 2]; /* hex hash + \n + \0 */
if (argc == 2 && !strcmp(argv[1], "-h"))
usage(pack_redundant_usage);
@@ -652,10 +654,10 @@ int cmd_pack_redundant(int argc, const char **argv, const char *prefix)
llist_init(&ignore);
if (!isatty(0)) {
while (fgets(buf, sizeof(buf), stdin)) {
- sha1 = xmalloc(20);
- if (get_sha1_hex(buf, sha1))
- die("Bad sha1 on stdin: %s", buf);
- llist_insert_sorted_unique(ignore, sha1, NULL);
+ oid = xmalloc(sizeof(*oid));
+ if (get_oid_hex(buf, oid))
+ die("Bad object ID on stdin: %s", buf);
+ llist_insert_sorted_unique(ignore, oid, NULL);
}
}
llist_sorted_difference_inplace(all_objects, ignore);
next prev parent reply other threads:[~2018-05-02 0:26 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-02 0:25 [PATCH v2 00/42] object_id part 13 brian m. carlson
2018-05-02 0:25 ` [PATCH v2 01/42] cache: add a function to read an object ID from a buffer brian m. carlson
2018-05-02 0:25 ` [PATCH v2 02/42] server-info: remove unused members from struct pack_info brian m. carlson
2018-05-02 0:25 ` [PATCH v2 03/42] Remove unused member in struct object_context brian m. carlson
2018-05-02 0:25 ` [PATCH v2 04/42] packfile: remove unused member from struct pack_entry brian m. carlson
2018-05-02 0:25 ` [PATCH v2 05/42] packfile: convert has_sha1_pack to object_id brian m. carlson
2018-05-02 0:25 ` [PATCH v2 06/42] sha1-file: convert freshen functions " brian m. carlson
2018-05-02 0:25 ` [PATCH v2 07/42] packfile: convert find_pack_entry " brian m. carlson
2018-05-02 0:25 ` [PATCH v2 08/42] packfile: abstract away hash constant values brian m. carlson
2018-05-02 0:25 ` [PATCH v2 09/42] pack-objects: abstract away hash algorithm brian m. carlson
2018-05-02 0:25 ` [PATCH v2 10/42] pack-redundant: " brian m. carlson
2018-05-02 0:25 ` [PATCH v2 11/42] tree-walk: avoid hard-coded 20 constant brian m. carlson
2018-05-02 0:25 ` [PATCH v2 12/42] tree-walk: convert get_tree_entry_follow_symlinks to object_id brian m. carlson
2018-05-02 0:25 ` [PATCH v2 13/42] fsck: convert static functions to struct object_id brian m. carlson
2018-05-02 0:25 ` [PATCH v2 14/42] submodule-config: convert structures to object_id brian m. carlson
2018-05-02 0:25 ` [PATCH v2 15/42] split-index: convert struct split_index " brian m. carlson
2018-05-02 0:25 ` [PATCH v2 16/42] Update struct index_state to use struct object_id brian m. carlson
2018-05-02 0:25 ` brian m. carlson [this message]
2018-05-02 0:25 ` [PATCH v2 18/42] index-pack: abstract away hash function constant brian m. carlson
2018-05-02 0:25 ` [PATCH v2 19/42] commit: convert uses of get_sha1_hex to get_oid_hex brian m. carlson
2018-05-02 0:25 ` [PATCH v2 20/42] dir: convert struct untracked_cache_dir to object_id brian m. carlson
2018-05-02 0:25 ` [PATCH v2 21/42] http: eliminate hard-coded constants brian m. carlson
2018-05-02 0:25 ` [PATCH v2 22/42] revision: replace use of " brian m. carlson
2018-05-02 0:25 ` [PATCH v2 23/42] upload-pack: replace use of several " brian m. carlson
2018-05-02 0:25 ` [PATCH v2 24/42] diff: specify abbreviation size in terms of the_hash_algo brian m. carlson
2018-05-02 0:25 ` [PATCH v2 25/42] builtin/receive-pack: avoid hard-coded constants for push certs brian m. carlson
2018-05-02 0:25 ` [PATCH v2 26/42] sha1-file: add functions for hex empty tree and blob OIDs brian m. carlson
2018-05-02 0:25 ` [PATCH v2 27/42] builtin/am: convert uses of EMPTY_TREE_SHA1_BIN to the_hash_algo brian m. carlson
2018-05-02 0:25 ` [PATCH v2 28/42] builtin/merge: switch tree functions to use object_id brian m. carlson
2018-05-02 0:25 ` [PATCH v2 29/42] merge: convert empty tree constant to the_hash_algo brian m. carlson
2018-05-02 0:25 ` [PATCH v2 30/42] sequencer: convert one use of EMPTY_TREE_SHA1_HEX brian m. carlson
2018-05-02 0:25 ` [PATCH v2 31/42] submodule: convert several uses " brian m. carlson
2018-05-02 0:26 ` [PATCH v2 32/42] wt-status: convert two " brian m. carlson
2018-05-02 0:26 ` [PATCH v2 33/42] builtin/receive-pack: convert one use " brian m. carlson
2018-05-02 0:26 ` [PATCH v2 34/42] builtin/reset: convert use of EMPTY_TREE_SHA1_BIN brian m. carlson
2018-05-02 0:26 ` [PATCH v2 35/42] sha1_file: convert cached object code to struct object_id brian m. carlson
2018-05-02 0:26 ` [PATCH v2 36/42] cache-tree: use is_empty_tree_oid brian m. carlson
2018-05-02 0:26 ` [PATCH v2 37/42] sequencer: use the_hash_algo for empty tree object ID brian m. carlson
2018-05-02 0:26 ` [PATCH v2 38/42] dir: use the_hash_algo for empty blob " brian m. carlson
2018-05-02 0:26 ` [PATCH v2 39/42] sha1_file: only expose empty object constants through git_hash_algo brian m. carlson
2018-05-02 0:26 ` [PATCH v2 40/42] Update shell scripts to compute empty tree object ID brian m. carlson
2018-05-02 0:26 ` [PATCH v2 41/42] add--interactive: compute the empty tree value brian m. carlson
2018-05-02 0:26 ` [PATCH v2 42/42] merge-one-file: compute empty blob object ID brian m. carlson
2018-05-02 15:32 ` [PATCH v2 00/42] object_id part 13 Duy Nguyen
2018-05-02 23:42 ` brian m. carlson
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=20180502002610.915892-18-sandals@crustytoothpaste.net \
--to=sandals@crustytoothpaste.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=martin.agren@gmail.com \
--cc=pclouds@gmail.com \
--cc=sunshine@sunshineco.com \
--cc=szeder.dev@gmail.com \
/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).