~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to tools/win32/py2exe_boot_common.py

Add bzrlib.pyutils, which has get_named_object, a wrapper around __import__.

This is used to replace various ad hoc implementations of the same logic,
notably the version used in registry's _LazyObjectGetter which had a bug when
getting a module without also getting a member.  And of course, this new
function has unit tests, unlike the replaced code.

This also adds a KnownHooksRegistry subclass to provide a more natural home for
some other logic.

I'm not thrilled about the name of the new module or the new functions, but it's
hard to think of good names for such generic functionality.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Common py2exe boot script - executed for all target types.
 
2
 
 
3
# In the standard py2exe boot script, it setup stderr so that anything written
 
4
# to it will be written to exe.log, and a message dialog is shown.
 
5
# For Bazaar, we log most things to .bzr.log, and there are many things that
 
6
# write to stderr, that are not errors, and so we don't want the py2exe dialog
 
7
# message, So also blackhole stderr.
 
8
 
 
9
import sys
 
10
if sys.frozen == "windows_exe":
 
11
 
 
12
    class Blackhole(object):
 
13
        softspace = 0
 
14
        def write(self, text):
 
15
            pass
 
16
        def flush(self):
 
17
            pass
 
18
    sys.stdout = Blackhole()
 
19
    sys.stderr = Blackhole()
 
20
    del Blackhole
 
21
del sys
 
22
 
 
23
# Disable linecache.getline() which is called by
 
24
# traceback.extract_stack() when an exception occurs to try and read
 
25
# the filenames embedded in the packaged python code.  This is really
 
26
# annoying on windows when the d: or e: on our build box refers to
 
27
# someone elses removable or network drive so the getline() call
 
28
# causes it to ask them to insert a disk in that drive.
 
29
import linecache
 
30
def fake_getline(filename, lineno, module_globals=None):
 
31
    return ''
 
32
linecache.orig_getline = linecache.getline
 
33
linecache.getline = fake_getline
 
34
 
 
35
del linecache, fake_getline