[PATCH v2 01/16] pack v4: allocate dicts from the beginning
- From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
- Date
- Sep 9, 2013, 13:57 UTC
- Message-ID
- <1378735087-4813-2-git-send-email-pclouds@gmail.com>
- In-Reply-To
- <1378735087-4813-1-git-send-email-pclouds@gmail.com>
commit_ident_table and tree_path_table are local to packv4-create.c and test-packv4.c. Move them out of add_*_dict_entries so add_*_dict_entries can be exported to pack-objects.c
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> --- packv4-create.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-)
diff --git a/packv4-create.c b/packv4-create.c index 38fa594..dbc2a03 100644 --- a/packv4-create.c +++ b/packv4-create.c @@ -181,14 +181,12 @@ static char *get_nameend_and_tz(char *from, int *tz_val) return end; } -static int add_commit_dict_entries(void *buf, unsigned long size) +int add_commit_dict_entries(struct dict_table *commit_ident_table, + void *buf, unsigned long size) { char *name, *end = NULL; int tz_val; - if (!commit_ident_table) - commit_ident_table = create_dict_table(); - /* parse and add author info */ name = strstr(buf, "\nauthor "); if (name) { @@ -212,14 +210,12 @@ static int add_commit_dict_entries(void *buf, unsigned long size) return 0; } -static int add_tree_dict_entries(void *buf, unsigned long size) +static int add_tree_dict_entries(struct dict_table *tree_path_table, + void *buf, unsigned long size) { struct tree_desc desc; struct name_entry name_entry; - if (!tree_path_table) - tree_path_table = create_dict_table(); - init_tree_desc(&desc, buf, size); while (tree_entry(&desc, &name_entry)) { int pathlen = tree_entry_len(&name_entry); @@ -659,6 +655,9 @@ static int create_pack_dictionaries(struct packed_git *p, struct progress *progress_state; unsigned int i; + commit_ident_table = create_dict_table(); + tree_path_table = create_dict_table(); + progress_state = start_progress("Scanning objects", p->num_objects); for (i = 0; i < p->num_objects; i++) { struct pack_idx_entry *obj = obj_list[i]; @@ -666,7 +665,8 @@ static int create_pack_dictionaries(struct packed_git *p, enum object_type type; unsigned long size; struct object_info oi = {}; - int (*add_dict_entries)(void *, unsigned long); + int (*add_dict_entries)(struct dict_table *, void *, unsigned long); + struct dict_table *dict; display_progress(progress_state, i+1); @@ -679,9 +679,11 @@ static int create_pack_dictionaries(struct packed_git *p, switch (type) { case OBJ_COMMIT: add_dict_entries = add_commit_dict_entries; + dict = commit_ident_table; break; case OBJ_TREE: add_dict_entries = add_tree_dict_entries; + dict = tree_path_table; break; default: continue; @@ -693,7 +695,7 @@ static int create_pack_dictionaries(struct packed_git *p, if (check_sha1_signature(obj->sha1, data, size, typename(type))) die("packed %s from %s is corrupt", sha1_to_hex(obj->sha1), p->pack_name); - if (add_dict_entries(data, size) < 0) + if (add_dict_entries(dict, data, size) < 0) die("can't process %s object %s", typename(type), sha1_to_hex(obj->sha1)); free(data);
-- 1.8.2.83.gc99314b