From 750e8a60d69274acd820f812704c75927d82728e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nguy=E1=BB=85n=20Th=C3=A1i=20Ng=E1=BB=8Dc=20Duy?= Date: Fri, 22 Apr 2016 20:01:28 +0700 Subject: [PATCH] worktree.c: mark current worktree MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Nguyễn Thái Ngọc Duy Signed-off-by: Junio C Hamano --- worktree.c | 24 ++++++++++++++++++++++++ worktree.h | 1 + 2 files changed, 25 insertions(+) diff --git a/worktree.c b/worktree.c index 360ba417e8..dc092a7100 100644 --- a/worktree.c +++ b/worktree.c @@ -2,6 +2,7 @@ #include "refs.h" #include "strbuf.h" #include "worktree.h" +#include "dir.h" void free_worktrees(struct worktree **worktrees) { @@ -94,6 +95,7 @@ static struct worktree *get_main_worktree(void) worktree->is_bare = is_bare; worktree->head_ref = NULL; worktree->is_detached = is_detached; + worktree->is_current = 0; add_head_info(&head_ref, worktree); done: @@ -138,6 +140,7 @@ static struct worktree *get_linked_worktree(const char *id) worktree->is_bare = 0; worktree->head_ref = NULL; worktree->is_detached = is_detached; + worktree->is_current = 0; add_head_info(&head_ref, worktree); done: @@ -147,6 +150,25 @@ done: return worktree; } +static void mark_current_worktree(struct worktree **worktrees) +{ + struct strbuf git_dir = STRBUF_INIT; + struct strbuf path = STRBUF_INIT; + int i; + + strbuf_addstr(&git_dir, absolute_path(get_git_dir())); + for (i = 0; worktrees[i]; i++) { + struct worktree *wt = worktrees[i]; + strbuf_addstr(&path, absolute_path(get_worktree_git_dir(wt))); + wt->is_current = !fspathcmp(git_dir.buf, path.buf); + strbuf_reset(&path); + if (wt->is_current) + break; + } + strbuf_release(&git_dir); + strbuf_release(&path); +} + struct worktree **get_worktrees(void) { struct worktree **list = NULL; @@ -178,6 +200,8 @@ struct worktree **get_worktrees(void) } ALLOC_GROW(list, counter + 1, alloc); list[counter] = NULL; + + mark_current_worktree(list); return list; } diff --git a/worktree.h b/worktree.h index ca50e73b58..ccdf69a876 100644 --- a/worktree.h +++ b/worktree.h @@ -8,6 +8,7 @@ struct worktree { unsigned char head_sha1[20]; int is_detached; int is_bare; + int is_current; }; /* Functions for acting on the information about worktrees. */ -- 2.43.2