Skip to content

Commit 682029a

Browse files
committed
cache-tree.c: remove implicit dependency on the_repository
This kills the_repository dependency in cache_tree_update(), but for unpack_trees(), they still assume the_repository (which also means the_index). Unfortunately the widespread use of unpack_trees() will make it hard to make the conversion now. The `update_main_cache_tree()` method uses `cache_tree_update(r, r->index, flags)`. `r->index` is easily deduced from `r` but the signature of `cache_tree_update()` is not changed to take `struct repository *` instead of `struct index_state *` because there can be temporary indexes. Therefore, one might want to update the cache tree for an index other than `r->index`. This commit also fixes the `sparse-index.c` file in which the `convert_to_sparse()` and `ensure_full_index()` method use `cache_tree_update()`. Signed-off-by: Chinmoy Chakraborty <[email protected]>
1 parent bcf0a58 commit 682029a

File tree

7 files changed

+34
-27
lines changed

7 files changed

+34
-27
lines changed

builtin/checkout.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -684,6 +684,7 @@ static int merge_working_tree(const struct checkout_opts *opts,
684684
int ret;
685685
struct lock_file lock_file = LOCK_INIT;
686686
struct tree *new_tree;
687+
struct repository *r = the_repository;
687688

688689
hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
689690
if (read_cache_preload(NULL) < 0)
@@ -822,7 +823,7 @@ static int merge_working_tree(const struct checkout_opts *opts,
822823
}
823824

824825
if (!cache_tree_fully_valid(active_cache_tree))
825-
cache_tree_update(&the_index, WRITE_TREE_SILENT | WRITE_TREE_REPAIR);
826+
cache_tree_update(r, r->index, WRITE_TREE_SILENT | WRITE_TREE_REPAIR);
826827

827828
if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
828829
die(_("unable to write new index file"));

cache-tree.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,7 @@ static int update_one(struct cache_tree *it,
452452
return i;
453453
}
454454

455-
int cache_tree_update(struct index_state *istate, int flags)
455+
int cache_tree_update(struct repository *r, struct index_state *istate, int flags)
456456
{
457457
int skip, i;
458458

@@ -467,10 +467,10 @@ int cache_tree_update(struct index_state *istate, int flags)
467467
istate->cache_tree = cache_tree();
468468

469469
trace_performance_enter();
470-
trace2_region_enter("cache_tree", "update", the_repository);
470+
trace2_region_enter("cache_tree", "update", r);
471471
i = update_one(istate->cache_tree, istate->cache, istate->cache_nr,
472472
"", 0, &skip, flags);
473-
trace2_region_leave("cache_tree", "update", the_repository);
473+
trace2_region_leave("cache_tree", "update", r);
474474
trace_performance_leave("cache_tree_update");
475475
if (i < 0)
476476
return i;
@@ -659,7 +659,7 @@ static int write_index_as_tree_internal(struct object_id *oid,
659659
cache_tree_valid = 0;
660660
}
661661

662-
if (!cache_tree_valid && cache_tree_update(index_state, flags) < 0)
662+
if (!cache_tree_valid && cache_tree_update(the_repository, index_state, flags) < 0)
663663
return WRITE_TREE_UNMERGED_INDEX;
664664

665665
if (prefix) {
@@ -767,13 +767,13 @@ void prime_cache_tree(struct repository *r,
767767
struct index_state *istate,
768768
struct tree *tree)
769769
{
770-
trace2_region_enter("cache-tree", "prime_cache_tree", the_repository);
770+
trace2_region_enter("cache-tree", "prime_cache_tree", r);
771771
cache_tree_free(&istate->cache_tree);
772772
istate->cache_tree = cache_tree();
773773

774774
prime_cache_tree_rec(r, istate->cache_tree, tree);
775775
istate->cache_changed |= CACHE_TREE_CHANGED;
776-
trace2_region_leave("cache-tree", "prime_cache_tree", the_repository);
776+
trace2_region_leave("cache-tree", "prime_cache_tree", r);
777777
}
778778

779779
/*

cache-tree.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ void cache_tree_write(struct strbuf *, struct cache_tree *root);
3333
struct cache_tree *cache_tree_read(const char *buffer, unsigned long size);
3434

3535
int cache_tree_fully_valid(struct cache_tree *);
36-
int cache_tree_update(struct index_state *, int);
36+
int cache_tree_update(struct repository *r, struct index_state *, int);
3737
void cache_tree_verify(struct repository *, struct index_state *);
3838

3939
/* bitmasks to write_index_as_tree flags */
@@ -62,9 +62,11 @@ static inline int write_cache_as_tree(struct object_id *oid, int flags, const ch
6262

6363
static inline int update_main_cache_tree(int flags)
6464
{
65+
struct repository *r = the_repository;
66+
6567
if (!the_index.cache_tree)
6668
the_index.cache_tree = cache_tree();
67-
return cache_tree_update(&the_index, flags);
69+
return cache_tree_update(r, r->index, flags);
6870
}
6971
#endif
7072

sequencer.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -677,10 +677,10 @@ static int do_recursive_merge(struct repository *r,
677677
return !clean;
678678
}
679679

680-
static struct object_id *get_cache_tree_oid(struct index_state *istate)
680+
static struct object_id *get_cache_tree_oid(struct repository *r, struct index_state *istate)
681681
{
682682
if (!cache_tree_fully_valid(istate->cache_tree))
683-
if (cache_tree_update(istate, 0)) {
683+
if (cache_tree_update(r,istate, 0)) {
684684
error(_("unable to update cache tree"));
685685
return NULL;
686686
}
@@ -710,7 +710,7 @@ static int is_index_unchanged(struct repository *r)
710710
if (parse_commit(head_commit))
711711
return -1;
712712

713-
if (!(cache_tree_oid = get_cache_tree_oid(istate)))
713+
if (!(cache_tree_oid = get_cache_tree_oid(r,istate)))
714714
return -1;
715715

716716
return oideq(cache_tree_oid, get_commit_tree_oid(head_commit));

sparse-index.c

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -135,12 +135,14 @@ int set_sparse_index_config(struct repository *repo, int enable)
135135
int convert_to_sparse(struct index_state *istate)
136136
{
137137
int test_env;
138+
struct repository *r = the_repository;
139+
138140
if (istate->split_index || istate->sparse_index ||
139141
!core_apply_sparse_checkout || !core_sparse_checkout_cone)
140142
return 0;
141143

142144
if (!istate->repo)
143-
istate->repo = the_repository;
145+
istate->repo = r;
144146

145147
/*
146148
* If GIT_TEST_SPARSE_INDEX=1, then trigger extensions.sparseIndex
@@ -169,7 +171,7 @@ int convert_to_sparse(struct index_state *istate)
169171
return -1;
170172
}
171173

172-
if (cache_tree_update(istate, 0)) {
174+
if (cache_tree_update(r, istate, 0)) {
173175
warning(_("unable to update cache-tree, staying full"));
174176
return -1;
175177
}
@@ -183,7 +185,7 @@ int convert_to_sparse(struct index_state *istate)
183185

184186
/* Clear and recompute the cache-tree */
185187
cache_tree_free(&istate->cache_tree);
186-
cache_tree_update(istate, 0);
188+
cache_tree_update(r, istate, 0);
187189

188190
istate->sparse_index = 1;
189191
trace2_region_leave("index", "convert_to_sparse", istate->repo);
@@ -224,12 +226,13 @@ void ensure_full_index(struct index_state *istate)
224226
int i;
225227
struct index_state *full;
226228
struct strbuf base = STRBUF_INIT;
229+
struct repository *r = the_repository;
227230

228231
if (!istate || !istate->sparse_index)
229232
return;
230233

231234
if (!istate->repo)
232-
istate->repo = the_repository;
235+
istate->repo = r;
233236

234237
trace2_region_enter("index", "ensure_full_index", istate->repo);
235238

@@ -287,7 +290,7 @@ void ensure_full_index(struct index_state *istate)
287290

288291
/* Clear and recompute the cache-tree */
289292
cache_tree_free(&istate->cache_tree);
290-
cache_tree_update(istate, 0);
293+
cache_tree_update(r, istate, 0);
291294

292295
trace2_region_leave("index", "ensure_full_index", istate->repo);
293296
}

t/helper/test-dump-cache-tree.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,6 @@ int cmd__dump_cache_tree(int ac, const char **av)
6464
die("unable to read index file");
6565
istate = the_index;
6666
istate.cache_tree = another;
67-
cache_tree_update(&istate, WRITE_TREE_DRY_RUN);
67+
cache_tree_update(the_repository, &istate, WRITE_TREE_DRY_RUN);
6868
return dump_cache_tree(active_cache_tree, another, "");
6969
}

unpack-trees.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1571,7 +1571,7 @@ static int verify_absent(const struct cache_entry *,
15711571
*/
15721572
int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options *o)
15731573
{
1574-
struct repository *repo = the_repository;
1574+
struct repository *r = the_repository;
15751575
int i, ret;
15761576
static struct cache_entry *dfc;
15771577
struct pattern_list pl;
@@ -1581,10 +1581,10 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
15811581
die("unpack_trees takes at most %d trees", MAX_UNPACK_TREES);
15821582

15831583
trace_performance_enter();
1584-
trace2_region_enter("unpack_trees", "unpack_trees", the_repository);
1584+
trace2_region_enter("unpack_trees", "unpack_trees", r);
15851585

1586-
prepare_repo_settings(repo);
1587-
if (repo->settings.command_requires_full_index) {
1586+
prepare_repo_settings(r);
1587+
if (r->settings.command_requires_full_index) {
15881588
ensure_full_index(o->src_index);
15891589
ensure_full_index(o->dst_index);
15901590
}
@@ -1662,9 +1662,9 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
16621662
}
16631663

16641664
trace_performance_enter();
1665-
trace2_region_enter("unpack_trees", "traverse_trees", the_repository);
1665+
trace2_region_enter("unpack_trees", "traverse_trees", r);
16661666
ret = traverse_trees(o->src_index, len, t, &info);
1667-
trace2_region_leave("unpack_trees", "traverse_trees", the_repository);
1667+
trace2_region_leave("unpack_trees", "traverse_trees", r);
16681668
trace_performance_leave("traverse_trees");
16691669
if (ret < 0)
16701670
goto return_failed;
@@ -1732,9 +1732,10 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
17321732
move_index_extensions(&o->result, o->src_index);
17331733
if (!ret) {
17341734
if (git_env_bool("GIT_TEST_CHECK_CACHE_TREE", 0))
1735-
cache_tree_verify(the_repository, &o->result);
1735+
cache_tree_verify(r, &o->result);
17361736
if (!cache_tree_fully_valid(o->result.cache_tree))
1737-
cache_tree_update(&o->result,
1737+
cache_tree_update(r,
1738+
&o->result,
17381739
WRITE_TREE_SILENT |
17391740
WRITE_TREE_REPAIR);
17401741
}
@@ -1750,7 +1751,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
17501751
done:
17511752
if (free_pattern_list)
17521753
clear_pattern_list(&pl);
1753-
trace2_region_leave("unpack_trees", "unpack_trees", the_repository);
1754+
trace2_region_leave("unpack_trees", "unpack_trees", r);
17541755
trace_performance_leave("unpack_trees");
17551756
return ret;
17561757

0 commit comments

Comments
 (0)