Nguyễn Thái Ngọc Duy <pclo...@gmail.com> writes: > This allows the user to do something like "worktree lock foo" instead of > "worktree lock <path/to/foo>". With completion support it could be quite > convenient. While this base name search can be done in the same worktree > iteration loop, the code is split into a separate function for clarity.
Makes me wonder if you want to do this without calling basename(3) function at all. I do not think such a feature would cost that much over what we see in this patch. That is, wouldn't you rather see "worktree lock to/foo" work when 'foo' is ambiguous but 'to/foo' is not? > > Suggested-by: Eric Sunshine <sunsh...@sunshineco.com> > Signed-off-by: Nguyễn Thái Ngọc Duy <pclo...@gmail.com> > --- > worktree.c | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/worktree.c b/worktree.c > index 0782e00..4dd7b77 100644 > --- a/worktree.c > +++ b/worktree.c > @@ -214,12 +214,33 @@ const char *get_worktree_git_dir(const struct worktree > *wt) > return git_common_path("worktrees/%s", wt->id); > } > > +static struct worktree *find_worktree_by_basename(struct worktree **list, > + const char *base_name) > +{ > + struct worktree *found = NULL; > + int nr_found = 0; > + > + for (; *list && nr_found < 2; list++) { > + char *path = xstrdup((*list)->path); > + if (!fspathcmp(base_name, basename(path))) { > + found = *list; > + nr_found++; > + } > + free(path); > + } > + return nr_found == 1 ? found : NULL; > +} > + > struct worktree *find_worktree(struct worktree **list, > const char *prefix, > const char *arg) > { > + struct worktree *wt; > char *path; > > + if ((wt = find_worktree_by_basename(list, arg))) > + return wt; > + > arg = prefix_filename(prefix, strlen(prefix), arg); > path = xstrdup(real_path(arg)); > for (; *list; list++) -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html