blob: 2b28be75c82cb20d861493256140edee0cc8067b [file] [edit]
#!/bin/sh
test_description='git refs rename'
. ./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 'rename an existing reference' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
(
cd repo &&
A=$(git rev-parse A) &&
git refs update refs/heads/foo $A &&
git refs rename refs/heads/foo refs/heads/bar &&
test_must_fail git refs exists refs/heads/foo &&
test_ref_matches refs/heads/bar $A
)
'
test_expect_success 'rename moves the reflog along with the reference' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
(
cd repo &&
A=$(git rev-parse A) &&
git refs update --message="rename me" refs/heads/foo $A &&
git refs rename refs/heads/foo refs/heads/bar &&
git reflog show refs/heads/bar >reflog &&
test_grep "rename me" reflog &&
test_must_fail git reflog exists refs/heads/foo
)
'
test_expect_success 'rename with message records reason in reflog' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
(
cd repo &&
A=$(git rev-parse A) &&
git refs update refs/heads/foo $A &&
git refs rename --message="rename reason" refs/heads/foo refs/heads/bar &&
git reflog show refs/heads/bar >actual &&
test_grep "rename reason" actual
)
'
test_expect_success 'rename a nonexistent reference fails' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
(
cd repo &&
test_must_fail git refs rename refs/heads/foo refs/heads/bar 2>err &&
test_grep "reference does not exist" err
)
'
test_expect_success 'rename to an existing reference fails' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
(
cd repo &&
A=$(git rev-parse A) &&
B=$(git rev-parse B) &&
git refs update refs/heads/foo $A &&
git refs update refs/heads/bar $B &&
test_must_fail git refs rename refs/heads/foo refs/heads/bar 2>err &&
test_grep "reference already exists" err
)
'
test_expect_success 'rename with symbolic ref fails' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
(
cd repo &&
A=$(git rev-parse A) &&
git refs create refs/heads/target $A &&
git symbolic-ref refs/heads/symref refs/heads/target &&
! git refs rename refs/heads/symref refs/heads/renamed 2>err &&
test_grep "is a symbolic ref, .* not supported" err
)
'
test_expect_success 'rename with empty message fails' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
(
cd repo &&
A=$(git rev-parse A) &&
git refs update refs/heads/foo $A &&
test_must_fail git refs rename --message= refs/heads/foo refs/heads/bar 2>err &&
test_grep "empty message" err
)
'
test_expect_success 'rename with invalid old reference name fails' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
(
cd repo &&
test_must_fail git refs rename "refs/heads/foo..bar" refs/heads/bar 2>err &&
test_grep "invalid ref format" err
)
'
test_expect_success 'rename with invalid new reference name fails' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
(
cd repo &&
A=$(git rev-parse A) &&
git refs update refs/heads/foo $A &&
test_must_fail git refs rename refs/heads/foo "refs/heads/bar..baz" 2>err &&
test_grep "invalid ref format" err
)
'
test_expect_success 'rename with too few arguments fails' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
test_must_fail git -C repo refs rename refs/heads/foo 2>err &&
test_grep "requires old and new reference name" err
'
test_expect_success 'rename with too many arguments fails' '
test_when_finished "rm -rf repo" &&
setup_repo repo &&
test_must_fail git -C repo refs rename refs/heads/foo refs/heads/bar refs/heads/baz 2>err &&
test_grep "requires old and new reference name" err
'
test_done