summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2016-09-08 21:35:54 -0700
committerLibravatar Junio C Hamano <gitster@pobox.com>2016-09-08 21:35:54 -0700
commit7c96471947c680d884e0ec7ea4f1087d14496f55 (patch)
tree1d6120feebea4c92e4d64cf3c83c364fdc33331c
parentMerge branch 'rs/pull-signed-tag' into maint (diff)
parentcheckout: do not mention detach advice for explicit --detach option (diff)
downloadtgif-7c96471947c680d884e0ec7ea4f1087d14496f55.tar.xz
Merge branch 'sb/checkout-explit-detach-no-advice' into maint
"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 c3486bdec3..91bafdaef4 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -655,7 +655,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 5d68729d7a..fbb4ee9bb4 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