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

Reply via email to