From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
"Mark Levedahl" <mlevedahl@gmail.com>,
"Max Kirillov" <max@max630.net>,
"Jens Lehmann" <Jens.Lehmann@web.de>,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH 2/3] checkout: add --ignore-other-wortrees
Date: Sat, 3 Jan 2015 16:41:26 +0700 [thread overview]
Message-ID: <1420278087-14613-3-git-send-email-pclouds@gmail.com> (raw)
In-Reply-To: <1420278087-14613-1-git-send-email-pclouds@gmail.com>
Noticed-by: Mark Levedahl <mlevedahl@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
Documentation/git-checkout.txt | 6 ++++++
builtin/checkout.c | 6 +++++-
t/t2025-checkout-to.sh | 7 +++++++
3 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/Documentation/git-checkout.txt b/Documentation/git-checkout.txt
index 0c13825..52eaa48 100644
--- a/Documentation/git-checkout.txt
+++ b/Documentation/git-checkout.txt
@@ -232,6 +232,12 @@ section of linkgit:git-add[1] to learn how to operate the `--patch` mode.
specific files such as HEAD, index... See "MULTIPLE WORKING
TREES" section for more information.
+--ignore-other-worktrees::
+ `git checkout` refuses when the wanted ref is already checked
+ out by another worktree. This option makes it check the ref
+ out anyway. In other words, the ref can be held by more than one
+ worktree.
+
<branch>::
Branch to checkout; if it refers to a branch (i.e., a name that,
when prepended with "refs/heads/", is a valid ref), then that
diff --git a/builtin/checkout.c b/builtin/checkout.c
index d8717ef..8b2bf20 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -37,6 +37,7 @@ struct checkout_opts {
int writeout_stage;
int overwrite_ignore;
int ignore_skipworktree;
+ int ignore_other_worktrees;
const char *new_branch;
const char *new_branch_force;
@@ -1210,7 +1211,8 @@ static int parse_branchname_arg(int argc, const char **argv,
int flag;
char *head_ref = resolve_refdup("HEAD", 0, sha1, &flag);
if (head_ref &&
- (!(flag & REF_ISSYMREF) || strcmp(head_ref, new->path)))
+ (!(flag & REF_ISSYMREF) || strcmp(head_ref, new->path)) &&
+ !opts->ignore_other_worktrees)
check_linked_checkouts(new);
free(head_ref);
}
@@ -1341,6 +1343,8 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
N_("second guess 'git checkout no-such-branch'")),
OPT_FILENAME(0, "to", &opts.new_worktree,
N_("check a branch out in a separate working directory")),
+ OPT_BOOL(0, "ignore-other-worktrees", &opts.ignore_other_worktrees,
+ N_("do not check if another worktree is holding the given ref")),
OPT_END(),
};
diff --git a/t/t2025-checkout-to.sh b/t/t2025-checkout-to.sh
index 915b506..f8e4df4 100755
--- a/t/t2025-checkout-to.sh
+++ b/t/t2025-checkout-to.sh
@@ -79,6 +79,13 @@ test_expect_success 'die the same branch is already checked out' '
)
'
+test_expect_success 'not die the same branch is already checked out' '
+ (
+ cd here &&
+ git checkout --ignore-other-worktrees --to anothernewmaster newmaster
+ )
+'
+
test_expect_success 'not die on re-checking out current branch' '
(
cd there &&
--
2.2.0.84.ge9c7a8a
next prev parent reply other threads:[~2015-01-03 9:42 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-03 9:41 [PATCH 0/3] nd/multiple-work-trees updates Nguyễn Thái Ngọc Duy
2015-01-03 9:41 ` [PATCH 1/3] checkout: pass whole struct to parse_branchname_arg instead of individual flags Nguyễn Thái Ngọc Duy
2015-01-03 9:41 ` Nguyễn Thái Ngọc Duy [this message]
2015-01-05 3:50 ` [PATCH 2/3] checkout: add --ignore-other-wortrees Mark Levedahl
2015-01-03 9:41 ` [PATCH 3/3] git-checkout.txt: a note about multiple checkout support for submodules Nguyễn Thái Ngọc Duy
2015-01-05 3:43 ` Mark Levedahl
2015-01-06 21:30 ` Max Kirillov
2015-02-12 22:57 ` [PATCH 0/3] nd/multiple-work-trees updates Junio C Hamano
2015-02-12 23:51 ` Jens Lehmann
2015-02-13 3:17 ` Mark Levedahl
2015-02-13 9:10 ` Dennis Kaarsemaker
2015-02-13 10:14 ` Duy Nguyen
2015-03-18 8:04 ` Ephrim Khong
2015-03-18 8:23 ` Duy Nguyen
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=1420278087-14613-3-git-send-email-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=Jens.Lehmann@web.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=max@max630.net \
--cc=mlevedahl@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.