~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to tools/win32/py2exe_boot_common.py

  • Committer: Vincent Ladeuil
  • Date: 2012-01-18 14:09:19 UTC
  • mto: This revision was merged to the branch mainline in revision 6468.
  • Revision ID: v.ladeuil+lp@free.fr-20120118140919-rlvdrhpc0nq1lbwi
Change set/remove to require a lock for the branch config files.

This means that tests (or any plugin for that matter) do not requires an
explicit lock on the branch anymore to change a single option. This also
means the optimisation becomes "opt-in" and as such won't be as
spectacular as it may be and/or harder to get right (nothing fails
anymore).

This reduces the diff by ~300 lines.

Code/tests that were updating more than one config option is still taking
a lock to at least avoid some IOs and demonstrate the benefits through
the decreased number of hpss calls.

The duplication between BranchStack and BranchOnlyStack will be removed
once the same sharing is in place for local config files, at which point
the Stack class itself may be able to host the changes.

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
    class Blackhole(object):
 
12
        softspace = 0
 
13
        def write(self, text):
 
14
            pass
 
15
        def flush(self):
 
16
            pass
 
17
    sys.stdout = Blackhole()
 
18
    sys.stderr = Blackhole()
 
19
    del Blackhole
 
20
 
 
21
# add more directories to sys.path to allow "installing" third-party libs
 
22
# required by some plugins (see bug #743256)
 
23
import os
 
24
sys.path.append(os.path.join(os.path.dirname(sys.executable), 'site-packages'))
 
25
del os
 
26
del sys
 
27
 
 
28
# Disable linecache.getline() which is called by
 
29
# traceback.extract_stack() when an exception occurs to try and read
 
30
# the filenames embedded in the packaged python code.  This is really
 
31
# annoying on windows when the d: or e: on our build box refers to
 
32
# someone elses removable or network drive so the getline() call
 
33
# causes it to ask them to insert a disk in that drive.
 
34
import linecache
 
35
def fake_getline(filename, lineno, module_globals=None):
 
36
    return ''
 
37
linecache.orig_getline = linecache.getline
 
38
linecache.getline = fake_getline
 
39
 
 
40
del linecache, fake_getline