On Sun, Apr 07, 2019 at 05:00:11PM +0700, Duy Nguyen wrote:
> So, with something like a patch below (not tested), you should be able
> to write
>
> worktrees = repo_get_worktrees(revs->repo, 0);
> ...
> struct repository *r = repo_worktree_init(wt);
> if (read_index_from(&istate, r->index_file, r) > 0)
> do_add_index_objects_to_pending(revs, &istate, flags);
> repo_clear(r);
Actually it gets better. You can just use repo_read_index()
diff --git a/revision.c b/revision.c
index eb8e51bc63..93fe8bbbfe 100644
--- a/revision.c
+++ b/revision.c
@@ -1546,19 +1546,18 @@ void add_index_objects_to_pending(struct rev_info
*revs, unsigned int flags)
if (revs->single_worktree)
return;
- worktrees = get_worktrees(0);
+ worktrees = repo_get_worktrees(revs->repo);
for (p = worktrees; *p; p++) {
+ struct repository repo;
struct worktree *wt = *p;
- struct index_state istate = { NULL };
if (wt->is_current)
continue; /* current index already taken care of */
- if (read_index_from(&istate,
- worktree_git_path(wt, "index"),
- get_worktree_git_dir(wt)) > 0)
- do_add_index_objects_to_pending(revs, &istate, flags);
- discard_index(&istate);
+ repo_worktree_init(repo, revs->repo, wt);
+ if (repo_read_index(repo) > 0)
+ do_add_index_objects_to_pending(revs, repo->index,
flags);
+ repo_clear(&repo);
}
free_worktrees(worktrees);
}
--
Duy