From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>
Cc: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH] checkout: do not switch branch during a rebase unless -f is given
Date: Tue, 28 Sep 2010 14:55:02 +1000 [thread overview]
Message-ID: <1285649702-24773-1-git-send-email-pclouds@gmail.com> (raw)
In-Reply-To: <1285649564-24737-1-git-send-email-pclouds@gmail.com>
It does not make much sense to switch branch when you are in a middle
of a rebase. Sometimes you might want to switch away for a moment then
back with "git checkout - ". But I find myself so many times switching
away then forget that I was rebasing something.
Avoid doing that by default. Users can use -f if they really want to.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
Sorry, the previous patch had wrong subject line
I know there are other commands like rebase ("git am" comes to mind)
but I don't use those. Feel free to put some more on top if somebody
finds it a good thing to do.
builtin/checkout.c | 7 +++++++
t/t2018-checkout-branch.sh | 22 ++++++++++++++++++++++
2 files changed, 29 insertions(+), 0 deletions(-)
diff --git a/builtin/checkout.c b/builtin/checkout.c
index cc622c0..7d8ba04 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -571,6 +571,13 @@ static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
struct branch_info old;
unsigned char rev[20];
int flag;
+ struct stat st;
+
+ if (!opts->force &&
+ ((!stat(git_path("rebase-merge"), &st) && S_ISDIR(st.st_mode)) ||
+ (!stat(git_path("rebase-apply"), &st) && S_ISDIR(st.st_mode))))
+ die("You should not switch branch during a rebase. Use '-f' if you really want to.");
+
memset(&old, 0, sizeof(old));
old.path = resolve_ref("HEAD", rev, 0, &flag);
old.commit = lookup_commit_reference_gently(rev, 1);
diff --git a/t/t2018-checkout-branch.sh b/t/t2018-checkout-branch.sh
index fa69016..95a1da8 100755
--- a/t/t2018-checkout-branch.sh
+++ b/t/t2018-checkout-branch.sh
@@ -169,4 +169,26 @@ test_expect_success 'checkout -f -B to an existing branch with mergeable changes
test_must_fail test_dirty_mergeable
'
+test_expect_success 'checkout fails during rebase' '
+ git reset --hard &&
+ git checkout branch1 &&
+ mkdir .git/rebase-merge &&
+ test_must_fail git checkout branch2 &&
+ git checkout -f branch2
+'
+
+test_expect_success 'checkout fails during rebase (2)' '
+ rmdir .git/rebase-merge &&
+ git reset --hard &&
+ git checkout branch1 &&
+ mkdir .git/rebase-apply &&
+ test_must_fail git checkout branch2 &&
+ git checkout -f branch2
+'
+
+# this is to be incorporated to the next test
+test_expect_success 'cleanup' '
+ rmdir .git/rebase-apply
+'
+
test_done
--
1.7.1.rc1.70.g788ca
next prev parent reply other threads:[~2010-09-28 4:55 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-28 4:52 [PATCH] commit: do not switch branch during a rebase unless -f is given Nguyễn Thái Ngọc Duy
2010-09-28 4:55 ` Nguyễn Thái Ngọc Duy [this message]
2010-09-28 5:33 ` [PATCH] checkout: " Jonathan Nieder
2010-09-28 5:47 ` Nguyen Thai Ngoc Duy
2010-11-09 13:40 ` Nguyen Thai Ngoc Duy
2010-11-09 14:06 ` Jonathan Nieder
2010-11-09 14:11 ` Sverre Rabbelier
2010-11-09 14:36 ` Jonathan Nieder
2010-11-09 14:15 ` Nguyen Thai Ngoc Duy
2010-11-09 14:38 ` Jonathan Nieder
2010-09-28 5:38 ` [PATCH] commit: " Junio C Hamano
2010-09-28 11:24 ` Sverre Rabbelier
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=1285649702-24773-1-git-send-email-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.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.