test-symlink-os-yes-fs-no.py
57 lines
| 1.3 KiB
| text/x-python
|
PythonLexer
/ tests / test-symlink-os-yes-fs-no.py
|
r28916 | from __future__ import absolute_import | ||
import os | ||||
import sys | ||||
import time | ||||
from mercurial import ( | ||||
commands, | ||||
hg, | ||||
ui as uimod, | ||||
util, | ||||
) | ||||
|
r6879 | |||
TESTDIR = os.environ["TESTDIR"] | ||||
|
r14116 | BUNDLEPATH = os.path.join(TESTDIR, 'bundles', 'test-no-symlinks.hg') | ||
|
r6879 | |||
# only makes sense to test on os which supports symlinks | ||||
|
r14971 | if not getattr(os, "symlink", False): | ||
|
r6879 | sys.exit(80) # SKIPPED_STATUS defined in run-tests.py | ||
|
r30559 | u = uimod.ui.load() | ||
|
r17015 | # hide outer repo | ||
hg.peer(u, {}, '.', create=True) | ||||
|
r11769 | # clone with symlink support | ||
|
r14553 | hg.clone(u, {}, BUNDLEPATH, 'test0') | ||
|
r11769 | |||
repo = hg.repository(u, 'test0') | ||||
# wait a bit, or the status call wont update the dirstate | ||||
time.sleep(1) | ||||
commands.status(u, repo) | ||||
# now disable symlink support -- this is what os.symlink would do on a | ||||
# non-symlink file system | ||||
|
r6879 | def symlink_failure(src, dst): | ||
|
r18178 | raise OSError(1, "Operation not permitted") | ||
|
r6879 | os.symlink = symlink_failure | ||
|
r30448 | def islink_failure(path): | ||
return False | ||||
os.path.islink = islink_failure | ||||
|
r6879 | |||
|
r11769 | # dereference links as if a Samba server has exported this to a | ||
# Windows client | ||||
for f in 'test0/a.lnk', 'test0/d/b.lnk': | ||||
os.unlink(f) | ||||
fp = open(f, 'wb') | ||||
|
r14168 | fp.write(util.readfile(f[:-4])) | ||
|
r11769 | fp.close() | ||
# reload repository | ||||
|
r30559 | u = uimod.ui.load() | ||
|
r11769 | repo = hg.repository(u, 'test0') | ||
commands.status(u, repo) | ||||
# try cloning a repo which contains symlinks | ||||
|
r30559 | u = uimod.ui.load() | ||
|
r14553 | hg.clone(u, {}, BUNDLEPATH, 'test1') | ||