src/mercurialserver/config.py
author Paul Crowley <paul@lshift.net>
Tue, 06 Sep 2011 10:44:20 +0100
changeset 307 9009a37ad45b
parent 303 3f9f247b72bd
child 374 7a1d6b228af6
permissions -rw-r--r--
Demandimport fix for simplejson test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
242
03d8f07230b3 Tidy up file prologues; move credits to CREDITS
Paul Crowley <paul@lshift.net>
parents: 225
diff changeset
     1
"""
03d8f07230b3 Tidy up file prologues; move credits to CREDITS
Paul Crowley <paul@lshift.net>
parents: 225
diff changeset
     2
Fix $HOME and read ~/.mercurial-server
03d8f07230b3 Tidy up file prologues; move credits to CREDITS
Paul Crowley <paul@lshift.net>
parents: 225
diff changeset
     3
"""
70
abb9ed8972e0 Move more into hg-ssh
Paul Crowley <paul@lshift.net>
parents:
diff changeset
     4
79
3a58a95fae2f abolish hg-ssh-wrapper
Paul Crowley <paul@lshift.net>
parents: 70
diff changeset
     5
import sys
217
32b431977bf9 Fix /home/paul if it's broken when we start
Paul Crowley <paul@lshift.net>
parents: 216
diff changeset
     6
import os
79
3a58a95fae2f abolish hg-ssh-wrapper
Paul Crowley <paul@lshift.net>
parents: 70
diff changeset
     7
import os.path
217
32b431977bf9 Fix /home/paul if it's broken when we start
Paul Crowley <paul@lshift.net>
parents: 216
diff changeset
     8
import pwd
215
584df0f2e5c7 Use ConfigParser istead of mercurial.config
Paul Crowley <paul@lshift.net>
parents: 213
diff changeset
     9
import ConfigParser
79
3a58a95fae2f abolish hg-ssh-wrapper
Paul Crowley <paul@lshift.net>
parents: 70
diff changeset
    10
165
3606d60b07e5 Use .mercurial-sever file instead of hardcoding
Paul Crowley <paul@lshift.net>
parents: 79
diff changeset
    11
globalconfig = None
3606d60b07e5 Use .mercurial-sever file instead of hardcoding
Paul Crowley <paul@lshift.net>
parents: 79
diff changeset
    12
3606d60b07e5 Use .mercurial-sever file instead of hardcoding
Paul Crowley <paul@lshift.net>
parents: 79
diff changeset
    13
def _getConf():
3606d60b07e5 Use .mercurial-sever file instead of hardcoding
Paul Crowley <paul@lshift.net>
parents: 79
diff changeset
    14
    global globalconfig
3606d60b07e5 Use .mercurial-sever file instead of hardcoding
Paul Crowley <paul@lshift.net>
parents: 79
diff changeset
    15
    if globalconfig is None:
215
584df0f2e5c7 Use ConfigParser istead of mercurial.config
Paul Crowley <paul@lshift.net>
parents: 213
diff changeset
    16
        globalconfig = ConfigParser.RawConfigParser()
165
3606d60b07e5 Use .mercurial-sever file instead of hardcoding
Paul Crowley <paul@lshift.net>
parents: 79
diff changeset
    17
        globalconfig.read(os.path.expanduser("~/.mercurial-server"))
3606d60b07e5 Use .mercurial-sever file instead of hardcoding
Paul Crowley <paul@lshift.net>
parents: 79
diff changeset
    18
    return globalconfig
3606d60b07e5 Use .mercurial-sever file instead of hardcoding
Paul Crowley <paul@lshift.net>
parents: 79
diff changeset
    19
3606d60b07e5 Use .mercurial-sever file instead of hardcoding
Paul Crowley <paul@lshift.net>
parents: 79
diff changeset
    20
def _getPath(name):
215
584df0f2e5c7 Use ConfigParser istead of mercurial.config
Paul Crowley <paul@lshift.net>
parents: 213
diff changeset
    21
    return os.path.expanduser(_getConf().get("paths", name))
165
3606d60b07e5 Use .mercurial-sever file instead of hardcoding
Paul Crowley <paul@lshift.net>
parents: 79
diff changeset
    22
303
3f9f247b72bd Allow mq clones
Paul Crowley <paul@lshift.net>
parents: 242
diff changeset
    23
def _getPaths(name):
165
3606d60b07e5 Use .mercurial-sever file instead of hardcoding
Paul Crowley <paul@lshift.net>
parents: 79
diff changeset
    24
    return [os.path.expanduser(p)
215
584df0f2e5c7 Use ConfigParser istead of mercurial.config
Paul Crowley <paul@lshift.net>
parents: 213
diff changeset
    25
        for p in _getConf().get("paths", name).split(":")]
165
3606d60b07e5 Use .mercurial-sever file instead of hardcoding
Paul Crowley <paul@lshift.net>
parents: 79
diff changeset
    26
3606d60b07e5 Use .mercurial-sever file instead of hardcoding
Paul Crowley <paul@lshift.net>
parents: 79
diff changeset
    27
def getReposPath(): return _getPath("repos")
213
72e7ba8b41a6 Don't hardwire location of authorized_keys file
Paul Crowley <paul@lshift.net>
parents: 212
diff changeset
    28
def getAuthorizedKeysPath(): return _getPath("authorized_keys")
165
3606d60b07e5 Use .mercurial-sever file instead of hardcoding
Paul Crowley <paul@lshift.net>
parents: 79
diff changeset
    29
