git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v5 00/14] New remote-hg helper

From
Chris Webb <chris@arachsys.com>
Date
Oct 30, 2012, 10:25 UTC
Message-ID
<20121030102526.GN4891@arachsys.com>
In-Reply-To
<1351571736-4682-1-git-send-email-felipe.contreras@gmail.com>

Hi. I routinely work with projects in both hg and git, so I'm really interested in this. Thanks for working on it! I grabbed the latest version from

  https://github.com/felipec/git/blob/fc-remote-hg/contrib/remote-hg/git-remote-hg

and have been trying it out. For the most part, it seems to work very nicely for the hg repos I have access to and can test against. I've spotted a couple of issues along the way that I thought would be worth reporting.

The first is really a symptom of a general difference between hg and git: an hg repository can have multiple heads, whereas a git repo has exactly one head. To demonstrate:

  $ hg init hgtest && cd hgtest
  $ echo zero >foo && hg add foo && hg commit -m zero
  $ echo one >foo && hg commit -m one
  $ hg checkout -r 0
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ echo two >foo && hg commit -m two
  created new head
  $ hg log --graph
  @  changeset:   2:ca09651009cb
  |  tag:         tip
  |  parent:      0:9f552c53d116
  |  user:        Chris Webb <chris@arachsys.com>
  |  date:        Tue Oct 30 09:33:38 2012 +0000
  |  summary:     two
  |
  | o  changeset:   1:58fad8998339
  |/   user:        Chris Webb <chris@arachsys.com>
  |    date:        Tue Oct 30 09:33:25 2012 +0000
  |    summary:     one
  |
  o  changeset:   0:9f552c53d116
     user:        Chris Webb <chris@arachsys.com>
     date:        Tue Oct 30 09:33:08 2012 +0000
     summary:     zero
  $ cd ..
Now if I try to convert this:
  $ git clone hg::$PWD/hgtest gittest
  Cloning into 'gittest'...
  WARNING: Branch 'default' has more than one head, consider merging
  Traceback (most recent call last):
    File "/home/chris/bin/git-remote-hg", line 773, in <module>
      sys.exit(main(sys.argv))
    File "/home/chris/bin/git-remote-hg", line 759, in main
      do_list(parser)
    File "/home/chris/bin/git-remote-hg", line 463, in do_list
      list_branch_head(repo, cur)
    File "/home/chris/bin/git-remote-hg", line 425, in list_branch_head
      tip = get_branch_tip(repo, cur)
    File "/home/chris/bin/git-remote-hg", line 418, in get_branch_tip
      return repo.branchtip(branch)
  AttributeError: 'mqrepo' object has no attribute 'branchtip'
Strip the second head and it's fine:
  $ hg -R hgtest strip 2
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  saved backup bundle to /tmp/hgtest/hgtest/.hg/strip-backup/ca09651009cb-backup.hg
  $ git clone hg::$PWD/hgtest gittest
  Cloning into 'gittest'...
  $

Not sure what the most friendly thing to do here is. Perhaps refuse to clone/pull from a repo with multiple heads unless you name the specific head you want?

The second thing I spotted is the behaviour of bookmarks on push:
  $ hg init hgtest && cd hgtest
  $ echo zero >foo && hg add foo && hg commit -m zero
  $ hg bookmark development
  $ cd ..
  $ git clone hg::$PWD/hgtest gittest && cd gittest
  Cloning into 'gittest'...
  $ git checkout development
  Branch development set up to track remote branch development from origin.
  Switched to a new branch 'development'
  $ echo one >foo && git add foo && git commit -m one
  [development 9f67dc4] one
   1 file changed, 1 insertion(+), 1 deletion(-)
  $ git status
  # On branch development
  # Your branch is ahead of 'origin/development' by 1 commit.
  #
  nothing to commit
  $ git push
  warning: helper reported unexpected status of refs/hg/origin/bookmarks/development
  To hg::/tmp/hgtest/hgtest
   * [new branch]      branches/default -> branches/default
   * [new branch]      development -> development
  $ hg log -R ../hgtest
  changeset:   1:1c0714d93864
  tag:         tip
  user:        Chris Webb <chris@arachsys.com>
  date:        Tue Oct 30 09:51:51 2012 +0000
  summary:     one
  changeset:   0:f56c463398ea
  bookmark:    development
  user:        Chris Webb <chris@arachsys.com>
  date:        Tue Oct 30 09:50:53 2012 +0000
  summary:     zero

i.e. the development bookmark hasn't been updated by the push. This might be connected to the warning message

  warning: helper reported unexpected status of refs/hg/origin/bookmarks/development

I'm testing with hg 2.2.2 and current git master, so I expect this could be a python api change in the more recent versions of hg if you don't see the same behaviour.

Best wishes,
Chris.
Previous: Felipe ContrerasNext: Chris Webb
Message 16 of 26 in “New remote-hg helper”
  1. 00/14 New remote-hg helperFelipe Contreras, Oct 30, 2012
  2. 01/14 Add new remote-hg transport helperFelipe Contreras, Oct 30, 2012
  3. 02/14 remote-hg: add support for bookmarksFelipe Contreras, Oct 30, 2012
  4. 03/14 remote-hg: add support for pushingFelipe Contreras, Oct 30, 2012
  5. 04/14 remote-hg: add support for remote pushingFelipe Contreras, Oct 30, 2012
  6. 05/14 remote-hg: add support to push URLsFelipe Contreras, Oct 30, 2012
  7. 06/14 remote-hg: make sure the encoding is correctFelipe Contreras, Oct 30, 2012
  8. 07/14 remote-hg: match hg merge behaviorFelipe Contreras, Oct 30, 2012
  9. 08/14 remote-hg: add support for hg-git compat modeFelipe Contreras, Oct 30, 2012
  10. 09/14 remote-hg: add compat for hg-git author fixesFelipe Contreras, Oct 30, 2012
  11. 10/14 remote-hg: fake bookmark when there's noneFelipe Contreras, Oct 30, 2012
  12. 11/14 remote-hg: add support for fake remoteFelipe Contreras, Oct 30, 2012
  13. 12/14 remote-hg: add biridectional testsFelipe Contreras, Oct 30, 2012
  14. 13/14 remote-hg: add tests to compare with hg-gitFelipe Contreras, Oct 30, 2012
  15. 14/14 remote-hg: add extra author testFelipe Contreras, Oct 30, 2012
  16. Chris WebbOct 30, 2012
  17. Chris WebbOct 30, 2012
  18. Felipe ContrerasOct 30, 2012
  19. Chris WebbOct 30, 2012
  20. Chris WebbOct 30, 2012
  21. Felipe ContrerasOct 30, 2012
  22. Felipe ContrerasNov 1, 2012
  23. Chris WebbNov 11, 2012
  24. Felipe ContrerasNov 13, 2012
  25. Johannes SchindelinOct 30, 2012
  26. Felipe ContrerasOct 30, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.