tests/test-convert-clonebranches.t
author Jun Wu <quark@fb.com>
Tue, 05 Sep 2017 13:37:36 -0700
changeset 34087 5361771f9714
parent 33952 794f7bb739be
child 39707 5abc47d4ca6b
permissions -rw-r--r--
wrapfunction: use functools.partial if possible Every `extensions.bind` call inserts a frame in traceback: ... in closure return func(*(args + a), **kw) which makes traceback noisy. The Python stdlib has a `functools.partial` which is backed by C code and does not pollute traceback. However it does not support instancemethod and sets `args` attribute which could be problematic for alias handling. This patch makes `wrapfunction` use `functools.partial` if we are wrapping a function directly exported by a module (so it's impossible to be a class or instance method), and special handles `wrapfunction` results so alias handling code could handle `args` just fine. As an example, `hg rebase -s . -d . --traceback` got 6 lines removed in my setup: File "hg/mercurial/dispatch.py", line 898, in _dispatch cmdpats, cmdoptions) -File "hg/mercurial/extensions.py", line 333, in closure - return func(*(args + a), **kw) File "hg/hgext/journal.py", line 84, in runcommand return orig(lui, repo, cmd, fullargs, *args) -File "hg/mercurial/extensions.py", line 333, in closure - return func(*(args + a), **kw) File "fb-hgext/hgext3rd/fbamend/hiddenoverride.py", line 119, in runcommand result = orig(lui, repo, cmd, fullargs, *args) File "hg/mercurial/dispatch.py", line 660, in runcommand ret = _runcommand(ui, options, cmd, d) -File "hg/mercurial/extensions.py", line 333, in closure - return func(*(args + a), **kw) File "hg/hgext/pager.py", line 69, in pagecmd return orig(ui, options, cmd, cmdfunc) .... Differential Revision: https://phab.mercurial-scm.org/D632


  $ cat <<EOF >> $HGRCPATH
  > [extensions]
  > convert =
  > [convert]
  > hg.tagsbranch = 0
  > EOF
  $ hg init source
  $ cd source
  $ echo a > a
  $ hg ci -qAm adda

Add a merge with one parent in the same branch

  $ echo a >> a
  $ hg ci -qAm changea
  $ hg up -qC 0
  $ hg branch branch0
  marked working directory as branch branch0
  (branches are permanent and global, did you want a bookmark?)
  $ echo b > b
  $ hg ci -qAm addb
  $ hg up -qC
  $ hg merge default
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
  $ hg ci -qm mergeab
  $ hg tag -ql mergeab
  $ cd ..

Miss perl... sometimes

  $ cat > filter.py <<EOF
  > from __future__ import absolute_import
  > import re
  > import sys
  > 
  > r = re.compile(r'^(?:\d+|pulling from)')
  > sys.stdout.writelines([l for l in sys.stdin if r.search(l)])
  > EOF

convert

  $ hg convert -v --config convert.hg.clonebranches=1 source dest |
  >     $PYTHON filter.py
  3 adda
  2 changea
  1 addb
  pulling from default into branch0
  1 changesets found
  0 mergeab
  pulling from default into branch0
  1 changesets found

Add a merge with both parents and child in different branches

  $ cd source
  $ hg branch branch1
  marked working directory as branch branch1
  $ echo a > file1
  $ hg ci -qAm c1
  $ hg up -qC mergeab
  $ hg branch branch2
  marked working directory as branch branch2
  $ echo a > file2
  $ hg ci -qAm c2
  $ hg merge branch1
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
  $ hg branch branch3
  marked working directory as branch branch3
  $ hg ci -qAm c3
  $ cd ..

incremental conversion

  $ hg convert -v --config convert.hg.clonebranches=1 source dest |
  >     $PYTHON filter.py
  2 c1
  pulling from branch0 into branch1
  4 changesets found
  1 c2
  pulling from branch0 into branch2
  4 changesets found
  0 c3
  pulling from branch1 into branch3
  5 changesets found
  pulling from branch2 into branch3
  1 changesets found