- skip-blame just bytes/str changes
Details
Details
Diff Detail
Diff Detail
- Repository
- rHG Mercurial
- Lint
Automatic diff as part of commit; lint not applicable. - Unit
Automatic diff as part of commit; unit tests not applicable.
Automatic diff as part of commit; lint not applicable. |
Automatic diff as part of commit; unit tests not applicable. |
from __future__ import absolute_import | from __future__ import absolute_import | ||||
import os | import os | ||||
import sys | import sys | ||||
import time | import time | ||||
from mercurial import ( | from mercurial import ( | ||||
commands, | commands, | ||||
hg, | hg, | ||||
pycompat, | |||||
ui as uimod, | ui as uimod, | ||||
util, | util, | ||||
) | ) | ||||
TESTDIR = os.environ["TESTDIR"] | TESTDIR = os.environ["TESTDIR"] | ||||
BUNDLEPATH = os.path.join(TESTDIR, 'bundles', 'test-no-symlinks.hg') | BUNDLEPATH = os.path.join(TESTDIR, 'bundles', 'test-no-symlinks.hg') | ||||
# only makes sense to test on os which supports symlinks | # only makes sense to test on os which supports symlinks | ||||
if not getattr(os, "symlink", False): | if not getattr(os, "symlink", False): | ||||
sys.exit(80) # SKIPPED_STATUS defined in run-tests.py | sys.exit(80) # SKIPPED_STATUS defined in run-tests.py | ||||
u = uimod.ui.load() | u = uimod.ui.load() | ||||
# hide outer repo | # hide outer repo | ||||
hg.peer(u, {}, '.', create=True) | hg.peer(u, {}, b'.', create=True) | ||||
# unbundle with symlink support | # unbundle with symlink support | ||||
hg.peer(u, {}, 'test0', create=True) | hg.peer(u, {}, b'test0', create=True) | ||||
repo = hg.repository(u, 'test0') | repo = hg.repository(u, b'test0') | ||||
commands.unbundle(u, repo, BUNDLEPATH, update=True) | commands.unbundle(u, repo, pycompat.fsencode(BUNDLEPATH), update=True) | ||||
# wait a bit, or the status call wont update the dirstate | # wait a bit, or the status call wont update the dirstate | ||||
time.sleep(1) | time.sleep(1) | ||||
commands.status(u, repo) | commands.status(u, repo) | ||||
# now disable symlink support -- this is what os.symlink would do on a | # now disable symlink support -- this is what os.symlink would do on a | ||||
# non-symlink file system | # non-symlink file system | ||||
def symlink_failure(src, dst): | def symlink_failure(src, dst): | ||||
raise OSError(1, "Operation not permitted") | raise OSError(1, "Operation not permitted") | ||||
os.symlink = symlink_failure | os.symlink = symlink_failure | ||||
def islink_failure(path): | def islink_failure(path): | ||||
return False | return False | ||||
os.path.islink = islink_failure | os.path.islink = islink_failure | ||||
# dereference links as if a Samba server has exported this to a | # dereference links as if a Samba server has exported this to a | ||||
# Windows client | # Windows client | ||||
for f in 'test0/a.lnk', 'test0/d/b.lnk': | for f in b'test0/a.lnk', b'test0/d/b.lnk': | ||||
os.unlink(f) | os.unlink(f) | ||||
fp = open(f, 'wb') | fp = open(f, 'wb') | ||||
fp.write(util.readfile(f[:-4])) | fp.write(util.readfile(f[:-4])) | ||||
fp.close() | fp.close() | ||||
# reload repository | # reload repository | ||||
u = uimod.ui.load() | u = uimod.ui.load() | ||||
repo = hg.repository(u, 'test0') | repo = hg.repository(u, b'test0') | ||||
commands.status(u, repo) | commands.status(u, repo) | ||||
# try unbundling a repo which contains symlinks | # try unbundling a repo which contains symlinks | ||||
u = uimod.ui.load() | u = uimod.ui.load() | ||||
repo = hg.repository(u, 'test1', create=True) | repo = hg.repository(u, b'test1', create=True) | ||||
commands.unbundle(u, repo, BUNDLEPATH, update=True) | commands.unbundle(u, repo, pycompat.fsencode(BUNDLEPATH), update=True) |