##// END OF EJS Templates
largefiles: factor out procedures to update standins for pre-committing...
largefiles: factor out procedures to update standins for pre-committing This patch factors out procedures to update standins for pre-committing. This is one of preparations to avoid execution of such procedures according to invocation context. For example, resuming automated committing (e.g. "hg rebase --continue") should update standins at the 1st commit, because largefiles in the working directory may be modified manually. But on the other hand, it should avoid updating standins at subsequent committings for efficiency reason. For simplicity, this patch just moves procedures mechanically only with replacing below. - "self" => "repo" - "lfutil." => (none) - "orig" invocation => returning "match" Using "fstandin" instead "standin" as the name of local variable for the loop below is the only special care, because the latter shadows the same name function in "lfutil.py". [before] for standin in standins: lfile = lfutil.splitstandin(standin) if lfdirstate[lfile] != 'r': lfutil.updatestandin(self, standin) [after] for fstandin in standins: lfile = splitstandin(fstandin) if lfdirstate[lfile] != 'r': updatestandin(repo, fstandin)

File last commit:

r19378:9de689d2 default
r23185:9870173e default
Show More
test-hgweb-auth.py
107 lines | 3.4 KiB | text/x-python | PythonLexer
/ tests / test-hgweb-auth.py
Sune Foldager
allow http authentication information to be specified in the configuration
r8333 from mercurial import demandimport; demandimport.enable()
Patrick Mezard
http: strip credentials from urllib2 manager URIs (issue2885)...
r15024 import urllib2
Patrick Mezard
hgweb: do not ignore [auth] if url has a username (issue2822)...
r15005 from mercurial import ui, util
Sune Foldager
allow http authentication information to be specified in the configuration
r8333 from mercurial import url
from mercurial.error import Abort
class myui(ui.ui):
def interactive(self):
return False
origui = myui()
def writeauth(items):
ui = origui.copy()
for name, value in items.iteritems():
ui.setconfig('auth', name, value)
return ui
def dumpdict(dict):
Matt Mackall
many, many trivial check-code fixups
r10282 return '{' + ', '.join(['%s: %s' % (k, dict[k])
for k in sorted(dict.iterkeys())]) + '}'
Sune Foldager
allow http authentication information to be specified in the configuration
r8333
Patrick Mezard
hgweb: do not ignore [auth] if url has a username (issue2822)...
r15005 def test(auth, urls=None):
Sune Foldager
allow http authentication information to be specified in the configuration
r8333 print 'CFG:', dumpdict(auth)
prefixes = set()
for k in auth:
prefixes.add(k.split('.', 1)[0])
for p in prefixes:
Patrick Mezard
hgweb: do not ignore [auth] if url has a username (issue2822)...
r15005 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)
Sune Foldager
allow http authentication information to be specified in the configuration
r8333
ui = writeauth(auth)
def _test(uri):
print 'URI:', uri
try:
pm = url.passwordmgr(ui)
Patrick Mezard
http: pass user to readauthforuri() (fix 4a43e23b8c55)...
r15025 u, authinfo = util.url(uri).authinfo()
Patrick Mezard
hgweb: do not ignore [auth] if url has a username (issue2822)...
r15005 if authinfo is not None:
pm.add_password(*authinfo)
Patrick Mezard
http: pass user to readauthforuri() (fix 4a43e23b8c55)...
r15025 print ' ', pm.find_user_password('test', u)
Simon Heimberg
cleanup: drop unused variables and an unused import
r19378 except Abort:
Sune Foldager
allow http authentication information to be specified in the configuration
r8333 print 'abort'
Patrick Mezard
hgweb: do not ignore [auth] if url has a username (issue2822)...
r15005 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)
Sune Foldager
allow http authentication information to be specified in the configuration
r8333
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'
Matt Mackall
many, many trivial check-code fixups
r10282 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'})
Sune Foldager
allow http authentication information to be specified in the configuration
r8333 test({'x.prefix': '*', 'y.prefix': 'https://example.org/bar'})
Patrick Mezard
hgweb: do not ignore [auth] if url has a username (issue2822)...
r15005
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'])
Patrick Mezard
http: strip credentials from urllib2 manager URIs (issue2885)...
r15024
def testauthinfo(fullurl, authurl):
print 'URIs:', fullurl, authurl
pm = urllib2.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')