mirror of
https://github.com/mnauw/git-remote-hg.git
synced 2025-10-26 14:16:07 +01:00
316 lines
5.9 KiB
Bash
Executable File
316 lines
5.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
CAPABILITY_PUSH=t
|
|
|
|
. ./main.t
|
|
|
|
|
|
# .. and some push mode only specific tests
|
|
|
|
test_expect_success 'remote delete bookmark' '
|
|
test_when_finished "rm -rf hgrepo* gitrepo*" &&
|
|
|
|
(
|
|
hg init hgrepo &&
|
|
cd hgrepo &&
|
|
echo zero > content &&
|
|
hg add content &&
|
|
hg commit -m zero
|
|
hg bookmark feature-a
|
|
) &&
|
|
|
|
git clone "hg::hgrepo" gitrepo &&
|
|
check_bookmark hgrepo feature-a zero &&
|
|
|
|
(
|
|
cd gitrepo &&
|
|
git push --quiet origin :feature-a
|
|
) &&
|
|
|
|
check_bookmark hgrepo feature-a ''
|
|
'
|
|
|
|
test_expect_success 'source:dest bookmark' '
|
|
test_when_finished "rm -rf hgrepo gitrepo" &&
|
|
|
|
(
|
|
hg init hgrepo &&
|
|
cd hgrepo &&
|
|
echo zero > content &&
|
|
hg add content &&
|
|
hg commit -m zero
|
|
) &&
|
|
|
|
git clone "hg::hgrepo" gitrepo &&
|
|
|
|
(
|
|
cd gitrepo &&
|
|
echo one > content &&
|
|
git commit -a -m one &&
|
|
git push --quiet origin master:feature-b &&
|
|
git push --quiet origin master^:refs/heads/feature-a
|
|
) &&
|
|
|
|
check_bookmark hgrepo feature-a zero &&
|
|
check_bookmark hgrepo feature-b one &&
|
|
|
|
(
|
|
cd gitrepo &&
|
|
git push --quiet origin master:feature-a
|
|
) &&
|
|
|
|
check_bookmark hgrepo feature-a one
|
|
'
|
|
|
|
setup_check_hg_commits_repo () {
|
|
(
|
|
rm -rf hgrepo* &&
|
|
hg init hgrepo &&
|
|
cd hgrepo &&
|
|
echo zero > content &&
|
|
hg add content &&
|
|
hg commit -m zero
|
|
) &&
|
|
|
|
git clone "hg::hgrepo" gitrepo &&
|
|
hg clone hgrepo hgrepo.second &&
|
|
|
|
(
|
|
cd gitrepo &&
|
|
git remote add second hg::../hgrepo.second &&
|
|
git fetch second
|
|
) &&
|
|
|
|
(
|
|
cd hgrepo &&
|
|
echo one > content &&
|
|
hg commit -m one &&
|
|
echo two > content &&
|
|
hg commit -m two &&
|
|
echo three > content &&
|
|
hg commit -m three &&
|
|
hg move content content-move &&
|
|
hg commit -m moved &&
|
|
hg move content-move content &&
|
|
hg commit -m restored
|
|
)
|
|
}
|
|
|
|
# a shared bag would make all of the following pretty trivial
|
|
git config --global remote-hg.shared-marks false
|
|
|
|
git config --global remote-hg.check-hg-commits fail
|
|
test_expect_success 'check-hg-commits with fail mode' '
|
|
test_when_finished "rm -rf gitrepo* hgrepo*" &&
|
|
|
|
setup_check_hg_commits_repo &&
|
|
|
|
(
|
|
cd gitrepo &&
|
|
git fetch origin &&
|
|
git reset --hard origin/master &&
|
|
! git push second master 2>../error
|
|
)
|
|
|
|
cat error &&
|
|
grep rejected error | grep hg
|
|
'
|
|
|
|
git config --global remote-hg.check-hg-commits push
|
|
# codepath for push is slightly different depending on shared proxy involved
|
|
# so tweak to test both
|
|
check_hg_commits_push () {
|
|
test_when_finished "rm -rf gitrepo* hgrepo*" &&
|
|
|
|
setup_check_hg_commits_repo &&
|
|
|
|
(
|
|
cd gitrepo &&
|
|
git fetch origin &&
|
|
git reset --hard origin/master &&
|
|
git push second master 2> ../error
|
|
) &&
|
|
|
|
cat error &&
|
|
grep "hg changeset" error &&
|
|
|
|
hg log -R hgrepo > expected &&
|
|
hg log -R hgrepo.second | grep -v bookmark > actual &&
|
|
test_cmp expected actual
|
|
}
|
|
|
|
unset GIT_REMOTE_HG_TEST_REMOTE
|
|
test_expect_success 'check-hg-commits with push mode - no local proxy' '
|
|
check_hg_commits_push
|
|
'
|
|
|
|
GIT_REMOTE_HG_TEST_REMOTE=1 &&
|
|
export GIT_REMOTE_HG_TEST_REMOTE
|
|
test_expect_success 'check-hg-commits with push mode - with local proxy' '
|
|
check_hg_commits_push
|
|
'
|
|
|
|
setup_check_shared_marks_repo () {
|
|
(
|
|
rm -rf hgrepo* &&
|
|
hg init hgrepo &&
|
|
cd hgrepo &&
|
|
echo zero > content &&
|
|
hg add content &&
|
|
hg commit -m zero
|
|
) &&
|
|
|
|
git clone "hg::hgrepo" gitrepo &&
|
|
|
|
(
|
|
cd gitrepo &&
|
|
git remote add second hg::../hgrepo &&
|
|
git fetch second
|
|
)
|
|
}
|
|
|
|
check_marks () {
|
|
dir=$1
|
|
|
|
ls -al $dir &&
|
|
if test "$2" = "y"
|
|
then
|
|
test -f $dir/marks-git && test -f $dir/marks-hg
|
|
else
|
|
test ! -f $dir/marks-git && test ! -f $dir/marks-hg
|
|
fi
|
|
}
|
|
|
|
# cleanup setting
|
|
git config --global --unset remote-hg.shared-marks
|
|
|
|
test_expect_success 'shared-marks unset' '
|
|
test_when_finished "rm -rf gitrepo* hgrepo*" &&
|
|
|
|
setup_check_shared_marks_repo &&
|
|
|
|
(
|
|
cd gitrepo &&
|
|
check_marks .git/hg y &&
|
|
check_marks .git/hg/origin n &&
|
|
check_marks .git/hg/second n
|
|
)
|
|
'
|
|
|
|
test_expect_success 'shared-marks set to unset' '
|
|
test_when_finished "rm -rf gitrepo* hgrepo*" &&
|
|
|
|
git config --global remote-hg.shared-marks true &&
|
|
setup_check_shared_marks_repo &&
|
|
|
|
(
|
|
cd gitrepo &&
|
|
check_marks .git/hg y &&
|
|
check_marks .git/hg/origin n &&
|
|
check_marks .git/hg/second n
|
|
) &&
|
|
|
|
git config --global remote-hg.shared-marks false &&
|
|
(
|
|
cd gitrepo &&
|
|
git fetch origin &&
|
|
check_marks .git/hg n &&
|
|
check_marks .git/hg/origin y &&
|
|
check_marks .git/hg/second y
|
|
)
|
|
'
|
|
|
|
test_expect_success 'shared-marks unset to set' '
|
|
test_when_finished "rm -rf gitrepo* hgrepo*" &&
|
|
|
|
git config --global remote-hg.shared-marks false &&
|
|
setup_check_shared_marks_repo &&
|
|
|
|
(
|
|
cd gitrepo &&
|
|
check_marks .git/hg n &&
|
|
check_marks .git/hg/origin y &&
|
|
check_marks .git/hg/second y
|
|
) &&
|
|
|
|
git config --global --unset remote-hg.shared-marks &&
|
|
(
|
|
cd gitrepo &&
|
|
git fetch origin &&
|
|
check_marks .git/hg n &&
|
|
check_marks .git/hg/origin y &&
|
|
check_marks .git/hg/second y
|
|
) &&
|
|
|
|
git config --global remote-hg.shared-marks true &&
|
|
(
|
|
cd gitrepo &&
|
|
git fetch origin &&
|
|
check_marks .git/hg y &&
|
|
check_marks .git/hg/origin n &&
|
|
check_marks .git/hg/second n
|
|
)
|
|
'
|
|
|
|
test_expect_success 'push with renamed executable preserves executable bit' '
|
|
test_when_finished "rm -rf hgrepo gitrepo*" &&
|
|
|
|
hg init hgrepo &&
|
|
|
|
(
|
|
git init gitrepo &&
|
|
cd gitrepo &&
|
|
git remote add origin "hg::../hgrepo" &&
|
|
echo one > content &&
|
|
chmod a+x content &&
|
|
git add content &&
|
|
git commit -a -m one &&
|
|
git mv content content2 &&
|
|
git commit -a -m two &&
|
|
git push origin master
|
|
) &&
|
|
|
|
(
|
|
umask 0 &&
|
|
cd hgrepo &&
|
|
hg update &&
|
|
stat content2 >expected &&
|
|
grep -- -r.xr.xr.x expected
|
|
)
|
|
'
|
|
|
|
test_expect_success 'push with submodule' '
|
|
test_when_finished "rm -rf sub hgrepo gitrepo*" &&
|
|
|
|
hg init hgrepo &&
|
|
|
|
(
|
|
git init sub &&
|
|
cd sub &&
|
|
: >empty &&
|
|
git add empty &&
|
|
git commit -m init
|
|
) &&
|
|
|
|
(
|
|
git init gitrepo &&
|
|
cd gitrepo &&
|
|
git submodule add ../sub sub &&
|
|
git remote add origin "hg::../hgrepo" &&
|
|
git commit -a -m sub &&
|
|
git push origin master
|
|
) &&
|
|
|
|
(
|
|
cd hgrepo &&
|
|
hg update &&
|
|
expected="[git-remote-hg: skipped import of submodule at $(git -C ../sub rev-parse HEAD)]"
|
|
test "$expected" = "$(cat sub)"
|
|
)
|
|
'
|
|
|
|
# cleanup setting
|
|
git config --global --unset remote-hg.shared-marks
|
|
|
|
test_done
|