I *think* I got send-email to work but I can't be certain :) The tabs seem to be back! It didn't thread correctly, unsure why. Sorry about the patch problems, On Tue, May 16, 2017 at 5:50 PM, <manish.earth@xxxxxxxxx> wrote: > From: Manish Goregaokar <manishearth@xxxxxxxxx> > > To ensure that `git prune` does not remove refs checked out > in other worktrees, we need to include these HEADs in the > set of roots. This adds the iteration function necessary > to do this. > > Signed-off-by: Manish Goregaokar <manishearth@xxxxxxxxx> > --- > refs.c | 16 ++++++++++++++++ > refs.h | 1 + > 2 files changed, 17 insertions(+) > > diff --git a/refs.c b/refs.c > index 2d71774..27e0b60 100644 > --- a/refs.c > +++ b/refs.c > @@ -3,6 +3,7 @@ > */ > > #include "cache.h" > +#include "commit.h" > #include "lockfile.h" > #include "refs.h" > #include "refs/refs-internal.h" > @@ -1157,6 +1158,21 @@ int head_ref(each_ref_fn fn, void *cb_data) > return head_ref_submodule(NULL, fn, cb_data); > } > > +int for_each_worktree_ref(each_ref_fn fn, void *cb_data) > +{ > + int i, flag, retval; > + struct object_id oid; > + struct worktree **worktrees = get_worktrees(GWT_SORT_LINKED); > + for (i = 0; worktrees[i]; i++) { > + struct commit* commit = lookup_commit_reference(worktrees[i]->head_sha1); > + oid = commit->object.oid; > + if (!read_ref_full("HEAD", RESOLVE_REF_READING, oid.hash, &flag)) { > + if (retval = fn("HEAD", &oid, flag, cb_data)) > + return retval; > + } > + } > +} > + > /* > * Call fn for each reference in the specified submodule for which the > * refname begins with prefix. If trim is non-zero, then trim that > diff --git a/refs.h b/refs.h > index 9fbff90..425a853 100644 > --- a/refs.h > +++ b/refs.h > @@ -192,6 +192,7 @@ typedef int each_ref_fn(const char *refname, > * stop the iteration. > */ > int head_ref(each_ref_fn fn, void *cb_data); > +int for_each_worktree_ref(each_ref_fn fn, void *cb_data); > int for_each_ref(each_ref_fn fn, void *cb_data); > int for_each_ref_in(const char *prefix, each_ref_fn fn, void *cb_data); > int for_each_fullref_in(const char *prefix, each_ref_fn fn, void *cb_data, > -- > 2.10.1 >