From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
rethab.ch@gmail.com, rappazzo@gmail.com,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH v3 00/13] nd/worktree-various-heads
Date: Fri, 22 Apr 2016 20:01:23 +0700 [thread overview]
Message-ID: <1461330096-21783-1-git-send-email-pclouds@gmail.com> (raw)
In-Reply-To: <1461158693-21289-1-git-send-email-pclouds@gmail.com>
v3 fixes all the things found in v2, deletes unused stuff and adds a
new patch 01/13 that renames str(n)cmp_icase to fspath(n)cmp.
Interdiff
diff --git a/branch.c b/branch.c
index 8e323d3..a5a8dcb 100644
--- a/branch.c
+++ b/branch.c
@@ -338,12 +338,12 @@ void die_if_checked_out(const char *branch, int ignore_current_worktree)
{
const struct worktree *wt;
- wt = find_shared_symref("HEAD", branch, ignore_current_worktree);
- if (wt) {
- skip_prefix(branch, "refs/heads/", &branch);
- die(_("'%s' is already checked out at '%s'"),
- branch, wt->path);
- }
+ wt = find_shared_symref("HEAD", branch);
+ if (!wt || (ignore_current_worktree && wt->is_current))
+ return;
+ skip_prefix(branch, "refs/heads/", &branch);
+ die(_("'%s' is already checked out at '%s'"),
+ branch, wt->path);
}
int replace_each_worktree_head_symref(const char *oldref, const char *newref)
diff --git a/builtin/branch.c b/builtin/branch.c
index 3a2eceb..b488c3f 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -221,7 +221,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
if (kinds == FILTER_REFS_BRANCHES) {
const struct worktree *wt =
- find_shared_symref("HEAD", name, 0);
+ find_shared_symref("HEAD", name);
if (wt) {
error(_("Cannot delete branch '%s' "
"checked out at '%s'"),
diff --git a/builtin/notes.c b/builtin/notes.c
index f154a69..c65b59a 100644
--- a/builtin/notes.c
+++ b/builtin/notes.c
@@ -852,7 +852,7 @@ static int merge(int argc, const char **argv, const char *prefix)
update_ref(msg.buf, "NOTES_MERGE_PARTIAL", result_sha1, NULL,
0, UPDATE_REFS_DIE_ON_ERR);
/* Store ref-to-be-updated into .git/NOTES_MERGE_REF */
- wt = find_shared_symref("NOTES_MERGE_REF", default_notes_ref(), 0);
+ wt = find_shared_symref("NOTES_MERGE_REF", default_notes_ref());
if (wt)
die(_("A notes merge into %s is already in-progress at %s"),
default_notes_ref(), wt->path);
diff --git a/dir.c b/dir.c
index 996653b..f04bd3b 100644
--- a/dir.c
+++ b/dir.c
@@ -53,13 +53,12 @@ static enum path_treatment read_directory_recursive(struct dir_struct *dir,
int check_only, const struct path_simplify *simplify);
static int get_dtype(struct dirent *de, const char *path, int len);
-/* helper string functions with support for the ignore_case flag */
-int strcmp_icase(const char *a, const char *b)
+int fspathcmp(const char *a, const char *b)
{
return ignore_case ? strcasecmp(a, b) : strcmp(a, b);
}
-int strncmp_icase(const char *a, const char *b, size_t count)
+int fspathncmp(const char *a, const char *b, size_t count)
{
return ignore_case ? strncasecmp(a, b, count) : strncmp(a, b, count);
}
@@ -802,12 +801,12 @@ int match_basename(const char *basename, int basenamelen,
{
if (prefix == patternlen) {
if (patternlen == basenamelen &&
- !strncmp_icase(pattern, basename, basenamelen))
+ !fspathncmp(pattern, basename, basenamelen))
return 1;
} else if (flags & EXC_FLAG_ENDSWITH) {
/* "*literal" matching against "fooliteral" */
if (patternlen - 1 <= basenamelen &&
- !strncmp_icase(pattern + 1,
+ !fspathncmp(pattern + 1,
basename + basenamelen - (patternlen - 1),
patternlen - 1))
return 1;
@@ -844,7 +843,7 @@ int match_pathname(const char *pathname, int pathlen,
*/
if (pathlen < baselen + 1 ||
(baselen && pathname[baselen] != '/') ||
- strncmp_icase(pathname, base, baselen))
+ fspathncmp(pathname, base, baselen))
return 0;
namelen = baselen ? pathlen - baselen - 1 : pathlen;
@@ -858,7 +857,7 @@ int match_pathname(const char *pathname, int pathlen,
if (prefix > namelen)
return 0;
- if (strncmp_icase(pattern, name, prefix))
+ if (fspathncmp(pattern, name, prefix))
return 0;
pattern += prefix;
patternlen -= prefix;
diff --git a/dir.h b/dir.h
index 301b737..e34d555 100644
--- a/dir.h
+++ b/dir.h
@@ -270,8 +270,8 @@ extern int remove_dir_recursively(struct strbuf *path, int flag);
/* tries to remove the path with empty directories along it, ignores ENOENT */
extern int remove_path(const char *path);
-extern int strcmp_icase(const char *a, const char *b);
-extern int strncmp_icase(const char *a, const char *b, size_t count);
+extern int fspathcmp(const char *a, const char *b);
+extern int fspathncmp(const char *a, const char *b, size_t count);
extern int fnmatch_icase(const char *pattern, const char *string, int flags);
/*
diff --git a/fast-import.c b/fast-import.c
index 9fc7093..339cd38 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -1512,7 +1512,7 @@ static int tree_content_set(
t = root->tree;
for (i = 0; i < t->entry_count; i++) {
e = t->entries[i];
- if (e->name->str_len == n && !strncmp_icase(p, e->name->str_dat, n)) {
+ if (e->name->str_len == n && !fspathncmp(p, e->name->str_dat, n)) {
if (!*slash1) {
if (!S_ISDIR(mode)
&& e->versions[1].mode == mode
@@ -1602,7 +1602,7 @@ static int tree_content_remove(
t = root->tree;
for (i = 0; i < t->entry_count; i++) {
e = t->entries[i];
- if (e->name->str_len == n && !strncmp_icase(p, e->name->str_dat, n)) {
+ if (e->name->str_len == n && !fspathncmp(p, e->name->str_dat, n)) {
if (*slash1 && !S_ISDIR(e->versions[1].mode))
/*
* If p names a file in some subdirectory, and a
@@ -1669,7 +1669,7 @@ static int tree_content_get(
t = root->tree;
for (i = 0; i < t->entry_count; i++) {
e = t->entries[i];
- if (e->name->str_len == n && !strncmp_icase(p, e->name->str_dat, n)) {
+ if (e->name->str_len == n && !fspathncmp(p, e->name->str_dat, n)) {
if (!*slash1)
goto found_entry;
if (!S_ISDIR(e->versions[1].mode))
diff --git a/path.c b/path.c
index c421d37..8fdd187 100644
--- a/path.c
+++ b/path.c
@@ -466,16 +466,6 @@ const char *worktree_git_path(const struct worktree *wt, const char *fmt, ...)
return pathname->buf;
}
-char *worktree_git_pathdup(const struct worktree *wt, const char *fmt, ...)
-{
- struct strbuf path = STRBUF_INIT;
- va_list args;
- va_start(args, fmt);
- do_git_path(wt, &path, fmt, args);
- va_end(args);
- return strbuf_detach(&path, NULL);
-}
-
static void do_submodule_path(struct strbuf *buf, const char *path,
const char *fmt, va_list args)
{
diff --git a/sha1_file.c b/sha1_file.c
index d0f2aa0..ea6381b 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -301,7 +301,7 @@ static int link_alt_odb_entry(const char *entry, const char *relative_base,
return -1;
}
}
- if (!strcmp_icase(ent->base, normalized_objdir)) {
+ if (!fspathcmp(ent->base, normalized_objdir)) {
free(ent);
return -1;
}
diff --git a/worktree.c b/worktree.c
index 8a3d394..4817d60 100644
--- a/worktree.c
+++ b/worktree.c
@@ -151,14 +151,32 @@ 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;
- struct strbuf git_dir = STRBUF_INIT;
struct strbuf path = STRBUF_INIT;
DIR *dir;
struct dirent *d;
- int i, counter = 0, alloc = 2;
+ int counter = 0, alloc = 2;
list = xmalloc(alloc * sizeof(struct worktree *));
@@ -184,17 +202,7 @@ struct worktree **get_worktrees(void)
ALLOC_GROW(list, counter + 1, alloc);
list[counter] = NULL;
- strbuf_addstr(&git_dir, absolute_path(get_git_dir()));
- for (i = 0; i < counter; i++) {
- struct worktree *wt = list[i];
- strbuf_addstr(&path, absolute_path(get_worktree_git_dir(wt)));
- wt->is_current = !strcmp_icase(git_dir.buf, path.buf);
- strbuf_reset(&path);
- if (wt->is_current)
- break;
- }
- strbuf_release(&git_dir);
- strbuf_release(&path);
+ mark_current_worktree(list);
return list;
}
@@ -241,9 +249,14 @@ int is_worktree_being_bisected(const struct worktree *wt,
return found_rebase;
}
+/*
+ * note: this function should be able to detect shared symref even if
+ * HEAD is temporarily detached (e.g. in the middle of rebase or
+ * bisect). New commands that do similar things should update this
+ * function as well.
+ */
const struct worktree *find_shared_symref(const char *symref,
- const char *target,
- int ignore_current_worktree)
+ const char *target)
{
const struct worktree *existing = NULL;
struct strbuf path = STRBUF_INIT;
@@ -258,9 +271,6 @@ const struct worktree *find_shared_symref(const char *symref,
for (i = 0; worktrees[i]; i++) {
struct worktree *wt = worktrees[i];
- if (ignore_current_worktree && wt->is_current)
- continue;
-
if (wt->is_detached && !strcmp(symref, "HEAD")) {
if (is_worktree_being_rebased(wt, target)) {
existing = wt;
diff --git a/worktree.h b/worktree.h
index d4a3534..1394909 100644
--- a/worktree.h
+++ b/worktree.h
@@ -36,26 +36,21 @@ extern void free_worktrees(struct worktree **);
/*
* Check if a per-worktree symref points to a ref in the main worktree
- * or any linked worktree, and return the path to the exising worktree
- * if it is. Returns NULL if there is no existing ref. The result
- * may be destroyed by the next call.
+ * or any linked worktree, and return the worktree that holds the ref,
+ * or NULL otherwise. The result may be destroyed by the next call.
*/
extern const struct worktree *find_shared_symref(const char *symref,
- const char *target,
- int ignore_current_worktree);
+ const char *target);
int is_worktree_being_rebased(const struct worktree *wt, const char *target);
int is_worktree_being_bisected(const struct worktree *wt, const char *target);
/*
- * Similar to git_path() and git_pathdup() but can produce paths for a
- * specified worktree instead of current one
+ * Similar to git_path() but can produce paths for a specified
+ * worktree instead of current one
*/
extern const char *worktree_git_path(const struct worktree *wt,
const char *fmt, ...)
__attribute__((format (printf, 2, 3)));
-extern char *worktree_git_pathdup(const struct worktree *wt,
- const char *fmt, ...)
- __attribute__((format (printf, 2, 3)));
#endif
diff --git a/wt-status.c b/wt-status.c
index 971e071..0032ef5 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -1410,7 +1410,7 @@ void wt_status_get_state(struct wt_status_state *state,
if (!stat(git_path_merge_head(), &st)) {
state->merge_in_progress = 1;
} else if (wt_status_check_rebase(NULL, state)) {
- ; /* all set */
+ ; /* all set */
} else if (!stat(git_path_cherry_pick_head(), &st) &&
!get_sha1("CHERRY_PICK_HEAD", sha1)) {
state->cherry_pick_in_progress = 1;
[01/13] dir.c: rename str(n)cmp_icase to fspath(n)cmp
[02/13] path.c: add git_common_path() and strbuf_git_common_path()
[03/13] worktree.c: store "id" instead of "git_dir"
[04/13] worktree.c: make find_shared_symref() return struct worktree *
[05/13] worktree.c: mark current worktree
[06/13] path.c: refactor and add worktree_git_path()
[07/13] wt-status.c: split rebase detection out of wt_status_get_state()
[08/13] wt-status.c: make wt_status_check_rebase() work on any worktree
[09/13] worktree.c: avoid referencing to worktrees[i] multiple times
[10/13] worktree.c: check whether branch is rebased in another worktree
[11/13] wt-status.c: split bisect detection out of wt_status_get_state()
[12/13] worktree.c: check whether branch is bisected in another worktree
[13/13] branch: do not rename a branch under bisect or rebase
Total 17 files changed, 344 insertions(+), 82 deletions(-)
--
Duy
next prev parent reply other threads:[~2016-04-22 13:01 UTC|newest]
Thread overview: 162+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-15 13:53 possible to checkout same branch in different worktree Reto Hablützel
2016-04-15 15:36 ` Junio C Hamano
2016-04-16 0:51 ` Duy Nguyen
2016-04-17 12:59 ` [PATCH 0/7] fix checking out a being-rebased branch Nguyễn Thái Ngọc Duy
2016-04-17 12:59 ` [PATCH 1/7] path.c: add git_common_path() and strbuf_git_common_path() Nguyễn Thái Ngọc Duy
2016-04-17 12:59 ` [PATCH 2/7] worktree.c: store "id" instead of "git_dir" Nguyễn Thái Ngọc Duy
2016-04-17 12:59 ` [PATCH 3/7] path.c: refactor and add worktree_git_path() Nguyễn Thái Ngọc Duy
2016-04-17 12:59 ` [PATCH 4/7] worktree.c: add worktree_git_path_..._head() Nguyễn Thái Ngọc Duy
2016-04-17 12:59 ` [PATCH 5/7] wt-status.c: make wt_status_get_state() support worktree Nguyễn Thái Ngọc Duy
2016-04-17 12:59 ` [PATCH 6/7] worktree.c: avoid referencing to worktrees[i] multiple times Nguyễn Thái Ngọc Duy
2016-04-17 12:59 ` [PATCH 7/7] checkout: prevent checking out a branch being rebased in another worktree Nguyễn Thái Ngọc Duy
2016-04-18 17:42 ` [PATCH 0/7] fix checking out a being-rebased branch Junio C Hamano
2016-04-19 1:04 ` Duy Nguyen
2016-04-19 20:43 ` Junio C Hamano
2016-04-20 13:24 ` [PATCH v2 00/12] " Nguyễn Thái Ngọc Duy
2016-04-20 13:24 ` [PATCH v2 01/12] path.c: add git_common_path() and strbuf_git_common_path() Nguyễn Thái Ngọc Duy
2016-04-20 18:11 ` Eric Sunshine
2016-04-21 0:28 ` Duy Nguyen
2016-04-20 13:24 ` [PATCH v2 02/12] worktree.c: store "id" instead of "git_dir" Nguyễn Thái Ngọc Duy
2016-04-20 13:24 ` [PATCH v2 03/12] worktree.c: make find_shared_symref() return struct worktree * Nguyễn Thái Ngọc Duy
2016-04-20 17:05 ` Junio C Hamano
2016-04-21 7:02 ` Eric Sunshine
2016-04-20 13:24 ` [PATCH v2 04/12] worktree.c: mark current worktree Nguyễn Thái Ngọc Duy
2016-04-21 7:20 ` Eric Sunshine
2016-04-21 8:19 ` Duy Nguyen
2016-04-21 9:33 ` Duy Nguyen
2016-04-21 14:23 ` Eric Sunshine
2016-04-21 15:13 ` Jeff King
2016-04-21 15:37 ` Junio C Hamano
2016-04-21 15:40 ` Jeff King
2016-04-21 15:42 ` Junio C Hamano
2016-04-20 13:24 ` [PATCH v2 05/12] path.c: refactor and add worktree_git_path() Nguyễn Thái Ngọc Duy
2016-04-20 13:24 ` [PATCH v2 06/12] wt-status.c: split rebase detection out of wt_status_get_state() Nguyễn Thái Ngọc Duy
2016-04-20 13:48 ` Ramsay Jones
2016-04-20 13:54 ` Duy Nguyen
2016-04-20 13:24 ` [PATCH v2 07/12] wt-status.c: make wt_status_check_rebase() work on any worktree Nguyễn Thái Ngọc Duy
2016-04-20 13:24 ` [PATCH v2 08/12] worktree.c: avoid referencing to worktrees[i] multiple times Nguyễn Thái Ngọc Duy
2016-04-20 13:24 ` [PATCH v2 09/12] worktree.c: test if branch being rebased in another worktree Nguyễn Thái Ngọc Duy
2016-04-20 18:04 ` Junio C Hamano
2016-04-21 0:37 ` Duy Nguyen
2016-04-20 13:24 ` [PATCH v2 10/12] wt-status.c: split bisect detection out of wt_status_get_state() Nguyễn Thái Ngọc Duy
2016-04-20 13:24 ` [PATCH v2 11/12] worktree.c: test if branch being bisected in another worktree Nguyễn Thái Ngọc Duy
2016-04-20 13:24 ` [PATCH v2 12/12] branch: do not rename a branch under bisect or rebase Nguyễn Thái Ngọc Duy
2016-04-20 18:09 ` [PATCH v2 00/12] fix checking out a being-rebased branch Junio C Hamano
2016-04-22 13:01 ` Nguyễn Thái Ngọc Duy [this message]
2016-04-22 13:01 ` [PATCH v3 01/13] dir.c: rename str(n)cmp_icase to fspath(n)cmp Nguyễn Thái Ngọc Duy
2016-04-22 13:01 ` [PATCH v3 02/13] path.c: add git_common_path() and strbuf_git_common_path() Nguyễn Thái Ngọc Duy
2016-04-22 13:01 ` [PATCH v3 03/13] worktree.c: store "id" instead of "git_dir" Nguyễn Thái Ngọc Duy
2016-04-22 13:01 ` [PATCH v3 04/13] worktree.c: make find_shared_symref() return struct worktree * Nguyễn Thái Ngọc Duy
2016-04-22 13:01 ` [PATCH v3 05/13] worktree.c: mark current worktree Nguyễn Thái Ngọc Duy
2016-05-06 7:51 ` Eric Sunshine
2016-05-06 10:21 ` Duy Nguyen
2016-05-10 14:14 ` Duy Nguyen
2016-05-10 14:15 ` [PATCH 1/7] completion: support git-worktree Nguyễn Thái Ngọc Duy
2016-05-10 14:15 ` [PATCH 2/7] worktree.c: rewrite mark_current_worktree() to avoid strbuf Nguyễn Thái Ngọc Duy
2016-05-11 6:16 ` Eric Sunshine
2016-05-10 14:15 ` [PATCH 3/7] git-worktree.txt: keep subcommand listing in alphabetical order Nguyễn Thái Ngọc Duy
2016-05-10 14:15 ` [PATCH 4/7] worktree.c: use is_dot_or_dotdot() Nguyễn Thái Ngọc Duy
2016-05-10 14:15 ` [PATCH 5/7] worktree.c: add clear_worktree() Nguyễn Thái Ngọc Duy
2016-05-11 6:36 ` Eric Sunshine
2016-05-11 6:42 ` Eric Sunshine
2016-05-22 8:58 ` Duy Nguyen
2016-05-10 14:15 ` [PATCH 6/7] worktree: avoid 0{40}, too many zeroes, hard to read Nguyễn Thái Ngọc Duy
2016-05-10 14:15 ` [PATCH 7/7] worktree: simplify prefixing paths Nguyễn Thái Ngọc Duy
2016-05-10 23:07 ` Junio C Hamano
2016-05-11 0:46 ` Duy Nguyen
2016-05-11 6:12 ` [PATCH 1/7] completion: support git-worktree Eric Sunshine
2016-05-10 14:17 ` [PATCH 1/5] worktree.c: add find_worktree_by_path() Nguyễn Thái Ngọc Duy
2016-05-10 14:17 ` [PATCH 2/5] worktree.c: add is_main_worktree() Nguyễn Thái Ngọc Duy
2016-05-13 16:32 ` Eric Sunshine
2016-05-10 14:17 ` [PATCH 3/5] worktree.c: add is_worktree_locked() Nguyễn Thái Ngọc Duy
2016-05-13 16:52 ` Eric Sunshine
2016-05-22 9:53 ` Duy Nguyen
2016-05-23 2:04 ` Eric Sunshine
2016-05-10 14:17 ` [PATCH 4/5] worktree: add "lock" command Nguyễn Thái Ngọc Duy
2016-05-16 0:09 ` Eric Sunshine
2016-05-22 10:31 ` Duy Nguyen
2016-05-23 4:21 ` Eric Sunshine
2016-05-16 0:40 ` Eric Sunshine
2016-05-10 14:17 ` [PATCH 5/5] worktree: add "unlock" command Nguyễn Thái Ngọc Duy
2016-05-16 0:42 ` Eric Sunshine
2016-05-13 16:29 ` [PATCH 1/5] worktree.c: add find_worktree_by_path() Eric Sunshine
2016-05-10 17:32 ` [PATCH v3 05/13] worktree.c: mark current worktree Junio C Hamano
2016-05-10 23:03 ` Junio C Hamano
2016-05-11 0:33 ` Duy Nguyen
2016-05-22 9:33 ` [PATCH v2 0/6] nd/worktree-cleanup-post-head-protection update Nguyễn Thái Ngọc Duy
2016-05-22 9:33 ` [PATCH v2 1/6] completion: support git-worktree Nguyễn Thái Ngọc Duy
2016-05-22 9:33 ` [PATCH v2 2/6] worktree.c: rewrite mark_current_worktree() to avoid strbuf Nguyễn Thái Ngọc Duy
2016-05-22 9:33 ` [PATCH v2 3/6] git-worktree.txt: keep subcommand listing in alphabetical order Nguyễn Thái Ngọc Duy
2016-05-22 9:33 ` [PATCH v2 4/6] worktree.c: use is_dot_or_dotdot() Nguyễn Thái Ngọc Duy
2016-05-22 9:33 ` [PATCH v2 5/6] worktree: avoid 0{40}, too many zeroes, hard to read Nguyễn Thái Ngọc Duy
2016-05-22 9:33 ` [PATCH v2 6/6] worktree: simplify prefixing paths Nguyễn Thái Ngọc Duy
2016-05-22 23:32 ` Eric Sunshine
2016-05-23 4:31 ` Eric Sunshine
2016-05-23 9:26 ` Duy Nguyen
2016-05-23 1:09 ` [PATCH v2 0/6] nd/worktree-cleanup-post-head-protection update Eric Sunshine
2016-05-22 10:43 ` [PATCH v2 0/5] worktree lock/unlock Nguyễn Thái Ngọc Duy
2016-05-22 10:43 ` [PATCH v2 1/5] worktree.c: add find_worktree_by_path() Nguyễn Thái Ngọc Duy
2016-05-23 1:41 ` Eric Sunshine
2016-05-23 4:11 ` Eric Sunshine
2016-05-30 9:56 ` Duy Nguyen
2016-05-22 10:43 ` [PATCH v2 2/5] worktree.c: add is_main_worktree() Nguyễn Thái Ngọc Duy
2016-05-22 10:43 ` [PATCH v2 3/5] worktree.c: add is_worktree_locked() Nguyễn Thái Ngọc Duy
2016-05-22 10:43 ` [PATCH v2 4/5] worktree: add "lock" command Nguyễn Thái Ngọc Duy
2016-05-23 4:36 ` Eric Sunshine
2016-05-22 10:43 ` [PATCH v2 5/5] worktree: add "unlock" command Nguyễn Thái Ngọc Duy
2016-05-23 4:39 ` Eric Sunshine
2016-05-23 4:51 ` [PATCH v2 0/5] worktree lock/unlock Eric Sunshine
2016-05-23 9:23 ` Duy Nguyen
2016-05-30 10:49 ` [PATCH v3 0/6] " Nguyễn Thái Ngọc Duy
2016-05-30 10:49 ` [PATCH v3 1/6] worktree.c: add find_worktree() Nguyễn Thái Ngọc Duy
2016-05-30 10:49 ` [PATCH v3 2/6] worktree.c: find_worktree() learns to identify worktrees by basename Nguyễn Thái Ngọc Duy
2016-05-31 17:51 ` Junio C Hamano
2016-06-01 13:22 ` Duy Nguyen
2016-06-01 18:44 ` Junio C Hamano
2016-06-02 9:40 ` Duy Nguyen
2016-06-02 16:49 ` Junio C Hamano
2016-06-03 11:11 ` Duy Nguyen
2016-06-03 15:30 ` Junio C Hamano
2016-06-05 7:15 ` Johannes Schindelin
2016-05-30 10:49 ` [PATCH v3 3/6] worktree.c: add is_main_worktree() Nguyễn Thái Ngọc Duy
2016-05-31 17:52 ` Junio C Hamano
2016-05-30 10:49 ` [PATCH v3 4/6] worktree.c: retrieve lock status (and optionally reason) in get_worktrees() Nguyễn Thái Ngọc Duy
2016-05-31 17:55 ` Junio C Hamano
2016-06-01 13:02 ` Duy Nguyen
2016-06-01 15:23 ` Junio C Hamano
2016-05-30 10:49 ` [PATCH v3 5/6] worktree: add "lock" command Nguyễn Thái Ngọc Duy
2016-05-31 18:10 ` Junio C Hamano
2016-05-31 18:28 ` Junio C Hamano
2016-05-30 10:49 ` [PATCH v3 6/6] worktree: add "unlock" command Nguyễn Thái Ngọc Duy
2016-05-31 18:12 ` Junio C Hamano
2016-06-01 13:10 ` Duy Nguyen
2016-05-31 18:31 ` Junio C Hamano
2016-05-31 18:35 ` Junio C Hamano
2016-06-03 12:19 ` [PATCH v4 0/6] worktree lock/unlock Nguyễn Thái Ngọc Duy
2016-06-03 12:19 ` [PATCH v4 1/6] worktree.c: add find_worktree() Nguyễn Thái Ngọc Duy
2016-06-03 15:00 ` Ramsay Jones
2016-06-13 12:22 ` Duy Nguyen
2016-06-03 12:19 ` [PATCH v4 2/6] worktree.c: add is_main_worktree() Nguyễn Thái Ngọc Duy
2016-06-03 12:19 ` [PATCH v4 3/6] worktree.c: add is_worktree_locked() Nguyễn Thái Ngọc Duy
2016-06-03 12:19 ` [PATCH v4 4/6] worktree: add "lock" command Nguyễn Thái Ngọc Duy
2016-06-03 12:19 ` [PATCH v4 5/6] worktree: add "unlock" command Nguyễn Thái Ngọc Duy
2016-06-03 12:19 ` [PATCH v4 6/6] worktree.c: find_worktree() search by path suffix Nguyễn Thái Ngọc Duy
2016-06-04 5:14 ` [PATCH v4 0/6] worktree lock/unlock Junio C Hamano
2016-06-13 12:18 ` [PATCH v5 " Nguyễn Thái Ngọc Duy
2016-06-13 12:18 ` [PATCH v5 1/6] worktree.c: add find_worktree() Nguyễn Thái Ngọc Duy
2016-06-13 12:18 ` [PATCH v5 2/6] worktree.c: add is_main_worktree() Nguyễn Thái Ngọc Duy
2016-06-13 12:18 ` [PATCH v5 3/6] worktree.c: add is_worktree_locked() Nguyễn Thái Ngọc Duy
2016-06-13 12:18 ` [PATCH v5 4/6] worktree: add "lock" command Nguyễn Thái Ngọc Duy
2016-06-13 12:18 ` [PATCH v5 5/6] worktree: add "unlock" command Nguyễn Thái Ngọc Duy
2016-06-13 12:18 ` [PATCH v5 6/6] worktree.c: find_worktree() search by path suffix Nguyễn Thái Ngọc Duy
2016-06-27 9:57 ` [PATCH v4 0/6] worktree lock/unlock Torsten Bögershausen
2016-06-30 16:01 ` [PATCH] fixup! worktree: add "lock" command Nguyễn Thái Ngọc Duy
2016-04-22 13:01 ` [PATCH v3 06/13] path.c: refactor and add worktree_git_path() Nguyễn Thái Ngọc Duy
2016-04-22 13:01 ` [PATCH v3 07/13] wt-status.c: split rebase detection out of wt_status_get_state() Nguyễn Thái Ngọc Duy
2016-04-22 13:01 ` [PATCH v3 08/13] wt-status.c: make wt_status_check_rebase() work on any worktree Nguyễn Thái Ngọc Duy
2016-04-22 13:01 ` [PATCH v3 09/13] worktree.c: avoid referencing to worktrees[i] multiple times Nguyễn Thái Ngọc Duy
2016-04-22 13:01 ` [PATCH v3 10/13] worktree.c: check whether branch is rebased in another worktree Nguyễn Thái Ngọc Duy
2016-04-22 13:01 ` [PATCH v3 11/13] wt-status.c: split bisect detection out of wt_status_get_state() Nguyễn Thái Ngọc Duy
2016-04-22 13:01 ` [PATCH v3 12/13] worktree.c: check whether branch is bisected in another worktree Nguyễn Thái Ngọc Duy
2016-05-11 5:45 ` Eric Sunshine
2016-04-22 13:01 ` [PATCH v3 13/13] branch: do not rename a branch under bisect or rebase Nguyễn Thái Ngọc Duy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1461330096-21783-1-git-send-email-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=rappazzo@gmail.com \
--cc=rethab.ch@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.