aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2016-08-19 15:34:15 -0700
committerJunio C Hamano <gitster@pobox.com>2016-08-19 15:34:15 -0700
commite6dab9f62fbda86d0adb530f0c2a543e3e2ed118 (patch)
tree12179049c1db721b1aa60404b3e8d75bdd5e266e
parent643b62213e7da395354b578271f37711b6aed61b (diff)
parent779b88a91fb9719683bed78c81ef6ace1cedd7da (diff)
downloadgit-e6dab9f62fbda86d0adb530f0c2a543e3e2ed118.tar.gz
git-e6dab9f62fbda86d0adb530f0c2a543e3e2ed118.tar.xz
Merge branch 'sb/checkout-explit-detach-no-advice'
"git checkout --detach <branch>" used to give the same advice message as that is issued when "git checkout <tag>" (or anything that is not a branch name) is given, but asking with "--detach" is an explicit enough sign that the user knows what is going on. The advice message has been squelched in this case. * sb/checkout-explit-detach-no-advice: checkout: do not mention detach advice for explicit --detach option
-rw-r--r--builtin/checkout.c3
-rwxr-xr-xt/t2020-checkout-detach.sh23
2 files changed, 25 insertions, 1 deletions
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 486611152..8672d0724 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -658,7 +658,8 @@ static void update_refs_for_switch(const struct checkout_opts *opts,
update_ref(msg.buf, "HEAD", new->commit->object.oid.hash, NULL,
REF_NODEREF, UPDATE_REFS_DIE_ON_ERR);
if (!opts->quiet) {
- if (old->path && advice_detached_head)
+ if (old->path &&
+ advice_detached_head && !opts->force_detach)
detach_advice(new->name);
describe_detached_head(_("HEAD is now at"), new->commit);
}
diff --git a/t/t2020-checkout-detach.sh b/t/t2020-checkout-detach.sh
index 5d68729d7..fbb4ee9bb 100755
--- a/t/t2020-checkout-detach.sh
+++ b/t/t2020-checkout-detach.sh
@@ -163,4 +163,27 @@ test_expect_success 'tracking count is accurate after orphan check' '
test_i18ncmp expect stdout
'
+test_expect_success 'no advice given for explicit detached head state' '
+ # baseline
+ test_config advice.detachedHead true &&
+ git checkout child && git checkout HEAD^0 >expect.advice 2>&1 &&
+ test_config advice.detachedHead false &&
+ git checkout child && git checkout HEAD^0 >expect.no-advice 2>&1 &&
+ test_unconfig advice.detachedHead &&
+ # without configuration, the advice.* variables default to true
+ git checkout child && git checkout HEAD^0 >actual 2>&1 &&
+ test_cmp expect.advice actual &&
+
+ # with explicit --detach
+ # no configuration
+ test_unconfig advice.detachedHead &&
+ git checkout child && git checkout --detach HEAD^0 >actual 2>&1 &&
+ test_cmp expect.no-advice actual &&
+
+ # explicitly decline advice
+ test_config advice.detachedHead false &&
+ git checkout child && git checkout --detach HEAD^0 >actual 2>&1 &&
+ test_cmp expect.no-advice actual
+'
+
test_done