remote-hg: always point HEAD to master
authorFelipe Contreras <felipe.contreras@gmail.com>
Sat, 25 May 2013 02:29:34 +0000 (21:29 -0500)
committerJunio C Hamano <gitster@pobox.com>
Tue, 28 May 2013 14:59:30 +0000 (07:59 -0700)
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>
contrib/remote-helpers/git-remote-hg
contrib/remote-helpers/test-hg-bidi.sh
contrib/remote-helpers/test-hg-hg-git.sh
contrib/remote-helpers/test-hg.sh
index 48edf3b562963619b31f0ea5651d9ad74943ab68..7c859b82e896de04976b6a87499733151bb6ba6a 100755 (executable)
@@ -560,22 +560,16 @@ def get_branch_tip(repo, branch):
     return heads[0]
 
 def list_head(repo, cur):
-    global g_head, bmarks
+    global g_head, bmarks, fake_bmark
 
-    head = bookmarks.readcurrent(repo)
-    if head:
-        node = repo[head]
-    else:
-        # fake bookmark from current branch
-        head = cur
-        node = repo['.']
-        if not node:
-            node = repo['tip']
-        if not node:
-            return
-        if head == 'default':
-            head = 'master'
-        bmarks[head] = node
+    if 'default' not in repo:
+        # empty repo
+        return
+
+    node = repo['default']
+    head = 'master' if not 'master' in bmarks else 'default'
+    fake_bmark = head
+    bmarks[head] = node
 
     head = gitref(head)
     print "@refs/heads/%s HEAD" % head
@@ -910,8 +904,8 @@ def do_export(parser):
         if old == new:
             continue
 
-        if bmark == 'master' and 'master' not in parser.repo._bookmarks:
-            # fake bookmark
+        if bmark == fake_bmark or \
+                bmark == 'master' and 'master' not in parser.repo._bookmarks:
             print "ok %s" % ref
             continue
         elif bookmarks.pushbookmark(parser.repo, bmark, old, new):
@@ -946,6 +940,7 @@ def main(args):
     global track_branches, force_push, is_tmp
     global parsed_tags
     global filenodes
+    global fake_bmark
 
     alias = args[1]
     url = args[2]
@@ -979,6 +974,7 @@ def main(args):
     marks = None
     parsed_tags = {}
     filenodes = {}
+    fake_bmark = None
 
     repo = get_repo(url, alias)
     prefix = 'refs/hg/%s' % alias
index f0aa3c06c15491c72f072c11a83e41780baff140..f83d67d74fc97cb597388ab556d7a31e9d01835b 100755 (executable)
@@ -29,7 +29,6 @@ git_clone () {
 hg_clone () {
        (
        hg init $2 &&
-       hg -R $2 bookmark -i master &&
        cd $1 &&
        git push -q "hg::../$2" 'refs/tags/*:refs/tags/*' 'refs/heads/*:refs/heads/*'
        ) &&
@@ -49,8 +48,7 @@ hg_push () {
 }
 
 hg_log () {
-       hg -R $1 log --graph --debug >log &&
-       grep -v 'tag: *default/' log
+       hg -R $1 log --graph --debug
 }
 
 setup () {
@@ -66,6 +64,7 @@ setup () {
        echo "graphlog ="
        ) >> "$HOME"/.hgrc &&
        git config --global remote-hg.hg-git-compat true
+       git config --global remote-hg.track-branches true
 
        HGEDITOR=/usr/bin/true
        GIT_AUTHOR_DATE="2007-01-01 00:00:00 +0230"
@@ -189,7 +188,7 @@ test_expect_success 'hg branch' '
        hg_clone gitrepo hgrepo &&
 
        cd hgrepo &&
-       hg -q co master &&
+       hg -q co default &&
        hg mv alpha beta &&
        hg -q commit -m "rename alpha to beta" &&
        hg branch gamma | grep -v "permanent and global" &&
@@ -225,7 +224,7 @@ test_expect_success 'hg tags' '
        hg_clone gitrepo hgrepo &&
 
        cd hgrepo &&
-       hg co master &&
+       hg co default &&
        hg tag alpha
        ) &&
 
index 37e59d8fe8a755fdd858f369ad8661a3b498f356..2219284382f0e987423ae00e5bd89e9b7a4b0046 100755 (executable)
@@ -27,7 +27,8 @@ fi
 
 # clone to a git repo with 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
@@ -63,6 +64,7 @@ hg_push_git () {
        cd $2
        git checkout -q -b tmp &&
        git fetch -q "hg::../$1" 'refs/tags/*:refs/tags/*' 'refs/heads/*:refs/heads/*' &&
+       git branch -D default &&
        git checkout -q @{-1} &&
        git branch -q -D tmp 2> /dev/null || true
        )
index af27a0f65fae51771740bc5a31671c8a976f8a1d..4d5aba20a090209a6678e1f69f9bf8ad26a03143 100755 (executable)
@@ -21,15 +21,8 @@ if ! python -c 'import mercurial'; then
 fi
 
 check () {
-       (
-       cd $1 &&
-       git log --format='%s' -1 &&
-       git symbolic-ref HEAD
-       ) > actual &&
-       (
-       echo $2 &&
-       echo "refs/heads/$3"
-       ) > expected &&
+       echo $3 > expected &&
+       git --git-dir=$1/.git log --format='%s' -1 $2 > actual
        test_cmp expected actual
 }
 
@@ -56,7 +49,7 @@ test_expect_success 'cloning' '
        ) &&
 
        git clone "hg::hgrepo" gitrepo &&
-       check gitrepo zero master
+       check gitrepo HEAD zero
 '
 
 test_expect_success 'cloning with branches' '
@@ -70,12 +63,7 @@ test_expect_success 'cloning with branches' '
        ) &&
 
        git clone "hg::hgrepo" gitrepo &&
-       check gitrepo next next &&
-
-       (cd hgrepo && hg checkout default) &&
-
-       git clone "hg::hgrepo" gitrepo2 &&
-       check gitrepo2 zero master
+       check gitrepo origin/branches/next next
 '
 
 test_expect_success 'cloning with bookmarks' '
@@ -83,25 +71,14 @@ test_expect_success 'cloning with bookmarks' '
 
        (
        cd hgrepo &&
+       hg checkout default &&
        hg bookmark feature-a &&
        echo feature-a > content &&
        hg commit -m feature-a
        ) &&
 
        git clone "hg::hgrepo" gitrepo &&
-       check gitrepo 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
+       check gitrepo origin/feature-a feature-a
 '
 
 test_expect_success 'update bookmark' '