summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>2016-06-03 12:19:39 (GMT)
committerJunio C Hamano <gitster@pobox.com>2016-06-04 04:58:18 (GMT)
commit6835314459794831a1b88bed56549653710e910c (patch)
treec387fabf54b670a19fcec4a02320ca5eb1197930
parent0409e0b6dc169b07c05d02e8b62389b1cc975a45 (diff)
downloadgit-6835314459794831a1b88bed56549653710e910c.zip
git-6835314459794831a1b88bed56549653710e910c.tar.gz
git-6835314459794831a1b88bed56549653710e910c.tar.bz2
worktree.c: add find_worktree()
So far we haven't needed to identify an existing worktree from command line. Future commands such as lock or move will need it. The current implementation identifies worktrees by path (*). In future, the function could learn to identify by $(basename $path) or tags... (*) We could probably go cheaper with comparing inode number (and probably more reliable than paths when unicode enters the game). But not all systems have good inode that so let's stick to something simple for now. Helped-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--worktree.c15
-rw-r--r--worktree.h8
2 files changed, 23 insertions, 0 deletions
diff --git a/worktree.c b/worktree.c
index f4a4f38..0782e00 100644
--- a/worktree.c
+++ b/worktree.c
@@ -214,6 +214,21 @@ const char *get_worktree_git_dir(const struct worktree *wt)
return git_common_path("worktrees/%s", wt->id);
}
+struct worktree *find_worktree(struct worktree **list,
+ const char *prefix,
+ const char *arg)
+{
+ char *path;
+
+ arg = prefix_filename(prefix, strlen(prefix), arg);
+ path = xstrdup(real_path(arg));
+ for (; *list; list++)
+ if (!fspathcmp(path, real_path((*list)->path)))
+ break;
+ free(path);
+ return *list;
+}
+
int is_worktree_being_rebased(const struct worktree *wt,
const char *target)
{
diff --git a/worktree.h b/worktree.h
index 1394909..7ad15da 100644
--- a/worktree.h
+++ b/worktree.h
@@ -30,6 +30,14 @@ extern struct worktree **get_worktrees(void);
extern const char *get_worktree_git_dir(const struct worktree *wt);
/*
+ * Search a worktree that can be unambiguously identified by
+ * "arg". "prefix" must not be NULL.
+ */
+extern struct worktree *find_worktree(struct worktree **list,
+ const char *prefix,
+ const char *arg);
+
+/*
* Free up the memory for worktree(s)
*/
extern void free_worktrees(struct worktree **);