216
0122df83ebd0 fix configExists test
Paul Crowley <paul@lshift.net>
parents: 215
diff changeset
    30
def configExists():
0122df83ebd0 fix configExists test
Paul Crowley <paul@lshift.net>
parents: 215
diff changeset
    31
    try:
225
ff08fd5b1a62 Fix configExists properly
Paul Crowley <paul@lshift.net>
parents: 217
diff changeset
    32
        getAuthorizedKeysPath()
216
0122df83ebd0 fix configExists test
Paul Crowley <paul@lshift.net>
parents: 215
diff changeset
    33
        return True
225
ff08fd5b1a62 Fix configExists properly
Paul Crowley <paul@lshift.net>
parents: 217
diff changeset
    34
    except Exception, e:
ff08fd5b1a62 Fix configExists properly
Paul Crowley <paul@lshift.net>
parents: 217
diff changeset
    35
        print e
216
0122df83ebd0 fix configExists test
Paul Crowley <paul@lshift.net>
parents: 215
diff changeset
    36
        return False
0122df83ebd0 fix configExists test
Paul Crowley <paul@lshift.net>
parents: 215
diff changeset
    37
165
3606d60b07e5 Use .mercurial-sever file instead of hardcoding
Paul Crowley <paul@lshift.net>
parents: 79
diff changeset
    38
def getKeysPaths(): return _getPaths("keys")
3606d60b07e5 Use .mercurial-sever file instead of hardcoding
Paul Crowley <paul@lshift.net>
parents: 79
diff changeset
    39
def getAccessPaths(): return _getPaths("access")
3606d60b07e5 Use .mercurial-sever file instead of hardcoding
Paul Crowley <paul@lshift.net>
parents: 79
diff changeset
    40
215
584df0f2e5c7 Use ConfigParser istead of mercurial.config
Paul Crowley <paul@lshift.net>
parents: 213
diff changeset
    41
def getEnv(): return _getConf().items("env")
165
3606d60b07e5 Use .mercurial-sever file instead of hardcoding
Paul Crowley <paul@lshift.net>
parents: 79
diff changeset
    42
303
3f9f247b72bd Allow mq clones
Paul Crowley <paul@lshift.net>
parents: 242
diff changeset
    43
def _getdefault(section, option, default, f = lambda x: x):
3f9f247b72bd Allow mq clones
Paul Crowley <paul@lshift.net>
parents: 242
diff changeset
    44
    conf = _getConf()
3f9f247b72bd Allow mq clones
Paul Crowley <paul@lshift.net>
parents: 242
diff changeset
    45
    if conf.has_option(section, option):
3f9f247b72bd Allow mq clones
Paul Crowley <paul@lshift.net>
parents: 242
diff changeset
    46
        return f(conf.get(section, option))
3f9f247b72bd Allow mq clones
Paul Crowley <paul@lshift.net>
parents: 242
diff changeset
    47
    else:
3f9f247b72bd Allow mq clones
Paul Crowley <paul@lshift.net>
parents: 242
diff changeset
    48
        return default
3f9f247b72bd Allow mq clones
Paul Crowley <paul@lshift.net>
parents: 242
diff changeset
    49
3f9f247b72bd Allow mq clones
Paul Crowley <paul@lshift.net>
parents: 242
diff changeset
    50
def getAllowedDots():
3f9f247b72bd Allow mq clones
Paul Crowley <paul@lshift.net>
parents: 242
diff changeset
    51
    return _getdefault("exceptions", "allowdots", [],
3f9f247b72bd Allow mq clones
Paul Crowley <paul@lshift.net>
parents: 242
diff changeset
    52
        lambda s: s.split(":"))
3f9f247b72bd Allow mq clones
Paul Crowley <paul@lshift.net>
parents: 242
diff changeset
    53
165
3606d60b07e5 Use .mercurial-sever file instead of hardcoding
Paul Crowley <paul@lshift.net>
parents: 79
diff changeset
    54
# Work out where we are, don't use config.
217
32b431977bf9 Fix /home/paul if it's broken when we start
Paul Crowley <paul@lshift.net>
parents: 216
diff changeset
    55
def initExe():
79
3a58a95fae2f abolish hg-ssh-wrapper
Paul Crowley <paul@lshift.net>
parents: 70
diff changeset
    56
    global _exePath
3a58a95fae2f abolish hg-ssh-wrapper
Paul Crowley <paul@lshift.net>
parents: 70
diff changeset
    57
    _exePath = os.path.dirname(os.path.abspath(sys.argv[0]))
217
32b431977bf9 Fix /home/paul if it's broken when we start
Paul Crowley <paul@lshift.net>
parents: 216
diff changeset
    58
    # Fix $HOME in case of "sudo -u hg refresh-auth"
32b431977bf9 Fix /home/paul if it's broken when we start
Paul Crowley <paul@lshift.net>
parents: 216
diff changeset
    59
    os.environ['HOME'] = pwd.getpwuid(os.geteuid()).pw_dir
79
3a58a95fae2f abolish hg-ssh-wrapper
Paul Crowley <paul@lshift.net>
parents: 70
diff changeset
    60
3a58a95fae2f abolish hg-ssh-wrapper
Paul Crowley <paul@lshift.net>
parents: 70
diff changeset
    61
def getExePath():
3a58a95fae2f abolish hg-ssh-wrapper
Paul Crowley <paul@lshift.net>
parents: 70
diff changeset
    62
    return _exePath