On Thu, Dec 8, 2016 at 8:46 AM, Stefan Beller <sbeller@xxxxxxxxxx> wrote: > Signed-off-by: Stefan Beller <sbeller@xxxxxxxxxx> > --- > worktree.c | 24 ++++++++++++++++++++++++ > worktree.h | 7 +++++++ > 2 files changed, 31 insertions(+) > > diff --git a/worktree.c b/worktree.c > index 75db689672..2559f33846 100644 > --- a/worktree.c > +++ b/worktree.c > @@ -406,3 +406,27 @@ const struct worktree *find_shared_symref(const char *symref, > > return existing; > } > + > +static int uses_worktree_internal(struct worktree **worktrees) > +{ > + int i; > + for (i = 0; worktrees[i]; i++) > + ; /* nothing */ > + > + free_worktrees(worktrees); Ayy.. caller allocates, callee frees. This might become a new maintenance nightmare. Elsewhere I believe we (Junio and me) discussed the possibility of returning the number of worktrees from get_worktrees() too. get_worktrees() would take an "int *", if not NULL, we return the number of worktrees in that pointer. It's probably a better approach, although I'm afraid it'll add a bit more work on you. Alternatively, we could add a new flag to get_worktrees() to tell it to return all worktrees if there is a least one linked worktree, or return NULL if there's only main worktree. I'm not sure if this is clever or very stupid. > + return i > 1; > +} > + > +int uses_worktrees(void) "has" may be a better verb than "uses". maybe "has_linked_worktrees" since we always have and use the main worktree. > +{ > + return uses_worktree_internal(get_worktrees(0)); > +} > + > +int submodule_uses_worktrees(const char *path) > +{ > + struct worktree **worktrees = get_submodule_worktrees(path, 0); > + if (!worktrees) > + return 0; > + > + return uses_worktree_internal(worktrees); > +} > diff --git a/worktree.h b/worktree.h > index 157fbc4a66..76027b1fd2 100644 > --- a/worktree.h > +++ b/worktree.h > @@ -33,6 +33,13 @@ extern struct worktree **get_worktrees(unsigned flags); > extern struct worktree **get_submodule_worktrees(const char *path, > unsigned flags); > > +/* > + * Returns 1 if more than one worktree exists. > + * Returns 0 if only the main worktree exists. > + */ > +extern int uses_worktrees(void); > +extern int submodule_uses_worktrees(const char *path); > + > /* > * Return git dir of the worktree. Note that the path may be relative. > * If wt is NULL, git dir of current worktree is returned. > -- > 2.11.0.rc2.30.gc512cbd.dirty > -- Duy