~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/strace.py

  • Committer: Vincent Ladeuil
  • Date: 2007-07-03 09:28:59 UTC
  • mto: (2584.1.1 Aaron's integration)
  • mto: This revision was merged to the branch mainline in revision 2585.
  • Revision ID: v.ladeuil+lp@free.fr-20070703092859-yl7j53209tfmhf7u
Take Martin and Robert comments into account.

* bzrlib/strace.py:
(strace): is now a wrapper that calls strace_detailed.
(strace_detailed): like strace before but with an option to
disable following forked children without polluting the kwargs
param.

* bzrlib/tests/test_strace.py:
(TestStrace.test_strace_callable_is_called,
TestStrace.test_strace_callable_result,
TestStrace.test_strace_result_has_raw_log): use strace_detailed
while disabling following forked children, the syntax is a bit
uglier but non-test users should never use anyway..

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
 
34
34
    :return: a tuple: function-result, a StraceResult.
35
35
    """
 
36
    return strace_detailed(function, args, kwargs)
 
37
 
 
38
 
 
39
def strace_detailed(function, args, kwargs, follow_children=True):
36
40
    # FIXME: strace is buggy
37
41
    # (https://bugs.launchpad.net/ubuntu/+source/strace/+bug/103133) and the
38
42
    # test suite hangs if the '-f' is given to strace *and* more than one
39
 
    # thread is running. The following allows the test suite to disable fork
40
 
    # following to work around the bug.  It's a bit dirty to pollute the kwargs
41
 
    # so we take a likely-to-be-unique name to avoid conflicts (*args and
42
 
    # *kwargs are related to 'function'). It's also ugly, but the best
43
 
    # alternative I can think of is to declare another function, which is ugly
44
 
    # too.
45
 
    follow_children = kwargs.pop('strace_follow_children', True)
 
43
    # thread is running. Using follow_children=False allows the test suite to
 
44
    # disable fork following to work around the bug.
 
45
 
46
46
    # capture strace output to a file
47
47
    log_file = tempfile.NamedTemporaryFile()
48
48
    log_file_fd = log_file.fileno()