summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Beller <sbeller@google.com>2016-08-15 11:40:21 -0700
committerJunio C Hamano <gitster@pobox.com>2016-08-15 15:01:45 -0700
commit779b88a91fb9719683bed78c81ef6ace1cedd7da (patch)
treea17291d251b0c6b912a93e76ec2ab6083f24dbb0
parente0c1ceafc5bece92d35773a75fff59497e1d9bd5 (diff)
downloadgit-779b88a91fb9719683bed78c81ef6ace1cedd7da.tar.gz
checkout: do not mention detach advice for explicit --detach optionsb/checkout-explit-detach-no-advice
When a user asked for a detached HEAD specifically with `--detach`, we do not need to give advice on what a detached HEAD state entails as we can assume they know what they're getting into as they asked for it. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-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