From: "Chinmoy via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Chinmoy <chinmoy12c@gmail.com>,
Chinmoy Chakraborty <chinmoy12c@gmail.com>
Subject: [PATCH] cache-tree.c: remove implicit dependency on the_repository
Date: Thu, 25 Mar 2021 19:48:53 +0000 [thread overview]
Message-ID: <pull.915.git.1616701733901.gitgitgadget@gmail.com> (raw)
From: Chinmoy Chakraborty <chinmoy12c@gmail.com>
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`.
Signed-off-by: Chinmoy Chakraborty <chinmoy12c@gmail.com>
---
Replace the_repository with r
There are multiple files that try to reference the repository and
the_index directly. To follow a more object-oriented convention these
references should be replaced with r and index and passed through
functions.
Signed-off-by: Chinmoy Chakraborty chinmoy12c@gmail.com
Related issue
=============
#379
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-915%2Fchinmoy12c%2Fissue_379-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-915/chinmoy12c/issue_379-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/915
builtin/checkout.c | 3 ++-
cache-tree.c | 12 ++++++------
cache-tree.h | 6 ++++--
sequencer.c | 6 +++---
t/helper/test-dump-cache-tree.c | 2 +-
unpack-trees.c | 14 ++++++++------
6 files changed, 24 insertions(+), 19 deletions(-)
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 2d6550bc3c86..3bc630ef64e7 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -684,6 +684,7 @@ static int merge_working_tree(const struct checkout_opts *opts,
int ret;
struct lock_file lock_file = LOCK_INIT;
struct tree *new_tree;
+ struct repository *r = the_repository;
hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
if (read_cache_preload(NULL) < 0)
@@ -822,7 +823,7 @@ static int merge_working_tree(const struct checkout_opts *opts,
}
if (!cache_tree_fully_valid(active_cache_tree))
- cache_tree_update(&the_index, WRITE_TREE_SILENT | WRITE_TREE_REPAIR);
+ cache_tree_update(r, r->index, WRITE_TREE_SILENT | WRITE_TREE_REPAIR);
if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
die(_("unable to write new index file"));
diff --git a/cache-tree.c b/cache-tree.c
index add1f0771317..7ce33dc87cf7 100644
--- a/cache-tree.c
+++ b/cache-tree.c
@@ -433,7 +433,7 @@ static int update_one(struct cache_tree *it,
return i;
}
-int cache_tree_update(struct index_state *istate, int flags)
+int cache_tree_update(struct repository *r, struct index_state *istate, int flags)
{
int skip, i;
@@ -446,10 +446,10 @@ int cache_tree_update(struct index_state *istate, int flags)
istate->cache_tree = cache_tree();
trace_performance_enter();
- trace2_region_enter("cache_tree", "update", the_repository);
+ trace2_region_enter("cache_tree", "update", r);
i = update_one(istate->cache_tree, istate->cache, istate->cache_nr,
"", 0, &skip, flags);
- trace2_region_leave("cache_tree", "update", the_repository);
+ trace2_region_leave("cache_tree", "update", r);
trace_performance_leave("cache_tree_update");
if (i < 0)
return i;
@@ -638,7 +638,7 @@ static int write_index_as_tree_internal(struct object_id *oid,
cache_tree_valid = 0;
}
- if (!cache_tree_valid && cache_tree_update(index_state, flags) < 0)
+ if (!cache_tree_valid && cache_tree_update(the_repository, index_state, flags) < 0)
return WRITE_TREE_UNMERGED_INDEX;
if (prefix) {
@@ -746,13 +746,13 @@ void prime_cache_tree(struct repository *r,
struct index_state *istate,
struct tree *tree)
{
- trace2_region_enter("cache-tree", "prime_cache_tree", the_repository);
+ trace2_region_enter("cache-tree", "prime_cache_tree", r);
cache_tree_free(&istate->cache_tree);
istate->cache_tree = cache_tree();
prime_cache_tree_rec(r, istate->cache_tree, tree);
istate->cache_changed |= CACHE_TREE_CHANGED;
- trace2_region_leave("cache-tree", "prime_cache_tree", the_repository);
+ trace2_region_leave("cache-tree", "prime_cache_tree", r);
}
/*
diff --git a/cache-tree.h b/cache-tree.h
index 8efeccebfc9f..80cc38f176c2 100644
--- a/cache-tree.h
+++ b/cache-tree.h
@@ -33,7 +33,7 @@ void cache_tree_write(struct strbuf *, struct cache_tree *root);
struct cache_tree *cache_tree_read(const char *buffer, unsigned long size);
int cache_tree_fully_valid(struct cache_tree *);
-int cache_tree_update(struct index_state *, int);
+int cache_tree_update(struct repository *, struct index_state *, int);
void cache_tree_verify(struct repository *, struct index_state *);
/* 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
static inline int update_main_cache_tree(int flags)
{
+ struct repository *r = the_repository;
+
if (!the_index.cache_tree)
the_index.cache_tree = cache_tree();
- return cache_tree_update(&the_index, flags);
+ return cache_tree_update(r, r->index, flags);
}
#endif
diff --git a/sequencer.c b/sequencer.c
index 848204d3dc3f..dee2d2aac5d6 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -677,10 +677,10 @@ static int do_recursive_merge(struct repository *r,
return !clean;
}
-static struct object_id *get_cache_tree_oid(struct index_state *istate)
+static struct object_id *get_cache_tree_oid(struct repository *r, struct index_state *istate)
{
if (!cache_tree_fully_valid(istate->cache_tree))
- if (cache_tree_update(istate, 0)) {
+ if (cache_tree_update(r, istate, 0)) {
error(_("unable to update cache tree"));
return NULL;
}
@@ -710,7 +710,7 @@ static int is_index_unchanged(struct repository *r)
if (parse_commit(head_commit))
return -1;
- if (!(cache_tree_oid = get_cache_tree_oid(istate)))
+ if (!(cache_tree_oid = get_cache_tree_oid(r, istate)))
return -1;
return oideq(cache_tree_oid, get_commit_tree_oid(head_commit));
diff --git a/t/helper/test-dump-cache-tree.c b/t/helper/test-dump-cache-tree.c
index 6a3f88f5f5d4..e6d57f9900f6 100644
--- a/t/helper/test-dump-cache-tree.c
+++ b/t/helper/test-dump-cache-tree.c
@@ -64,6 +64,6 @@ int cmd__dump_cache_tree(int ac, const char **av)
die("unable to read index file");
istate = the_index;
istate.cache_tree = another;
- cache_tree_update(&istate, WRITE_TREE_DRY_RUN);
+ cache_tree_update(the_repository, &istate, WRITE_TREE_DRY_RUN);
return dump_cache_tree(active_cache_tree, another, "");
}
diff --git a/unpack-trees.c b/unpack-trees.c
index 9af8e796b338..54bf9a7300b8 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c
@@ -1574,12 +1574,13 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
static struct cache_entry *dfc;
struct pattern_list pl;
int free_pattern_list = 0;
+ struct repository *r = the_repository;
if (len > MAX_UNPACK_TREES)
die("unpack_trees takes at most %d trees", MAX_UNPACK_TREES);
trace_performance_enter();
- trace2_region_enter("unpack_trees", "unpack_trees", the_repository);
+ trace2_region_enter("unpack_trees", "unpack_trees", r);
if (!core_apply_sparse_checkout || !o->update)
o->skip_sparse_checkout = 1;
@@ -1654,9 +1655,9 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
}
trace_performance_enter();
- trace2_region_enter("unpack_trees", "traverse_trees", the_repository);
+ trace2_region_enter("unpack_trees", "traverse_trees", r);
ret = traverse_trees(o->src_index, len, t, &info);
- trace2_region_leave("unpack_trees", "traverse_trees", the_repository);
+ trace2_region_leave("unpack_trees", "traverse_trees", r);
trace_performance_leave("traverse_trees");
if (ret < 0)
goto return_failed;
@@ -1724,9 +1725,10 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
move_index_extensions(&o->result, o->src_index);
if (!ret) {
if (git_env_bool("GIT_TEST_CHECK_CACHE_TREE", 0))
- cache_tree_verify(the_repository, &o->result);
+ cache_tree_verify(r, &o->result);
if (!cache_tree_fully_valid(o->result.cache_tree))
- cache_tree_update(&o->result,
+ cache_tree_update(r,
+ &o->result,
WRITE_TREE_SILENT |
WRITE_TREE_REPAIR);
}
@@ -1742,7 +1744,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
done:
if (free_pattern_list)
clear_pattern_list(&pl);
- trace2_region_leave("unpack_trees", "unpack_trees", the_repository);
+ trace2_region_leave("unpack_trees", "unpack_trees", r);
trace_performance_leave("unpack_trees");
return ret;
base-commit: 142430338477d9d1bb25be66267225fb58498d92
--
gitgitgadget
next reply other threads:[~2021-03-25 19:49 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-25 19:48 Chinmoy via GitGitGadget [this message]
2021-03-25 20:31 ` [PATCH] cache-tree.c: remove implicit dependency on the_repository Derrick Stolee
2021-03-26 6:49 ` Chinmoy Chakraborty
2021-03-26 7:54 ` Chinmoy Chakraborty
2021-03-26 15:35 ` [PATCH v2] " Chinmoy via GitGitGadget
2021-04-03 15:57 ` [PATCH v3] " Chinmoy via GitGitGadget
2021-04-04 1:49 ` Junio C Hamano
2021-04-04 5:11 ` Chinmoy Chakraborty
2021-04-04 5:36 ` Junio C Hamano
2021-04-04 5:18 ` Chinmoy Chakraborty
2021-04-04 6:09 ` Junio C Hamano
2021-04-05 13:08 ` Derrick Stolee
2021-04-05 17:48 ` Junio C Hamano
2021-04-07 6:54 ` [PATCH v4] " Chinmoy via GitGitGadget
2021-04-07 23:03 ` Junio C Hamano
2021-04-08 3:56 ` Chinmoy Chakraborty
2021-04-08 13:23 ` Junio C Hamano
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.915.git.1616701733901.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=chinmoy12c@gmail.com \
--cc=git@vger.kernel.org \
/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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.