On Wed, 2016-06-01 at 17:45 +0700, Nguyễn Thái Ngọc Duy wrote: > Current mark_reachable_objects() only marks objects from index from > _current_ worktree as reachable instead of all worktrees. Because > this > function is used for pruning, there is a chance that objects > referenced > by other worktrees may be deleted. Fix that. > > Small behavior change in "one worktree" case, the index is read again > from file. In the current implementation, if the_index is already > loaded, the index file will not be read from file again. This adds > some > more cost to this operation, hopefully insignificant because > reachability test is usually very expensive already. > > Reported-by: Johannes Sixt <j6t@xxxxxxxx> > Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> > --- > reachable.c | 33 +++++++++++++++++++++++++++++---- > t/t5304-prune.sh | 9 +++++++++ > 2 files changed, 38 insertions(+), 4 deletions(-) > > diff --git a/reachable.c b/reachable.c > index 15dbe60..8f67242 100644 > --- a/reachable.c > +++ b/reachable.c > @@ -9,6 +9,7 @@ > #include "cache-tree.h" > #include "progress.h" > #include "list-objects.h" > +#include "worktree.h" > > struct connectivity_progress { > struct progress *progress; > @@ -155,6 +156,32 @@ int > add_unseen_recent_objects_to_traversal(struct rev_info *revs, > FOR_EACH_OBJECT_LOCAL_ONLY); > } > > +static void add_objects_from_worktree(struct rev_info *revs) > +{ > + struct worktree **worktrees, **p; > + > + worktrees = get_worktrees(); > + for (p = worktrees; *p; p++) { > + struct worktree *wt = *p; > + struct index_state istate; > + > + memset(&istate, 0, sizeof(istate)); Why not just struct index_state istate = {0}; ? -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html