view tests/test-convert-clonebranches.t @ 18306:06185554e7e3

changelog: add a `branch` method, bypassing changectx The only way to access the branch of a changeset is currently to create a changectx object and access its `branch()` method. Creating a new Python object is costly and has a huge impact on code doing heavy access to `branch()` (like branchmap). This change introduces a new method on changelog that allows direct access to the branch of a revision. See the next changeset for impact.
author Pierre-Yves David <pierre-yves.david@ens-lyon.org>
date Thu, 10 Jan 2013 00:41:40 +0100
parents 41885892796e
children 687ed69f6fdf
line wrap: on
line source


  $ echo "[extensions]" >> $HGRCPATH
  $ echo "convert = " >> $HGRCPATH
  $ echo "[convert]" >> $HGRCPATH
  $ echo "hg.tagsbranch=0" >> $HGRCPATH
  $ 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
  > import sys, re
  > 
  > 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
  (branches are permanent and global, did you want a bookmark?)
  $ echo a > file1
  $ hg ci -qAm c1
  $ hg up -qC mergeab
  $ hg branch branch2
  marked working directory as branch branch2
  (branches are permanent and global, did you want a bookmark?)
  $ 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
  (branches are permanent and global, did you want a bookmark?)
  $ 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 branch2 into branch3
  5 changesets found
  pulling from branch1 into branch3
  1 changesets found