tests/test-merge-symlinks.t
author Yuya Nishihara <yuya@tcha.org>
Fri, 14 Aug 2015 15:43:29 +0900
changeset 26053 b68c9d232db6
parent 16913 f2719b387380
child 32938 b6776b34e44e
permissions -rw-r--r--
reachableroots: use internal "revstates" array to test if rev is a root The main goal of this patch series is to reduce the use of PyXxx() function that is likely to require ugly error handling and inc/decref. Plus, this is faster than using PySet_Contains(). revset #0: 0::tip 0) 0.004168 1) 0.003678 88% This patch ignores out-of-range roots as they are in the pure implementation. Because reachable sets are calculated from heads, and out-of-range heads raise IndexError, we can just take out-of-range roots as unreachable. Otherwise, the test of "hg log -Gr '. + wdir()'" would fail. "heads" argument is changed to a list. Should we have to rename the C function as its signature is changed?

  $ cat > echo.py <<EOF
  > #!/usr/bin/env python
  > import os, sys
  > try:
  >     import msvcrt
  >     msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
  >     msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY)
  > except ImportError:
  >     pass
  > 
  > for k in ('HG_FILE', 'HG_MY_ISLINK', 'HG_OTHER_ISLINK', 'HG_BASE_ISLINK'):
  >     print k, os.environ[k]
  > EOF

Create 2 heads containing the same file, once as
a file, once as a link. Bundle was generated with:

# hg init t
# cd t
# echo a > a
# hg ci -qAm t0 -d '0 0'
# echo l > l
# hg ci -qAm t1 -d '1 0'
# hg up -C 0
# ln -s a l
# hg ci -qAm t2 -d '2 0'
# echo l2 > l2
# hg ci -qAm t3 -d '3 0'

  $ hg init t
  $ cd t
  $ hg -q pull "$TESTDIR/bundles/test-merge-symlinks.hg"
  $ hg up -C 3
  3 files updated, 0 files merged, 0 files removed, 0 files unresolved

Merge them and display *_ISLINK vars
merge heads

  $ hg merge --tool="python ../echo.py"
  merging l
  HG_FILE l
  HG_MY_ISLINK 1
  HG_OTHER_ISLINK 0
  HG_BASE_ISLINK 0
  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)

Test working directory symlink bit calculation wrt copies,
especially on non-supporting systems.
merge working directory

  $ hg up -C 2
  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ hg copy l l2
  $ HGMERGE="python ../echo.py" hg up 3
  merging l2
  HG_FILE l2
  HG_MY_ISLINK 1
  HG_OTHER_ISLINK 0
  HG_BASE_ISLINK 0
  0 files updated, 1 files merged, 0 files removed, 0 files unresolved

  $ cd ..