Skip to content

Commit 9616882

Browse files
matheustavaresgitster
authored andcommitted
make_transient_cache_entry(): optionally alloc from mem_pool
Allow make_transient_cache_entry() to optionally receive a mem_pool struct in which it should allocate the entry. This will be used in the following patch, to store some transient entries which should persist until parallel checkout finishes. Signed-off-by: Matheus Tavares <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 68e66f2 commit 9616882

File tree

6 files changed

+23
-13
lines changed

6 files changed

+23
-13
lines changed

builtin/checkout--worker.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ static void packet_to_pc_item(const char *buffer, int len,
3939
}
4040

4141
memset(pc_item, 0, sizeof(*pc_item));
42-
pc_item->ce = make_empty_transient_cache_entry(fixed_portion->name_len);
42+
pc_item->ce = make_empty_transient_cache_entry(fixed_portion->name_len, NULL);
4343
pc_item->ce->ce_namelen = fixed_portion->name_len;
4444
pc_item->ce->ce_mode = fixed_portion->ce_mode;
4545
memcpy(pc_item->ce->name, variant, pc_item->ce->ce_namelen);

builtin/checkout.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ static int checkout_merged(int pos, const struct checkout *state, int *nr_checko
291291
if (write_object_file(result_buf.ptr, result_buf.size, blob_type, &oid))
292292
die(_("Unable to add merge result for '%s'"), path);
293293
free(result_buf.ptr);
294-
ce = make_transient_cache_entry(mode, &oid, path, 2);
294+
ce = make_transient_cache_entry(mode, &oid, path, 2, NULL);
295295
if (!ce)
296296
die(_("make_cache_entry failed for path '%s'"), path);
297297
status = checkout_entry(ce, state, NULL, nr_checkouts);

builtin/difftool.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ static int checkout_path(unsigned mode, struct object_id *oid,
323323
struct cache_entry *ce;
324324
int ret;
325325

326-
ce = make_transient_cache_entry(mode, oid, path, 0);
326+
ce = make_transient_cache_entry(mode, oid, path, 0, NULL);
327327
ret = checkout_entry(ce, state, NULL, NULL);
328328

329329
discard_cache_entry(ce);

cache.h

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -356,16 +356,20 @@ struct cache_entry *make_empty_cache_entry(struct index_state *istate,
356356
size_t name_len);
357357

358358
/*
359-
* Create a cache_entry that is not intended to be added to an index.
360-
* Caller is responsible for discarding the cache_entry
361-
* with `discard_cache_entry`.
359+
* Create a cache_entry that is not intended to be added to an index. If
360+
* `ce_mem_pool` is not NULL, the entry is allocated within the given memory
361+
* pool. Caller is responsible for discarding "loose" entries with
362+
* `discard_cache_entry()` and the memory pool with
363+
* `mem_pool_discard(ce_mem_pool, should_validate_cache_entries())`.
362364
*/
363365
struct cache_entry *make_transient_cache_entry(unsigned int mode,
364366
const struct object_id *oid,
365367
const char *path,
366-
int stage);
368+
int stage,
369+
struct mem_pool *ce_mem_pool);
367370

368-
struct cache_entry *make_empty_transient_cache_entry(size_t name_len);
371+
struct cache_entry *make_empty_transient_cache_entry(size_t len,
372+
struct mem_pool *ce_mem_pool);
369373

370374
/*
371375
* Discard cache entry.

read-cache.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -813,8 +813,11 @@ struct cache_entry *make_empty_cache_entry(struct index_state *istate, size_t le
813813
return mem_pool__ce_calloc(find_mem_pool(istate), len);
814814
}
815815

816-
struct cache_entry *make_empty_transient_cache_entry(size_t len)
816+
struct cache_entry *make_empty_transient_cache_entry(size_t len,
817+
struct mem_pool *ce_mem_pool)
817818
{
819+
if (ce_mem_pool)
820+
return mem_pool__ce_calloc(ce_mem_pool, len);
818821
return xcalloc(1, cache_entry_size(len));
819822
}
820823

@@ -848,8 +851,11 @@ struct cache_entry *make_cache_entry(struct index_state *istate,
848851
return ret;
849852
}
850853

851-
struct cache_entry *make_transient_cache_entry(unsigned int mode, const struct object_id *oid,
852-
const char *path, int stage)
854+
struct cache_entry *make_transient_cache_entry(unsigned int mode,
855+
const struct object_id *oid,
856+
const char *path,
857+
int stage,
858+
struct mem_pool *ce_mem_pool)
853859
{
854860
struct cache_entry *ce;
855861
int len;
@@ -860,7 +866,7 @@ struct cache_entry *make_transient_cache_entry(unsigned int mode, const struct o
860866
}
861867

862868
len = strlen(path);
863-
ce = make_empty_transient_cache_entry(len);
869+
ce = make_empty_transient_cache_entry(len, ce_mem_pool);
864870

865871
oidcpy(&ce->oid, oid);
866872
memcpy(ce->name, path, len);

unpack-trees.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1034,7 +1034,7 @@ static struct cache_entry *create_ce_entry(const struct traverse_info *info,
10341034
size_t len = traverse_path_len(info, tree_entry_len(n));
10351035
struct cache_entry *ce =
10361036
is_transient ?
1037-
make_empty_transient_cache_entry(len) :
1037+
make_empty_transient_cache_entry(len, NULL) :
10381038
make_empty_cache_entry(istate, len);
10391039

10401040
ce->ce_mode = create_ce_mode(n->mode);

0 commit comments

Comments
 (0)