view tests/test-symlink-placeholder.t @ 24640:685639f9430d

bundle20: move magic string into the class This makes it easy to create a new bundler class that inherits from the core one. This matches the way 'changegroup' packers work. The main target is to allow HG2Y support in an extension to ease transition of companies using the experimental protocol in production (yeah...) But I've no doubt this will be useful when playing with a future HG21.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Mon, 06 Apr 2015 15:40:12 -0700
parents 7a9cbb315d84
children 0a10f142299d
line wrap: on
line source

#require symlink

Create extension that can disable symlink support:

  $ cat > nolink.py <<EOF
  > from mercurial import extensions, util
  > def setflags(orig, f, l, x):
  >     pass
  > def checklink(orig, path):
  >     return False
  > def extsetup(ui):
  >     extensions.wrapfunction(util, 'setflags', setflags)
  >     extensions.wrapfunction(util, 'checklink', checklink)
  > EOF

  $ hg init unix-repo
  $ cd unix-repo
  $ echo foo > a
  $ ln -s a b
  $ hg ci -Am0
  adding a
  adding b
  $ cd ..

Simulate a checkout shared on NFS/Samba:

  $ hg clone -q unix-repo shared
  $ cd shared
  $ rm b
  $ echo foo > b
  $ hg --config extensions.n=$TESTTMP/nolink.py status --debug
  ignoring suspect symlink placeholder "b"

Make a clone using placeholders:

  $ hg --config extensions.n=$TESTTMP/nolink.py clone . ../win-repo
  updating to branch default
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ cd ../win-repo
  $ cat b
  a (no-eol)
  $ hg --config extensions.n=$TESTTMP/nolink.py st --debug

Empty placeholder:

  $ rm b
  $ touch b
  $ hg --config extensions.n=$TESTTMP/nolink.py st --debug
  ignoring suspect symlink placeholder "b"

Write binary data to the placeholder:

  >>> open('b', 'w').write('this is a binary\0')
  $ hg --config extensions.n=$TESTTMP/nolink.py st --debug
  ignoring suspect symlink placeholder "b"

Write a long string to the placeholder:

  >>> open('b', 'w').write('this' * 1000)
  $ hg --config extensions.n=$TESTTMP/nolink.py st --debug
  ignoring suspect symlink placeholder "b"

Commit shouldn't succeed:

  $ hg --config extensions.n=$TESTTMP/nolink.py ci -m1
  nothing changed
  [1]

Write a valid string to the placeholder:

  >>> open('b', 'w').write('this')
  $ hg --config extensions.n=$TESTTMP/nolink.py st --debug
  M b
  $ hg --config extensions.n=$TESTTMP/nolink.py ci -m1
  $ hg manifest tip --verbose
  644   a
  644 @ b

  $ cd ..