##// END OF EJS Templates
hgweb: do not ignore [auth] if url has a username (issue2822)...
hgweb: do not ignore [auth] if url has a username (issue2822) The [auth] section was ignored when handling URLs like: http://user@example.com/foo Instead, we look in [auth] for an entry matching the URL and supplied user name. Entries without username can match URL with a username. Prefix length ties are resolved in favor of entries matching the username. With: foo.prefix = http://example.org foo.username = user foo.password = password bar.prefix = http://example.org/bar and the input URL: http://user@example.org/bar the 'bar' entry will be selected because of prefix length, therefore prompting for a password. This behaviour ensure that entries selection is consistent when looking for credentials or for certificates, and that certificates can be picked even if their entries do no define usernames while the URL does. Additionally, entries without a username matched against a username are returned as if they did have requested username set to avoid prompting again for a username if the password is not set. v2: reparse the URL in readauthforuri() to handle HTTP and HTTPS similarly. v3: allow unset usernames to match URL usernames to pick certificates. Resolve prefix length ties in favor of entries with usernames.

File last commit:

r14927:2aa3e07b default
r15005:4a43e23b 1.9.1 stable
Show More
hghave
294 lines | 8.0 KiB | text/plain | TextLexer
Patrick Mezard
Add hghave utility and run-tests.py support....
r4881 #!/usr/bin/env python
"""Test the running system for features availability. Exit with zero
Patrick Mezard
hghave: feature absence can be checked by prefixing with 'no-'
r5084 if all features are there, non-zero otherwise. If a feature name is
prefixed with "no-", the absence of feature is tested.
Patrick Mezard
Add hghave utility and run-tests.py support....
r4881 """
import optparse
import os
Patrick Mezard
hghave: wrap command output matching
r5252 import re
Patrick Mezard
Add hghave utility and run-tests.py support....
r4881 import sys
Patrick Mezard
hghave: detect executable permission availability.
r5072 import tempfile
Patrick Mezard
Add hghave utility and run-tests.py support....
r4881
Patrick Mezard
hghave: prefix temporary files with "hg-hghave-"
r5090 tempprefix = 'hg-hghave-'
Patrick Mezard
hghave: detect cvs and cvsps availability...
r5302 def matchoutput(cmd, regexp, ignorestatus=False):
Patrick Mezard
hghave: wrap command output matching
r5252 """Return True if cmd executes successfully and its output
is matched by the supplied regular expression.
"""
r = re.compile(regexp)
fh = os.popen(cmd)
s = fh.read()
Patrick Mezard
hghave: handle Windows raising on popen() failure
r8213 try:
ret = fh.close()
except IOError:
# Happen in Windows test environment
ret = 1
Patrick Mezard
hghave: detect cvs and cvsps availability...
r5302 return (ignorestatus or ret is None) and r.search(s)
Patrick Mezard
hghave: wrap command output matching
r5252
Aleix Conchillo Flaque
convert: added gnu arch (baz) tests
r6078 def has_baz():
return matchoutput('baz --version 2>&1', r'baz Bazaar version')
Marek Kubica
convert: add bzr source
r7053 def has_bzr():
Dirkjan Ochtman
tests: check for bzr support by importing bzrlib...
r7061 try:
import bzrlib
Simon Heimberg
test suite: saver check if bzr is installed...
r7773 return bzrlib.__doc__ != None
Dirkjan Ochtman
tests: check for bzr support by importing bzrlib...
r7061 except ImportError:
return False
Marek Kubica
convert: add bzr source
r7053
Patrick Mezard
convert/bzr: handle files replaced by directories (issue1623)
r8126 def has_bzr114():
try:
import bzrlib
return (bzrlib.__doc__ != None
Mads Kiilerich
tests/hghave: bzr114 checks for bzr >= 1.14...
r9244 and bzrlib.version_info[:2] >= (1, 14))
Patrick Mezard
convert/bzr: handle files replaced by directories (issue1623)
r8126 except ImportError:
return False
Patrick Mezard
hghave: detect cvs and cvsps availability...
r5302 def has_cvs():
Dirkjan Ochtman
tests: don't run test-convert-cvs if there's no cvs server
r6626 re = r'Concurrent Versions System.*?server'
return matchoutput('cvs --version 2>&1', re)
Patrick Mezard
hghave: detect cvs and cvsps availability...
r5302
Patrick Mezard
hghave: detect darcs client
r5410 def has_darcs():
Bryan O'Sullivan
Fix failing darcs test
r9326 return matchoutput('darcs --version', r'2\.[2-9]', True)
Patrick Mezard
hghave: detect darcs client
r5410
Patrick Mezard
Add a test for monotone conversion
r6372 def has_mtn():
Thomas Arendsen Hein
Skip older monotone versions for tests....
r6384 return matchoutput('mtn --version', r'monotone', True) and not matchoutput(
Thomas Arendsen Hein
tests: fix updated monotone version requirement...
r14550 'mtn --version', r'monotone 0\.', True)
Patrick Mezard
Add a test for monotone conversion
r6372
Patrick Mezard
hghave: reorder check functions and entries
r5409 def has_eol_in_paths():
try:
fd, path = tempfile.mkstemp(prefix=tempprefix, suffix='\n\r')
os.close(fd)
os.remove(path)
return True
except:
return False
Patrick Mezard
hghave: detect executable permission availability.
r5072 def has_executablebit():
Patrick Mezard
hghave: prefix temporary files with "hg-hghave-"
r5090 fd, path = tempfile.mkstemp(prefix=tempprefix)
Patrick Mezard
hghave: detect executable permission availability.
r5072 os.close(fd)
try:
s = os.lstat(path).st_mode
os.chmod(path, s | 0100)
return (os.lstat(path).st_mode & 0100 != 0)
finally:
os.remove(path)
Patrick Mezard
Add test for case folding issues
r6806 def has_icasefs():
# Stolen from mercurial.util
Simon Heimberg
hghave: check for case insensitive filesystem in current dir...
r9395 fd, path = tempfile.mkstemp(prefix=tempprefix, dir='.')
Patrick Mezard
Add test for case folding issues
r6806 os.close(fd)
try:
s1 = os.stat(path)
d, b = os.path.split(path)
p2 = os.path.join(d, b.upper())
if path == p2:
p2 = os.path.join(d, b.lower())
try:
s2 = os.stat(p2)
return s2 == s1
except:
return False
finally:
Benoit Boissinot
merge with -stable
r6998 os.remove(path)
Benoit Boissinot
inotify: deactivate inotify status on failure...
r6996 def has_inotify():
try:
import hgext.inotify.linux.watcher
return True
except ImportError:
return False
Patrick Mezard
hghave: reorder check functions and entries
r5409 def has_fifo():
return hasattr(os, "mkfifo")
Patrick Mezard
hghave: detect support for EOL in paths.
r5074
Patrick Mezard
Test --time, --profile and --lsprof
r5099 def has_lsprof():
try:
import _lsprof
return True
except ImportError:
return False
Martin Geisler
test-i18n: make test conditional on msgfmt availability
r13442 def has_gettext():
return matchoutput('msgfmt --version', 'GNU gettext-tools')
Patrick Mezard
hghave: detect git availability
r5218 def has_git():
Patrick Mezard
hghave: wrap command output matching
r5252 return matchoutput('git --version 2>&1', r'^git version')
Patrick Mezard
hghave: detect git availability
r5218
Martin Geisler
doc: add generic frontend to rst2man and rst2html...
r10971 def has_docutils():
try:
from docutils.core import publish_cmdline
return True
except ImportError:
return False
Martin Geisler
test-gendoc: test documentation generation
r9446
Patrick Mezard
subrepo: handle svn tracked/unknown directory collisions...
r14050 def getsvnversion():
m = matchoutput('svn --version 2>&1', r'^svn,\s+version\s+(\d+)\.(\d+)')
if not m:
return (0, 0)
return (int(m.group(1)), int(m.group(2)))
def has_svn15():
return getsvnversion() >= (1, 5)
Patrick Mezard
hghave: detect subversion client and admin tools availability
r5253 def has_svn():
Patrick Mezard
convert: reenable SVN support after license issue solved
r9819 return matchoutput('svn --version 2>&1', r'^svn, version') and \
matchoutput('svnadmin --version 2>&1', r'^svnadmin, version')
Patrick Mezard
hghave: detect subversion client and admin tools availability
r5253
Patrick Mezard
hghave: detect subversion bindings availability
r5254 def has_svn_bindings():
try:
import svn.core
Dirkjan Ochtman
tests: run svn tests only with svn bindings >1.3
r7315 version = svn.core.SVN_VER_MAJOR, svn.core.SVN_VER_MINOR
if version < (1, 4):
return False
Patrick Mezard
hghave: detect subversion bindings availability
r5254 return True
except ImportError:
return False
Frank Kingswood
convert: Perforce source for conversion to Mercurial
r7823 def has_p4():
return matchoutput('p4 -V', r'Rev\. P4/') and matchoutput('p4d -V', r'Rev\. P4D/')
Patrick Mezard
hghave: reorder check functions and entries
r5409 def has_symlink():
return hasattr(os, "symlink")
Aleix Conchillo Flaque
convert: added GNU Arch (tla) tests and related fixes
r6079 def has_tla():
return matchoutput('tla --version 2>&1', r'The GNU Arch Revision')
Brendan Cully
gpg: add test
r8809 def has_gpg():
return matchoutput('gpg --version 2>&1', r'GnuPG')
Alexis S. L. Carvalho
hghave: detect unix-style permissions...
r6063 def has_unix_permissions():
d = tempfile.mkdtemp(prefix=tempprefix, dir=".")
try:
fname = os.path.join(d, 'foo')
for umask in (077, 007, 022):
os.umask(umask)
f = open(fname, 'w')
f.close()
mode = os.stat(fname).st_mode
os.unlink(fname)
if mode & 0777 != ~umask & 0666:
return False
return True
finally:
os.rmdir(d)
timeless
tests: add pyflakes checking for unused imports
r14140 def has_pyflakes():
return matchoutput('echo "import re" 2>&1 | pyflakes',
r"<stdin>:1: 're' imported but unused",
True)
Dirkjan Ochtman
tests: add highlight extension tests
r6355 def has_pygments():
try:
import pygments
return True
except ImportError:
return False
Mads Kiilerich
tests: Skip tests if they will fail because of outer repo...
r7429 def has_outer_repo():
return matchoutput('hg root 2>&1', r'')
Mads Kiilerich
serve: fix https mode and add test...
r12740 def has_ssl():
try:
import ssl
Mads Kiilerich
tests: update ssl requirement for test-https.t...
r13418 import OpenSSL
OpenSSL.SSL.Context
Mads Kiilerich
serve: fix https mode and add test...
r12740 return True
except ImportError:
return False
Patrick Mezard
Add hghave utility and run-tests.py support....
r4881 checks = {
Aleix Conchillo Flaque
convert: added gnu arch (baz) tests
r6078 "baz": (has_baz, "GNU Arch baz client"),
Marek Kubica
convert: add bzr source
r7053 "bzr": (has_bzr, "Canonical's Bazaar client"),
Patrick Mezard
convert/bzr: handle files replaced by directories (issue1623)
r8126 "bzr114": (has_bzr114, "Canonical's Bazaar client >= 1.14"),
Dirkjan Ochtman
tests: don't run test-convert-cvs if there's no cvs server
r6626 "cvs": (has_cvs, "cvs client/server"),
Patrick Mezard
hghave: detect darcs client
r5410 "darcs": (has_darcs, "darcs client"),
Mads Kiilerich
serve: fix https mode and add test...
r12740 "docutils": (has_docutils, "Docutils text processing library"),
Patrick Mezard
Test --time, --profile and --lsprof
r5099 "eol-in-paths": (has_eol_in_paths, "end-of-lines in paths"),
"execbit": (has_executablebit, "executable bit"),
Patrick Mezard
hghave: reorder check functions and entries
r5409 "fifo": (has_fifo, "named pipes"),
Martin Geisler
test-i18n: make test conditional on msgfmt availability
r13442 "gettext": (has_gettext, "GNU Gettext (msgfmt)"),
Patrick Mezard
hghave: detect git availability
r5218 "git": (has_git, "git command line client"),
Brendan Cully
gpg: add test
r8809 "gpg": (has_gpg, "gpg client"),
Patrick Mezard
Add test for case folding issues
r6806 "icasefs": (has_icasefs, "case insensitive file system"),
Benoit Boissinot
inotify: deactivate inotify status on failure...
r6996 "inotify": (has_inotify, "inotify extension support"),
Patrick Mezard
Test --time, --profile and --lsprof
r5099 "lsprof": (has_lsprof, "python lsprof module"),
Sune Foldager
tests: update monotone version requirement
r14432 "mtn": (has_mtn, "monotone client (>= 1.0)"),
Mads Kiilerich
tests: Skip tests if they will fail because of outer repo...
r7429 "outer-repo": (has_outer_repo, "outer repo"),
Frank Kingswood
convert: Perforce source for conversion to Mercurial
r7823 "p4": (has_p4, "Perforce server and client"),
timeless
tests: add pyflakes checking for unused imports
r14140 "pyflakes": (has_pyflakes, "Pyflakes python linter"),
Benoit Boissinot
inotify: deactivate inotify status on failure...
r6996 "pygments": (has_pygments, "Pygments source highlighting library"),
timeless
tests: improve hghave error reporting for missing Py OpenSSL
r13543 "ssl": (has_ssl, "python >= 2.6 ssl module and python OpenSSL"),
Patrick Mezard
hghave: detect subversion client and admin tools availability
r5253 "svn": (has_svn, "subversion client and admin tools"),
Patrick Mezard
subrepo: handle svn tracked/unknown directory collisions...
r14050 "svn15": (has_svn15, "subversion client and admin tools >= 1.5"),
Patrick Mezard
hghave: detect subversion bindings availability
r5254 "svn-bindings": (has_svn_bindings, "subversion python bindings"),
Patrick Mezard
Test --time, --profile and --lsprof
r5099 "symlink": (has_symlink, "symbolic links"),
Aleix Conchillo Flaque
convert: added GNU Arch (tla) tests and related fixes
r6079 "tla": (has_tla, "GNU Arch tla client"),
Alexis S. L. Carvalho
hghave: detect unix-style permissions...
r6063 "unix-permissions": (has_unix_permissions, "unix-style permissions"),
Patrick Mezard
Add hghave utility and run-tests.py support....
r4881 }
def list_features():
for name, feature in checks.iteritems():
desc = feature[1]
print name + ':', desc
Nicolas Dumazet
hghave: checking that all targets are Exception-free
r8059 def test_features():
failed = 0
for name, feature in checks.iteritems():
check, _ = feature
try:
check()
except Exception, e:
print "feature %s failed: %s" % (name, e)
failed += 1
return failed
Patrick Mezard
Add hghave utility and run-tests.py support....
r4881 parser = optparse.OptionParser("%prog [options] [features]")
Nicolas Dumazet
hghave: checking that all targets are Exception-free
r8059 parser.add_option("--test-features", action="store_true",
help="test available features")
Patrick Mezard
Add hghave utility and run-tests.py support....
r4881 parser.add_option("--list-features", action="store_true",
help="list available features")
parser.add_option("-q", "--quiet", action="store_true",
help="check features silently")
if __name__ == '__main__':
options, args = parser.parse_args()
if options.list_features:
list_features()
sys.exit(0)
Thomas Arendsen Hein
Remove trailing spaces
r5081
Nicolas Dumazet
hghave: checking that all targets are Exception-free
r8059 if options.test_features:
sys.exit(test_features())
Patrick Mezard
Add hghave utility and run-tests.py support....
r4881 quiet = options.quiet
failures = 0
def error(msg):
global failures
if not quiet:
sys.stderr.write(msg + '\n')
failures += 1
Thomas Arendsen Hein
Remove trailing spaces
r5081
Patrick Mezard
Add hghave utility and run-tests.py support....
r4881 for feature in args:
Patrick Mezard
hghave: feature absence can be checked by prefixing with 'no-'
r5084 negate = feature.startswith('no-')
if negate:
feature = feature[3:]
Thomas Arendsen Hein
Hide absolute path from test-no-symlinks output....
r5091
Patrick Mezard
Add hghave utility and run-tests.py support....
r4881 if feature not in checks:
Thomas Arendsen Hein
Use skipped: instead of hghave: for skipping tests, use this in test-merge-types
r5685 error('skipped: unknown feature: ' + feature)
Patrick Mezard
Add hghave utility and run-tests.py support....
r4881 continue
Thomas Arendsen Hein
Remove trailing spaces
r5081
check, desc = checks[feature]
Nicolas Dumazet
run-tests: detect when hghave fails to check for a feature and fail test...
r8060 try:
available = check()
except Exception, e:
error('hghave check failed: ' + feature)
continue
if not negate and not available:
Thomas Arendsen Hein
Use skipped: instead of hghave: for skipping tests, use this in test-merge-types
r5685 error('skipped: missing feature: ' + desc)
Nicolas Dumazet
run-tests: detect when hghave fails to check for a feature and fail test...
r8060 elif negate and available:
Thomas Arendsen Hein
Use skipped: instead of hghave: for skipping tests, use this in test-merge-types
r5685 error('skipped: system supports %s' % desc)
Patrick Mezard
Add hghave utility and run-tests.py support....
r4881
if failures != 0:
sys.exit(1)