mirror of
https://github.com/git/git
synced 2024-08-28 12:09:19 +00:00
Merge branch 'jk/checkout-orphan-warning'
* jk/checkout-orphan-warning: checkout: tweak detached-orphan warning format checkout: clear commit marks after detached-orphan check checkout: add basic tests for detached-orphan warning
This commit is contained in:
commit
4d46ee74e1
|
@ -603,13 +603,26 @@ static int add_one_ref_to_rev_list_arg(const char *refname,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int clear_commit_marks_from_one_ref(const char *refname,
|
||||
const unsigned char *sha1,
|
||||
int flags,
|
||||
void *cb_data)
|
||||
{
|
||||
struct commit *commit = lookup_commit_reference_gently(sha1, 1);
|
||||
if (commit)
|
||||
clear_commit_marks(commit, -1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void describe_one_orphan(struct strbuf *sb, struct commit *commit)
|
||||
{
|
||||
struct pretty_print_context ctx = { 0 };
|
||||
|
||||
parse_commit(commit);
|
||||
strbuf_addstr(sb, " - ");
|
||||
strbuf_addstr(sb, " ");
|
||||
strbuf_addstr(sb,
|
||||
find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV));
|
||||
strbuf_addch(sb, ' ');
|
||||
pretty_print_commit(CMIT_FMT_ONELINE, commit, sb, &ctx);
|
||||
strbuf_addch(sb, '\n');
|
||||
}
|
||||
|
@ -674,6 +687,9 @@ static void orphaned_commit_warning(struct commit *commit)
|
|||
suggest_reattach(commit, &revs);
|
||||
else
|
||||
describe_detached_head("Previous HEAD position was", commit);
|
||||
|
||||
clear_commit_marks(commit, -1);
|
||||
for_each_ref(clear_commit_marks_from_one_ref, NULL);
|
||||
}
|
||||
|
||||
static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
|
||||
|
|
|
@ -11,6 +11,14 @@ check_not_detached () {
|
|||
git symbolic-ref -q HEAD >/dev/null
|
||||
}
|
||||
|
||||
ORPHAN_WARNING='you are leaving .* commit.*behind'
|
||||
check_orphan_warning() {
|
||||
grep "$ORPHAN_WARNING" "$1"
|
||||
}
|
||||
check_no_orphan_warning() {
|
||||
! grep "$ORPHAN_WARNING" "$1"
|
||||
}
|
||||
|
||||
reset () {
|
||||
git checkout master &&
|
||||
check_not_detached
|
||||
|
@ -19,6 +27,8 @@ reset () {
|
|||
test_expect_success 'setup' '
|
||||
test_commit one &&
|
||||
test_commit two &&
|
||||
test_commit three && git tag -d three &&
|
||||
test_commit four && git tag -d four &&
|
||||
git branch branch &&
|
||||
git tag tag
|
||||
'
|
||||
|
@ -92,4 +102,41 @@ test_expect_success 'checkout --detach moves HEAD' '
|
|||
git diff --exit-code two
|
||||
'
|
||||
|
||||
test_expect_success 'checkout warns on orphan commits' '
|
||||
reset &&
|
||||
git checkout --detach two &&
|
||||
echo content >orphan &&
|
||||
git add orphan &&
|
||||
git commit -a -m orphan &&
|
||||
git checkout master 2>stderr &&
|
||||
check_orphan_warning stderr
|
||||
'
|
||||
|
||||
test_expect_success 'checkout does not warn leaving ref tip' '
|
||||
reset &&
|
||||
git checkout --detach two &&
|
||||
git checkout master 2>stderr &&
|
||||
check_no_orphan_warning stderr
|
||||
'
|
||||
|
||||
test_expect_success 'checkout does not warn leaving reachable commit' '
|
||||
reset &&
|
||||
git checkout --detach HEAD^ &&
|
||||
git checkout master 2>stderr &&
|
||||
check_no_orphan_warning stderr
|
||||
'
|
||||
|
||||
cat >expect <<'EOF'
|
||||
Your branch is behind 'master' by 1 commit, and can be fast-forwarded.
|
||||
EOF
|
||||
test_expect_success 'tracking count is accurate after orphan check' '
|
||||
reset &&
|
||||
git branch child master^ &&
|
||||
git config branch.child.remote . &&
|
||||
git config branch.child.merge refs/heads/master &&
|
||||
git checkout child^ &&
|
||||
git checkout child >stdout &&
|
||||
test_cmp expect stdout
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
Loading…
Reference in a new issue