mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 01:07:15 +03:00
9dc21f8d0b
Summary: D13853115 adds `edenscm/` to `sys.path` and code still uses `import mercurial`. That has nasty problems if both `import mercurial` and `import edenscm.mercurial` are used, because Python would think `mercurial.foo` and `edenscm.mercurial.foo` are different modules so code like `try: ... except mercurial.error.Foo: ...`, or `isinstance(x, mercurial.foo.Bar)` would fail to handle the `edenscm.mercurial` version. There are also some module-level states (ex. `extensions._extensions`) that would cause trouble if they have multiple versions in a single process. Change imports to use the `edenscm` so ideally the `mercurial` is no longer imported at all. Add checks in extensions.py to catch unexpected extensions importing modules from the old (wrong) locations when running tests. Reviewed By: phillco Differential Revision: D13868981 fbshipit-source-id: f4e2513766957fd81d85407994f7521a08e4de48
128 lines
3.5 KiB
Python
128 lines
3.5 KiB
Python
from __future__ import absolute_import, print_function
|
|
|
|
from edenscm.mercurial import demandimport, error, ui as uimod, url, util
|
|
|
|
|
|
demandimport.enable()
|
|
|
|
urlerr = util.urlerr
|
|
urlreq = util.urlreq
|
|
|
|
|
|
class myui(uimod.ui):
|
|
def interactive(self):
|
|
return False
|
|
|
|
|
|
origui = myui.load()
|
|
|
|
|
|
def writeauth(items):
|
|
ui = origui.copy()
|
|
for name, value in items.iteritems():
|
|
ui.setconfig("auth", name, value)
|
|
return ui
|
|
|
|
|
|
def dumpdict(dict):
|
|
return "{" + ", ".join(["%s: %s" % (k, dict[k]) for k in sorted(dict)]) + "}"
|
|
|
|
|
|
def test(auth, urls=None):
|
|
print("CFG:", dumpdict(auth))
|
|
prefixes = set()
|
|
for k in auth:
|
|
prefixes.add(k.split(".", 1)[0])
|
|
for p in prefixes:
|
|
for name in (".username", ".password"):
|
|
if (p + name) not in auth:
|
|
auth[p + name] = p
|
|
auth = dict((k, v) for k, v in auth.iteritems() if v is not None)
|
|
|
|
ui = writeauth(auth)
|
|
|
|
def _test(uri):
|
|
print("URI:", uri)
|
|
try:
|
|
pm = url.passwordmgr(ui, urlreq.httppasswordmgrwithdefaultrealm())
|
|
u, authinfo = util.url(uri).authinfo()
|
|
if authinfo is not None:
|
|
pm.add_password(*authinfo)
|
|
print(" ", pm.find_user_password("test", u))
|
|
except error.Abort:
|
|
print(" ", "abort")
|
|
|
|
if not urls:
|
|
urls = [
|
|
"http://example.org/foo",
|
|
"http://example.org/foo/bar",
|
|
"http://example.org/bar",
|
|
"https://example.org/foo",
|
|
"https://example.org/foo/bar",
|
|
"https://example.org/bar",
|
|
"https://x@example.org/bar",
|
|
"https://y@example.org/bar",
|
|
]
|
|
for u in urls:
|
|
_test(u)
|
|
|
|
|
|
print("\n*** Test in-uri schemes\n")
|
|
test({"x.prefix": "http://example.org"})
|
|
test({"x.prefix": "https://example.org"})
|
|
test({"x.prefix": "http://example.org", "x.schemes": "https"})
|
|
test({"x.prefix": "https://example.org", "x.schemes": "http"})
|
|
|
|
print("\n*** Test separately configured schemes\n")
|
|
test({"x.prefix": "example.org", "x.schemes": "http"})
|
|
test({"x.prefix": "example.org", "x.schemes": "https"})
|
|
test({"x.prefix": "example.org", "x.schemes": "http https"})
|
|
|
|
print("\n*** Test prefix matching\n")
|
|
test({"x.prefix": "http://example.org/foo", "y.prefix": "http://example.org/bar"})
|
|
test({"x.prefix": "http://example.org/foo", "y.prefix": "http://example.org/foo/bar"})
|
|
test({"x.prefix": "*", "y.prefix": "https://example.org/bar"})
|
|
|
|
print("\n*** Test user matching\n")
|
|
test(
|
|
{
|
|
"x.prefix": "http://example.org/foo",
|
|
"x.username": None,
|
|
"x.password": "xpassword",
|
|
},
|
|
urls=["http://y@example.org/foo"],
|
|
)
|
|
test(
|
|
{
|
|
"x.prefix": "http://example.org/foo",
|
|
"x.username": None,
|
|
"x.password": "xpassword",
|
|
"y.prefix": "http://example.org/foo",
|
|
"y.username": "y",
|
|
"y.password": "ypassword",
|
|
},
|
|
urls=["http://y@example.org/foo"],
|
|
)
|
|
test(
|
|
{
|
|
"x.prefix": "http://example.org/foo/bar",
|
|
"x.username": None,
|
|
"x.password": "xpassword",
|
|
"y.prefix": "http://example.org/foo",
|
|
"y.username": "y",
|
|
"y.password": "ypassword",
|
|
},
|
|
urls=["http://y@example.org/foo/bar"],
|
|
)
|
|
|
|
|
|
def testauthinfo(fullurl, authurl):
|
|
print("URIs:", fullurl, authurl)
|
|
pm = urlreq.httppasswordmgrwithdefaultrealm()
|
|
pm.add_password(*util.url(fullurl).authinfo()[1])
|
|
print(pm.find_user_password("test", authurl))
|
|
|
|
|
|
print("\n*** Test urllib2 and util.url\n")
|
|
testauthinfo("http://user@example.com:8080/foo", "http://example.com:8080/foo")
|