remote-hg: always point HEAD to master

Mercurial always checks out the 'default' branch, so there's no point in
complicating our lives trying to do something fancier, which causes
different behavior depending on whether the repository is local or
remote.

So let's always use 'default' (which we translate to 'master'), unless
we are in hg-git mode, which expects us to use the 'master' bookmark
instead.

Also, update the tests that used to check for different checkout
behaviors to simply check that the refs are there, remove unnecessary
ones, and fix the ones that expect something different.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Felipe Contreras
2013-05-24 21:29:34 -05:00
committed by Junio C Hamano
parent 63f54cf216
commit 91347ea3e1
4 changed files with 26 additions and 52 deletions

View File

@ -560,21 +560,15 @@ def get_branch_tip(repo, branch):
return heads[0] return heads[0]
def list_head(repo, cur): def list_head(repo, cur):
global g_head, bmarks global g_head, bmarks, fake_bmark
head = bookmarks.readcurrent(repo) if 'default' not in repo:
if head: # empty repo
node = repo[head]
else:
# fake bookmark from current branch
head = cur
node = repo['.']
if not node:
node = repo['tip']
if not node:
return return
if head == 'default':
head = 'master' node = repo['default']
head = 'master' if not 'master' in bmarks else 'default'
fake_bmark = head
bmarks[head] = node bmarks[head] = node
head = gitref(head) head = gitref(head)
@ -910,8 +904,8 @@ def do_export(parser):
if old == new: if old == new:
continue continue
if bmark == 'master' and 'master' not in parser.repo._bookmarks: if bmark == fake_bmark or \
# fake bookmark bmark == 'master' and 'master' not in parser.repo._bookmarks:
print "ok %s" % ref print "ok %s" % ref
continue continue
elif bookmarks.pushbookmark(parser.repo, bmark, old, new): elif bookmarks.pushbookmark(parser.repo, bmark, old, new):
@ -946,6 +940,7 @@ def main(args):
global track_branches, force_push, is_tmp global track_branches, force_push, is_tmp
global parsed_tags global parsed_tags
global filenodes global filenodes
global fake_bmark
alias = args[1] alias = args[1]
url = args[2] url = args[2]
@ -979,6 +974,7 @@ def main(args):
marks = None marks = None
parsed_tags = {} parsed_tags = {}
filenodes = {} filenodes = {}
fake_bmark = None
repo = get_repo(url, alias) repo = get_repo(url, alias)
prefix = 'refs/hg/%s' % alias prefix = 'refs/hg/%s' % alias

View File

@ -29,7 +29,6 @@ git_clone () {
hg_clone () { hg_clone () {
( (
hg init $2 && hg init $2 &&
hg -R $2 bookmark -i master &&
cd $1 && cd $1 &&
git push -q "hg::../$2" 'refs/tags/*:refs/tags/*' 'refs/heads/*:refs/heads/*' git push -q "hg::../$2" 'refs/tags/*:refs/tags/*' 'refs/heads/*:refs/heads/*'
) && ) &&
@ -49,8 +48,7 @@ hg_push () {
} }
hg_log () { hg_log () {
hg -R $1 log --graph --debug >log && hg -R $1 log --graph --debug
grep -v 'tag: *default/' log
} }
setup () { setup () {
@ -66,6 +64,7 @@ setup () {
echo "graphlog =" echo "graphlog ="
) >> "$HOME"/.hgrc && ) >> "$HOME"/.hgrc &&
git config --global remote-hg.hg-git-compat true git config --global remote-hg.hg-git-compat true
git config --global remote-hg.track-branches true
HGEDITOR=/usr/bin/true HGEDITOR=/usr/bin/true
GIT_AUTHOR_DATE="2007-01-01 00:00:00 +0230" GIT_AUTHOR_DATE="2007-01-01 00:00:00 +0230"
@ -189,7 +188,7 @@ test_expect_success 'hg branch' '
hg_clone gitrepo hgrepo && hg_clone gitrepo hgrepo &&
cd hgrepo && cd hgrepo &&
hg -q co master && hg -q co default &&
hg mv alpha beta && hg mv alpha beta &&
hg -q commit -m "rename alpha to beta" && hg -q commit -m "rename alpha to beta" &&
hg branch gamma | grep -v "permanent and global" && hg branch gamma | grep -v "permanent and global" &&
@ -225,7 +224,7 @@ test_expect_success 'hg tags' '
hg_clone gitrepo hgrepo && hg_clone gitrepo hgrepo &&
cd hgrepo && cd hgrepo &&
hg co master && hg co default &&
hg tag alpha hg tag alpha
) && ) &&

View File

@ -27,7 +27,8 @@ fi
# clone to a git repo with git # clone to a git repo with git
git_clone_git () { git_clone_git () {
git clone -q "hg::$1" $2 git clone -q "hg::$1" $2 &&
(cd $2 && git checkout master && git branch -D default)
} }
# clone to an hg repo with git # clone to an hg repo with git
@ -63,6 +64,7 @@ hg_push_git () {
cd $2 cd $2
git checkout -q -b tmp && git checkout -q -b tmp &&
git fetch -q "hg::../$1" 'refs/tags/*:refs/tags/*' 'refs/heads/*:refs/heads/*' && git fetch -q "hg::../$1" 'refs/tags/*:refs/tags/*' 'refs/heads/*:refs/heads/*' &&
git branch -D default &&
git checkout -q @{-1} && git checkout -q @{-1} &&
git branch -q -D tmp 2> /dev/null || true git branch -q -D tmp 2> /dev/null || true
) )

View File

@ -21,15 +21,8 @@ if ! python -c 'import mercurial'; then
fi fi
check () { check () {
( echo $3 > expected &&
cd $1 && git --git-dir=$1/.git log --format='%s' -1 $2 > actual
git log --format='%s' -1 &&
git symbolic-ref HEAD
) > actual &&
(
echo $2 &&
echo "refs/heads/$3"
) > expected &&
test_cmp expected actual test_cmp expected actual
} }
@ -56,7 +49,7 @@ test_expect_success 'cloning' '
) && ) &&
git clone "hg::hgrepo" gitrepo && git clone "hg::hgrepo" gitrepo &&
check gitrepo zero master check gitrepo HEAD zero
' '
test_expect_success 'cloning with branches' ' test_expect_success 'cloning with branches' '
@ -70,12 +63,7 @@ test_expect_success 'cloning with branches' '
) && ) &&
git clone "hg::hgrepo" gitrepo && git clone "hg::hgrepo" gitrepo &&
check gitrepo next next && check gitrepo origin/branches/next next
(cd hgrepo && hg checkout default) &&
git clone "hg::hgrepo" gitrepo2 &&
check gitrepo2 zero master
' '
test_expect_success 'cloning with bookmarks' ' test_expect_success 'cloning with bookmarks' '
@ -83,25 +71,14 @@ test_expect_success 'cloning with bookmarks' '
( (
cd hgrepo && cd hgrepo &&
hg checkout default &&
hg bookmark feature-a && hg bookmark feature-a &&
echo feature-a > content && echo feature-a > content &&
hg commit -m feature-a hg commit -m feature-a
) && ) &&
git clone "hg::hgrepo" gitrepo && git clone "hg::hgrepo" gitrepo &&
check gitrepo feature-a feature-a check gitrepo origin/feature-a feature-a
'
test_expect_success 'cloning with detached head' '
test_when_finished "rm -rf gitrepo*" &&
(
cd hgrepo &&
hg update -r 0
) &&
git clone "hg::hgrepo" gitrepo &&
check gitrepo zero master
' '
test_expect_success 'update bookmark' ' test_expect_success 'update bookmark' '