blob: 85c8bd6ea2e546be1f118fbc1502c29dbd999ff8 [file] [edit]
#!/bin/sh
test_description='git refs create'
. ./test-lib.sh
setup_repo () {
git init "$1" &&
test_commit -C "$1" A &&
test_commit -C "$1" B
}
test_ref_matches () {
git rev-parse "$1" >expect &&
echo "$2" >actual &&
test_cmp expect actual
}
test_expect_success 'create a new reference' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
(
cd repo &&
A=$(git rev-parse A) &&
git refs create refs/heads/foo $A &&
test_ref_matches refs/heads/foo "$A"
)
'
test_expect_success 'create fails when the reference already exists' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
(
cd repo &&
A=$(git rev-parse A) &&
B=$(git rev-parse B) &&
git refs create refs/heads/foo $A &&
test_must_fail git refs create refs/heads/foo $B 2>err &&
test_grep "reference already exists" err &&
test_ref_matches refs/heads/foo "$A"
)
'
test_expect_success 'create with null new value fails' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
(
cd repo &&
test_must_fail git refs create refs/heads/foo $ZERO_OID 2>err &&
test_grep "null old object ID" err &&
test_must_fail git refs exists refs/heads/foo
)
'
test_expect_success 'create with invalid new value fails' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
(
cd repo &&
test_must_fail git refs create refs/heads/foo invalid-oid 2>err &&
test_grep "invalid object ID" err &&
test_must_fail git refs exists refs/heads/foo
)
'
test_expect_success 'create does not create a reflog by default' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
(
cd repo &&
A=$(git rev-parse A) &&
git refs create refs/foo $A &&
test_must_fail git reflog exists refs/foo
)
'
test_expect_success 'create creates a reflog with --create-reflog' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
(
cd repo &&
A=$(git rev-parse A) &&
git refs create --create-reflog refs/foo $A &&
git reflog exists refs/foo
)
'
test_expect_success 'create with message records reason in reflog' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
(
cd repo &&
A=$(git rev-parse A) &&
git refs create --message="create reason" refs/heads/foo $A &&
git reflog show refs/heads/foo >actual &&
test_grep "create reason$" actual
)
'
test_expect_success 'create with symref target creates target reference' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
(
cd repo &&
A=$(git rev-parse A) &&
git symbolic-ref refs/heads/symref refs/heads/target &&
git refs create refs/heads/symref $A &&
git reflog exists refs/heads/target
)
'
test_expect_success 'create with symref target and --no-deref refuses to create reference' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
(
cd repo &&
A=$(git rev-parse A) &&
git symbolic-ref refs/heads/symref refs/heads/target &&
test_must_fail git refs create --no-deref refs/heads/symref $A 2>err &&
test_grep "dangling symref already exists" err &&
test_must_fail git reflog exists refs/heads/target
)
'
test_expect_success 'create with empty message fails' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
(
cd repo &&
A=$(git rev-parse A) &&
test_must_fail git refs create --message= refs/heads/foo $A 2>err &&
test_grep "empty message" err &&
test_must_fail git refs exists refs/heads/foo
)
'
test_expect_success 'create without arguments fails' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
test_must_fail git -C repo refs create 2>err &&
test_grep "requires reference name" err
'
test_expect_success 'create with too many arguments fails' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
test_must_fail git -C repo refs create refs/heads/foo a b 2>err &&
test_grep "requires reference name" err
'
test_done