view tests/test-impexp-branch.t @ 20275:2123d27ff75d

backout: avoid update on simple case. Before the changeset the backout process was: 1) go to <target> 2) revert to <target> parent 3) update back to changeset we came from The two update steps can takes a very long time to move back and forth unrelated file change between <target> and current working directory. The new process is just merging current working directory with the parent of <target> using <target> as ancestor. This give the very same result but skip the two updates. On big repo with a lot of files and changes that save a lots of time (x20 for one week window). The "merge" version (hg backout --merge) is still done with upgrades. We could imagine using in memory commit to speed it up but this is another fish.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Wed, 08 Jan 2014 14:53:46 -0800
parents db6b958c4f35
children efedda4aed49
line wrap: on
line source

  $ echo '[extensions]' >> $HGRCPATH
  $ echo 'strip =' >> $HGRCPATH

  $ cat >findbranch.py <<EOF
  > import re, sys
  > 
  > head_re = re.compile('^#(?:(?:\\s+([A-Za-z][A-Za-z0-9_]*)(?:\\s.*)?)|(?:\\s*))$')
  > 
  > for line in sys.stdin:
  >     hmatch = head_re.match(line)
  >     if not hmatch:
  >         sys.exit(1)
  >     if hmatch.group(1) == 'Branch':
  >         sys.exit(0)
  > sys.exit(1)
  > EOF

  $ hg init a
  $ cd a
  $ echo "Rev 1" >rev
  $ hg add rev
  $ hg commit -m "No branch."
  $ hg branch abranch
  marked working directory as branch abranch
  (branches are permanent and global, did you want a bookmark?)
  $ echo "Rev  2" >rev
  $ hg commit -m "With branch."

  $ hg export 0 > ../r0.patch
  $ hg export 1 > ../r1.patch
  $ cd ..

  $ if python findbranch.py < r0.patch; then
  >     echo "Export of default branch revision has Branch header" 1>&2
  >     exit 1
  > fi

  $ if python findbranch.py < r1.patch; then
  >     :  # Do nothing
  > else
  >     echo "Export of branch revision is missing Branch header" 1>&2
  >     exit 1
  > fi

Make sure import still works with branch information in patches.

  $ hg init b
  $ cd b
  $ hg import ../r0.patch
  applying ../r0.patch
  $ hg import ../r1.patch
  applying ../r1.patch
  $ cd ..

  $ hg init c
  $ cd c
  $ hg import --exact ../r0.patch
  applying ../r0.patch
  $ hg import --exact ../r1.patch
  applying ../r1.patch

Test --exact and patch header separators (issue3356)

  $ hg strip --no-backup .
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  >>> import re
  >>> p = file('../r1.patch', 'rb').read()
  >>> p = re.sub(r'Parent\s+', 'Parent ', p)
  >>> file('../r1-ws.patch', 'wb').write(p)
  $ hg import --exact ../r1-ws.patch
  applying ../r1-ws.patch

  $ cd ..