From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH 24/24] blame.c: remove implicit dependency on the_index
Date: Mon, 13 Aug 2018 18:14:41 +0200 [thread overview]
Message-ID: <20180813161441.16824-25-pclouds@gmail.com> (raw)
In-Reply-To: <20180813161441.16824-1-pclouds@gmail.com>
Side note, since we gain access to the right repository, we can stop
rely on the_repository in this code as well.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
blame.c | 52 +++++++++++++++++++++++++++++--------------------
blame.h | 1 +
builtin/blame.c | 1 +
3 files changed, 33 insertions(+), 21 deletions(-)
diff --git a/blame.c b/blame.c
index 58a7036847..08c0c6cf73 100644
--- a/blame.c
+++ b/blame.c
@@ -90,7 +90,8 @@ static struct blame_origin *get_origin(struct commit *commit, const char *path)
-static void verify_working_tree_path(struct commit *work_tree, const char *path)
+static void verify_working_tree_path(struct repository *repo,
+ struct commit *work_tree, const char *path)
{
struct commit_list *parents;
int pos;
@@ -101,15 +102,15 @@ static void verify_working_tree_path(struct commit *work_tree, const char *path)
unsigned mode;
if (!get_tree_entry(commit_oid, path, &blob_oid, &mode) &&
- oid_object_info(the_repository, &blob_oid, NULL) == OBJ_BLOB)
+ oid_object_info(repo, &blob_oid, NULL) == OBJ_BLOB)
return;
}
- pos = cache_name_pos(path, strlen(path));
+ pos = index_name_pos(repo->index, path, strlen(path));
if (pos >= 0)
; /* path is in the index */
- else if (-1 - pos < active_nr &&
- !strcmp(active_cache[-1 - pos]->name, path))
+ else if (-1 - pos < repo->index->cache_nr &&
+ !strcmp(repo->index->cache[-1 - pos]->name, path))
; /* path is in the index, unmerged */
else
die("no such path '%s' in HEAD", path);
@@ -165,7 +166,8 @@ static void set_commit_buffer_from_strbuf(struct commit *c, struct strbuf *sb)
* Prepare a dummy commit that represents the work tree (or staged) item.
* Note that annotating work tree item never works in the reverse.
*/
-static struct commit *fake_working_tree_commit(struct diff_options *opt,
+static struct commit *fake_working_tree_commit(struct repository *repo,
+ struct diff_options *opt,
const char *path,
const char *contents_from)
{
@@ -181,7 +183,7 @@ static struct commit *fake_working_tree_commit(struct diff_options *opt,
unsigned mode;
struct strbuf msg = STRBUF_INIT;
- read_cache();
+ read_index(repo->index);
time(&now);
commit = alloc_commit_node(the_repository);
commit->object.parsed = 1;
@@ -193,7 +195,7 @@ static struct commit *fake_working_tree_commit(struct diff_options *opt,
parent_tail = append_parent(parent_tail, &head_oid);
append_merge_parents(parent_tail);
- verify_working_tree_path(commit, path);
+ verify_working_tree_path(repo, commit, path);
origin = make_origin(commit, path);
@@ -251,7 +253,7 @@ static struct commit *fake_working_tree_commit(struct diff_options *opt,
if (strbuf_read(&buf, 0, 0) < 0)
die_errno("failed to read from stdin");
}
- convert_to_git(&the_index, path, buf.buf, buf.len, &buf, 0);
+ convert_to_git(repo->index, path, buf.buf, buf.len, &buf, 0);
origin->file.ptr = buf.buf;
origin->file.size = buf.len;
pretend_object_file(buf.buf, buf.len, OBJ_BLOB, &origin->blob_oid);
@@ -262,27 +264,28 @@ static struct commit *fake_working_tree_commit(struct diff_options *opt,
* bits; we are not going to write this index out -- we just
* want to run "diff-index --cached".
*/
- discard_cache();
- read_cache();
+ discard_index(repo->index);
+ read_index(repo->index);
len = strlen(path);
if (!mode) {
- int pos = cache_name_pos(path, len);
+ int pos = index_name_pos(repo->index, path, len);
if (0 <= pos)
- mode = active_cache[pos]->ce_mode;
+ mode = repo->index->cache[pos]->ce_mode;
else
/* Let's not bother reading from HEAD tree */
mode = S_IFREG | 0644;
}
- ce = make_empty_cache_entry(&the_index, len);
+ ce = make_empty_cache_entry(repo->index, len);
oidcpy(&ce->oid, &origin->blob_oid);
memcpy(ce->name, path, len);
ce->ce_flags = create_ce_flags(0);
ce->ce_namelen = len;
ce->ce_mode = create_ce_mode(mode);
- add_cache_entry(ce, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
+ add_index_entry(repo->index, ce,
+ ADD_CACHE_OK_TO_ADD | ADD_CACHE_OK_TO_REPLACE);
- cache_tree_invalidate_path(&the_index, path);
+ cache_tree_invalidate_path(repo->index, path);
return commit;
}
@@ -519,13 +522,14 @@ static void queue_blames(struct blame_scoreboard *sb, struct blame_origin *porig
*
* This also fills origin->mode for corresponding tree path.
*/
-static int fill_blob_sha1_and_mode(struct blame_origin *origin)
+static int fill_blob_sha1_and_mode(struct repository *repo,
+ struct blame_origin *origin)
{
if (!is_null_oid(&origin->blob_oid))
return 0;
if (get_tree_entry(&origin->commit->object.oid, origin->path, &origin->blob_oid, &origin->mode))
goto error_out;
- if (oid_object_info(the_repository, &origin->blob_oid, NULL) != OBJ_BLOB)
+ if (oid_object_info(repo, &origin->blob_oid, NULL) != OBJ_BLOB)
goto error_out;
return 0;
error_out:
@@ -1767,7 +1771,9 @@ void init_scoreboard(struct blame_scoreboard *sb)
sb->copy_score = BLAME_DEFAULT_COPY_SCORE;
}
-void setup_scoreboard(struct blame_scoreboard *sb, const char *path, struct blame_origin **orig)
+void setup_scoreboard(struct blame_scoreboard *sb,
+ const char *path,
+ struct blame_origin **orig)
{
const char *final_commit_name = NULL;
struct blame_origin *o;
@@ -1779,6 +1785,9 @@ void setup_scoreboard(struct blame_scoreboard *sb, const char *path, struct blam
if (sb->reverse && sb->contents_from)
die(_("--contents and --reverse do not blend well."));
+ if (!sb->repo)
+ BUG("repo is NULL");
+
if (!sb->reverse) {
sb->final = find_single_final(sb->revs, &final_commit_name);
sb->commits.compare = compare_commits_by_commit_date;
@@ -1800,7 +1809,8 @@ void setup_scoreboard(struct blame_scoreboard *sb, const char *path, struct blam
* or "--contents".
*/
setup_work_tree();
- sb->final = fake_working_tree_commit(&sb->revs->diffopt,
+ sb->final = fake_working_tree_commit(sb->repo,
+ &sb->revs->diffopt,
path, sb->contents_from);
add_pending_object(sb->revs, &(sb->final->object), ":");
}
@@ -1845,7 +1855,7 @@ void setup_scoreboard(struct blame_scoreboard *sb, const char *path, struct blam
}
else {
o = get_origin(sb->final, path);
- if (fill_blob_sha1_and_mode(o))
+ if (fill_blob_sha1_and_mode(sb->repo, o))
die(_("no such path %s in %s"), path, final_commit_name);
if (sb->revs->diffopt.flags.allow_textconv &&
diff --git a/blame.h b/blame.h
index 9b5240fb6d..be3a895043 100644
--- a/blame.h
+++ b/blame.h
@@ -102,6 +102,7 @@ struct blame_scoreboard {
struct commit *final;
/* Priority queue for commits with unassigned blame records */
struct prio_queue commits;
+ struct repository *repo;
struct rev_info *revs;
const char *path;
diff --git a/builtin/blame.c b/builtin/blame.c
index 5c93d169dd..cbbcb26f89 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -988,6 +988,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
sb.revs = &revs;
sb.contents_from = contents_from;
sb.reverse = reverse;
+ sb.repo = the_repository;
setup_scoreboard(&sb, path, &o);
lno = sb.num_lines;
--
2.18.0.1004.g6639190530
next prev parent reply other threads:[~2018-08-13 16:15 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-13 16:14 [PATCH 00/24] Kill the_index part3 Nguyễn Thái Ngọc Duy
2018-08-13 16:14 ` [PATCH 01/24] diff.c: move read_index() code back to the caller Nguyễn Thái Ngọc Duy
2018-08-13 16:14 ` [PATCH 02/24] cache-tree: wrap the_index based wrappers with #ifdef Nguyễn Thái Ngọc Duy
2018-08-13 21:18 ` Junio C Hamano
2018-08-13 16:14 ` [PATCH 03/24] attr: remove an implicit dependency on the_index Nguyễn Thái Ngọc Duy
2018-08-13 17:12 ` Brandon Williams
2018-08-13 16:14 ` [PATCH 04/24] convert.c: " Nguyễn Thái Ngọc Duy
2018-08-13 21:21 ` Junio C Hamano
2018-08-13 16:14 ` [PATCH 05/24] dir.c: remove an implicit dependency on the_index in pathspec code Nguyễn Thái Ngọc Duy
2018-08-13 17:17 ` Brandon Williams
2018-08-13 18:40 ` Duy Nguyen
2018-08-13 16:14 ` [PATCH 06/24] preload-index.c: use the right index instead of the_index Nguyễn Thái Ngọc Duy
2018-08-13 16:14 ` [PATCH 07/24] ls-files: correct index argument to get_convert_attr_ascii() Nguyễn Thái Ngọc Duy
2018-08-15 18:56 ` Stefan Beller
2018-08-13 16:14 ` [PATCH 08/24] unpack-trees: remove 'extern' on function declaration Nguyễn Thái Ngọc Duy
2018-08-15 19:10 ` Stefan Beller
2018-08-15 19:21 ` Duy Nguyen
2018-08-15 19:25 ` Stefan Beller
2018-08-13 16:14 ` [PATCH 09/24] unpack-trees: add a note about path invalidation Nguyễn Thái Ngọc Duy
2018-08-13 16:14 ` [PATCH 10/24] unpack-trees: don't shadow global var the_index Nguyễn Thái Ngọc Duy
2018-08-13 16:14 ` [PATCH 11/24] unpack-trees: convert clear_ce_flags* to avoid the_index Nguyễn Thái Ngọc Duy
2018-08-13 16:14 ` [PATCH 12/24] unpack-trees: avoid the_index in verify_absent() Nguyễn Thái Ngọc Duy
2018-08-13 16:14 ` [PATCH 13/24] pathspec.c: use the right index instead of the_index Nguyễn Thái Ngọc Duy
2018-08-13 16:14 ` [PATCH 14/24] submodule.c: " Nguyễn Thái Ngọc Duy
2018-08-13 16:14 ` [PATCH 15/24] entry.c: " Nguyễn Thái Ngọc Duy
2018-08-13 16:14 ` [PATCH 16/24] attr: remove index from git_attr_set_direction() Nguyễn Thái Ngọc Duy
2018-08-13 17:22 ` Brandon Williams
2018-08-13 16:14 ` [PATCH 17/24] grep: use the right index instead of the_index Nguyễn Thái Ngọc Duy
2018-08-13 16:14 ` [PATCH 18/24] archive.c: avoid access to the_index Nguyễn Thái Ngọc Duy
2018-08-13 16:14 ` [PATCH 19/24] archive-*.c: use the right repository Nguyễn Thái Ngọc Duy
2018-08-13 16:14 ` [PATCH 20/24] resolve-undo.c: use the right index instead of the_index Nguyễn Thái Ngọc Duy
2018-08-13 16:14 ` [PATCH 21/24] apply.c: pass struct apply_state to more functions Nguyễn Thái Ngọc Duy
2018-08-13 16:14 ` [PATCH 22/24] apply.c: make init_apply_state() take a struct repository Nguyễn Thái Ngọc Duy
2018-08-13 16:14 ` [PATCH 23/24] apply.c: remove implicit dependency on the_index Nguyễn Thái Ngọc Duy
2018-08-13 16:14 ` Nguyễn Thái Ngọc Duy [this message]
2018-08-13 17:28 ` [PATCH 00/24] Kill the_index part3 Brandon Williams
2018-08-13 21:24 ` Junio C Hamano
2018-08-15 19:48 ` Stefan Beller
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=20180813161441.16824-25-pclouds@gmail.com \
--to=pclouds@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 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 NNTP newsgroup(s).