##// END OF EJS Templates
win32: work around a WinError problem handling HRESULT types...
win32: work around a WinError problem handling HRESULT types I ran into this ctypes bug while working with the Crypto API. While this could be an issue with any Win32 API in theory, the handful of things that we call are older functions that are unlikely to return COM errors, so I didn't retrofit this everywhere.

File last commit:

r30559:d83ca854 default
r33419:7c33adc8 default
Show More
test-symlink-os-yes-fs-no.py
57 lines | 1.3 KiB | text/x-python | PythonLexer
/ tests / test-symlink-os-yes-fs-no.py
from __future__ import absolute_import
import os
import sys
import time
from mercurial import (
commands,
hg,
ui as uimod,
util,
)
TESTDIR = os.environ["TESTDIR"]
BUNDLEPATH = os.path.join(TESTDIR, 'bundles', 'test-no-symlinks.hg')
# only makes sense to test on os which supports symlinks
if not getattr(os, "symlink", False):
sys.exit(80) # SKIPPED_STATUS defined in run-tests.py
u = uimod.ui.load()
# hide outer repo
hg.peer(u, {}, '.', create=True)
# clone with symlink support
hg.clone(u, {}, BUNDLEPATH, 'test0')
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
def symlink_failure(src, dst):
raise OSError(1, "Operation not permitted")
os.symlink = symlink_failure
def islink_failure(path):
return False
os.path.islink = islink_failure
# 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')
fp.write(util.readfile(f[:-4]))
fp.close()
# reload repository
u = uimod.ui.load()
repo = hg.repository(u, 'test0')
commands.status(u, repo)
# try cloning a repo which contains symlinks
u = uimod.ui.load()
hg.clone(u, {}, BUNDLEPATH, 'test1')