mercurial/demandload.py
author mpm@selenic.com
Tue, 16 Aug 2005 14:53:47 -0800
changeset 917 7f3f55903496
parent 262 3db700146536
child 1826 f3abe0bdccdd
permissions -rw-r--r--
Fix hg clone race with writer Most read operations in hg don't need locks because we order reads and writes for consistency. Clone is an exception to this as we're copying entire file histories and could end up with more file history copied than we have commits. For now, make clone take a lock on the source repo. Non-hardlinked clone should eventually be changed to use lockless pull.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
262
3db700146536 implement demand loading hack
mpm@selenic.com
parents:
diff changeset
     1
def demandload(scope, modules):
3db700146536 implement demand loading hack
mpm@selenic.com
parents:
diff changeset
     2
    class d:
3db700146536 implement demand loading hack
mpm@selenic.com
parents:
diff changeset
     3
        def __getattr__(self, name):
3db700146536 implement demand loading hack
mpm@selenic.com
parents:
diff changeset
     4
            mod = self.__dict__["mod"]
3db700146536 implement demand loading hack
mpm@selenic.com
parents:
diff changeset
     5
            scope = self.__dict__["scope"]
3db700146536 implement demand loading hack
mpm@selenic.com
parents:
diff changeset
     6
            scope[mod] = __import__(mod, scope, scope, [])
3db700146536 implement demand loading hack
mpm@selenic.com
parents:
diff changeset
     7
            return getattr(scope[mod], name)
3db700146536 implement demand loading hack
mpm@selenic.com
parents:
diff changeset
     8
3db700146536 implement demand loading hack
mpm@selenic.com
parents:
diff changeset
     9
    for m in modules.split():
3db700146536 implement demand loading hack
mpm@selenic.com
parents:
diff changeset
    10
        dl = d()
3db700146536 implement demand loading hack
mpm@selenic.com
parents:
diff changeset
    11
        dl.mod = m
3db700146536 implement demand loading hack
mpm@selenic.com
parents:
diff changeset
    12
        dl.scope = scope
3db700146536 implement demand loading hack
mpm@selenic.com
parents:
diff changeset
    13
        scope[m] = dl
3db700146536 implement demand loading hack
mpm@selenic.com
parents:
diff changeset
    14
3db700146536 implement demand loading hack
mpm@selenic.com
parents:
diff changeset
    15