Mercurial > cpython-lru_cache-weakref
annotate Tools/scripts/trace.py @ 28646:193b8aec00ce legacy-trunk
Changes from Jonathan Riehl to allow his pgen extension (PEP 269) to
work. This includes some more code that used to be part of pgen in
the main parser; I'm okay with that. I'll see if the Windows build
needs work next.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Thu, 17 Apr 2003 14:55:42 +0000 |
| parents | 45906223efb2 |
| children | c9bee11eaa8b |
| rev | line source |
|---|---|
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
2 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
3 # portions copyright 2001, Autonomous Zones Industries, Inc., all rights... |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
4 # err... reserved and offered to the public under the terms of the |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
5 # Python 2.2 license. |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
6 # Author: Zooko O'Whielacronx |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
7 # http://zooko.com/ |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
8 # mailto:zooko@zooko.com |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
9 # |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
10 # Copyright 2000, Mojam Media, Inc., all rights reserved. |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
11 # Author: Skip Montanaro |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
12 # |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
13 # Copyright 1999, Bioreason, Inc., all rights reserved. |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
14 # Author: Andrew Dalke |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
15 # |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
16 # Copyright 1995-1997, Automatrix, Inc., all rights reserved. |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
17 # Author: Skip Montanaro |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
18 # |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
19 # Copyright 1991-1995, Stichting Mathematisch Centrum, all rights reserved. |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
20 # |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
21 # |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
22 # Permission to use, copy, modify, and distribute this Python software and |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
23 # its associated documentation for any purpose without fee is hereby |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
24 # granted, provided that the above copyright notice appears in all copies, |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
25 # and that both that copyright notice and this permission notice appear in |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
26 # supporting documentation, and that the name of neither Automatrix, |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
27 # Bioreason or Mojam Media be used in advertising or publicity pertaining to |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
28 # distribution of the software without specific, written prior permission. |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
29 # |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
30 """program/module to trace Python program or function execution |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
31 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
32 Sample use, command line: |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
33 trace.py -c -f counts --ignore-dir '$prefix' spam.py eggs |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
34 trace.py -t --ignore-dir '$prefix' spam.py eggs |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
35 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
36 Sample use, programmatically |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
37 # create a Trace object, telling it what to ignore, and whether to |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
38 # do tracing or line-counting or both. |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
39 trace = trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix,], trace=0, |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
40 count=1) |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
41 # run the new command using the given trace |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
42 trace.run(coverage.globaltrace, 'main()') |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
43 # make a report, telling it where you want output |
|
26609
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
44 r = trace.results() |
|
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
45 r.write_results(show_missing=1) |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
46 """ |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
47 |
|
25219
8a7a2f1f88f0
Apply diff2.txt from SF patch http://www.python.org/sf/572113
Walter Dörwald <walter@livinglogic.de>
parents:
24844
diff
changeset
|
48 import sys, os, tempfile, types, copy, operator, inspect, exceptions, marshal |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
49 try: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
50 import cPickle |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
51 pickle = cPickle |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
52 except ImportError: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
53 import pickle |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
54 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
55 # DEBUG_MODE=1 # make this true to get printouts which help you understand what's going on |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
56 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
57 def usage(outfile): |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
58 outfile.write("""Usage: %s [OPTIONS] <file> [ARGS] |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
59 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
60 Meta-options: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
61 --help Display this help then exit. |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
62 --version Output version information then exit. |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
63 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
64 Otherwise, exactly one of the following three options must be given: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
65 -t, --trace Print each line to sys.stdout before it is executed. |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
66 -c, --count Count the number of times each line is executed |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
67 and write the counts to <module>.cover for each |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
68 module executed, in the module's directory. |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
69 See also `--coverdir', `--file', `--no-report' below. |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
70 -r, --report Generate a report from a counts file; do not execute |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
71 any code. `--file' must specify the results file to |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
72 read, which must have been created in a previous run |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
73 with `--count --file=FILE'. |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
74 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
75 Modifiers: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
76 -f, --file=<file> File to accumulate counts over several runs. |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
77 -R, --no-report Do not generate the coverage report files. |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
78 Useful if you want to accumulate over several runs. |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
79 -C, --coverdir=<dir> Directory where the report files. The coverage |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
80 report for <package>.<module> is written to file |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
81 <dir>/<package>/<module>.cover. |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
82 -m, --missing Annotate executable lines that were not executed |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
83 with '>>>>>> '. |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
84 -s, --summary Write a brief summary on stdout for each file. |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
85 (Can only be used with --count or --report.) |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
86 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
87 Filters, may be repeated multiple times: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
88 --ignore-module=<mod> Ignore the given module and its submodules |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
89 (if it is a package). |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
90 --ignore-dir=<dir> Ignore files in the given directory (multiple |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
91 directories can be joined by os.pathsep). |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
92 """ % sys.argv[0]) |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
93 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
94 class Ignore: |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
95 def __init__(self, modules = None, dirs = None): |
| 14657 | 96 self._mods = modules or [] |
| 97 self._dirs = dirs or [] | |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
98 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
99 self._dirs = map(os.path.normpath, self._dirs) |
| 14657 | 100 self._ignore = { '<string>': 1 } |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
101 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
102 def names(self, filename, modulename): |
| 14657 | 103 if self._ignore.has_key(modulename): |
| 104 return self._ignore[modulename] | |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
105 |
| 14657 | 106 # haven't seen this one before, so see if the module name is |
| 107 # on the ignore list. Need to take some care since ignoring | |
| 108 # "cmp" musn't mean ignoring "cmpcache" but ignoring | |
| 109 # "Spam" must also mean ignoring "Spam.Eggs". | |
| 110 for mod in self._mods: | |
| 111 if mod == modulename: # Identical names, so ignore | |
| 112 self._ignore[modulename] = 1 | |
| 113 return 1 | |
| 114 # check if the module is a proper submodule of something on | |
| 115 # the ignore list | |
| 116 n = len(mod) | |
| 117 # (will not overflow since if the first n characters are the | |
| 118 # same and the name has not already occured, then the size | |
| 119 # of "name" is greater than that of "mod") | |
| 120 if mod == modulename[:n] and modulename[n] == '.': | |
| 121 self._ignore[modulename] = 1 | |
| 122 return 1 | |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
123 |
| 14657 | 124 # Now check that __file__ isn't in one of the directories |
| 125 if filename is None: | |
| 126 # must be a built-in, so we must ignore | |
| 127 self._ignore[modulename] = 1 | |
| 128 return 1 | |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
129 |
| 14657 | 130 # Ignore a file when it contains one of the ignorable paths |
| 131 for d in self._dirs: | |
| 132 # The '+ os.sep' is to ensure that d is a parent directory, | |
| 133 # as compared to cases like: | |
| 134 # d = "/usr/local" | |
| 135 # filename = "/usr/local.py" | |
| 136 # or | |
| 137 # d = "/usr/local.py" | |
| 138 # filename = "/usr/local.py" | |
|
25219
8a7a2f1f88f0
Apply diff2.txt from SF patch http://www.python.org/sf/572113
Walter Dörwald <walter@livinglogic.de>
parents:
24844
diff
changeset
|
139 if filename.startswith(d + os.sep): |
| 14657 | 140 self._ignore[modulename] = 1 |
| 141 return 1 | |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
142 |
| 14657 | 143 # Tried the different ways, so we don't ignore this module |
| 144 self._ignore[modulename] = 0 | |
| 145 return 0 | |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
146 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
147 class CoverageResults: |
|
26609
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
148 def __init__(self, counts=None, calledfuncs=None, infile=None, |
|
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
149 outfile=None): |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
150 self.counts = counts |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
151 if self.counts is None: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
152 self.counts = {} |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
153 self.counter = self.counts.copy() # map (filename, lineno) to count |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
154 self.calledfuncs = calledfuncs |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
155 if self.calledfuncs is None: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
156 self.calledfuncs = {} |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
157 self.calledfuncs = self.calledfuncs.copy() |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
158 self.infile = infile |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
159 self.outfile = outfile |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
160 if self.infile: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
161 # try and merge existing counts file |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
162 try: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
163 thingie = pickle.load(open(self.infile, 'r')) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
164 if type(thingie) is types.DictType: |
|
26609
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
165 # backwards compatibility for old trace.py after |
|
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
166 # Zooko touched it but before calledfuncs --Zooko |
|
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
167 # 2001-10-24 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
168 self.update(self.__class__(thingie)) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
169 elif type(thingie) is types.TupleType and len(thingie) == 2: |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
170 counts, calledfuncs = thingie |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
171 self.update(self.__class__(counts, calledfuncs)) |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
172 except (IOError, EOFError): |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
173 pass |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
174 except pickle.UnpicklingError: |
|
26609
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
175 # backwards compatibility for old trace.py before |
|
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
176 # Zooko touched it --Zooko 2001-10-24 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
177 self.update(self.__class__(marshal.load(open(self.infile)))) |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
178 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
179 def update(self, other): |
| 14657 | 180 """Merge in the data from another CoverageResults""" |
| 181 counts = self.counts | |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
182 calledfuncs = self.calledfuncs |
| 14657 | 183 other_counts = other.counts |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
184 other_calledfuncs = other.calledfuncs |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
185 |
| 14657 | 186 for key in other_counts.keys(): |
|
26609
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
187 if key != 'calledfuncs': |
|
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
188 # backwards compatibility for abortive attempt to |
|
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
189 # stuff calledfuncs into self.counts, by Zooko |
|
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
190 # --Zooko 2001-10-24 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
191 counts[key] = counts.get(key, 0) + other_counts[key] |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
192 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
193 for key in other_calledfuncs.keys(): |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
194 calledfuncs[key] = 1 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
195 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
196 def write_results(self, show_missing = 1, summary = 0, coverdir = None): |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
197 """ |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
198 @param coverdir |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
199 """ |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
200 for filename, modulename, funcname in self.calledfuncs.keys(): |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
201 print ("filename: %s, modulename: %s, funcname: %s" |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
202 % (filename, modulename, funcname)) |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
203 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
204 import re |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
205 # turn the counts data ("(filename, lineno) = count") into something |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
206 # accessible on a per-file basis |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
207 per_file = {} |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
208 for thingie in self.counts.keys(): |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
209 if thingie != "calledfuncs": |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
210 # backwards compatibility for abortive attempt to |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
211 # stuff calledfuncs into self.counts, by Zooko --Zooko |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
212 # 2001-10-24 |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
213 filename, lineno = thingie |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
214 lines_hit = per_file[filename] = per_file.get(filename, {}) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
215 lines_hit[lineno] = self.counts[(filename, lineno)] |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
216 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
217 # there are many places where this is insufficient, like a blank |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
218 # line embedded in a multiline string. |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
219 blank = re.compile(r'^\s*(#.*)?$') |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
220 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
221 # accumulate summary info, if needed |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
222 sums = {} |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
223 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
224 # generate file paths for the coverage files we are going to write... |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
225 fnlist = [] |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
226 tfdir = tempfile.gettempdir() |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
227 for key in per_file.keys(): |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
228 filename = key |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
229 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
230 # skip some "files" we don't care about... |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
231 if filename == "<string>": |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
232 continue |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
233 # are these caused by code compiled using exec or something? |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
234 if filename.startswith(tfdir): |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
235 continue |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
236 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
237 modulename = inspect.getmodulename(filename) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
238 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
239 if filename.endswith(".pyc") or filename.endswith(".pyo"): |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
240 filename = filename[:-1] |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
241 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
242 if coverdir: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
243 thiscoverdir = coverdir |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
244 else: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
245 thiscoverdir = os.path.dirname(os.path.abspath(filename)) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
246 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
247 # the code from here to "<<<" is the contents of the `fileutil.make_dirs()' function in the Mojo Nation project. --Zooko 2001-10-14 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
248 # http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/mojonation/evil/common/fileutil.py?rev=HEAD&content-type=text/vnd.viewcvs-markup |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
249 tx = None |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
250 try: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
251 os.makedirs(thiscoverdir) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
252 except OSError, x: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
253 tx = x |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
254 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
255 if not os.path.isdir(thiscoverdir): |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
256 if tx: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
257 raise tx |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
258 raise exceptions.IOError, "unknown error prevented creation of directory: %s" % thiscoverdir # careful not to construct an IOError with a 2-tuple, as that has a special meaning... |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
259 # <<< |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
260 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
261 # build list file name by appending a ".cover" to the module name |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
262 # and sticking it into the specified directory |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
263 if "." in modulename: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
264 # A module in a package |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
265 finalname = modulename.split(".")[-1] |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
266 listfilename = os.path.join(thiscoverdir, finalname + ".cover") |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
267 else: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
268 listfilename = os.path.join(thiscoverdir, modulename + ".cover") |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
269 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
270 # Get the original lines from the .py file |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
271 try: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
272 lines = open(filename, 'r').readlines() |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
273 except IOError, err: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
274 sys.stderr.write("trace: Could not open %s for reading because: %s - skipping\n" % (`filename`, err)) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
275 continue |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
276 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
277 try: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
278 outfile = open(listfilename, 'w') |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
279 except IOError, err: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
280 sys.stderr.write( |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
281 '%s: Could not open %s for writing because: %s" \ |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
282 "- skipping\n' % ("trace", `listfilename`, err)) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
283 continue |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
284 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
285 # If desired, get a list of the line numbers which represent |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
286 # executable content (returned as a dict for better lookup speed) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
287 if show_missing: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
288 executable_linenos = find_executable_linenos(filename) |
| 14657 | 289 else: |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
290 executable_linenos = {} |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
291 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
292 n_lines = 0 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
293 n_hits = 0 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
294 lines_hit = per_file[key] |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
295 for i in range(len(lines)): |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
296 line = lines[i] |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
297 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
298 # do the blank/comment match to try to mark more lines |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
299 # (help the reader find stuff that hasn't been covered) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
300 if lines_hit.has_key(i+1): |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
301 # count precedes the lines that we captured |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
302 outfile.write('%5d: ' % lines_hit[i+1]) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
303 n_hits = n_hits + 1 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
304 n_lines = n_lines + 1 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
305 elif blank.match(line): |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
306 # blank lines and comments are preceded by dots |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
307 outfile.write(' . ') |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
308 else: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
309 # lines preceded by no marks weren't hit |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
310 # Highlight them if so indicated, unless the line contains |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
311 # '#pragma: NO COVER' (it is possible to embed this into |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
312 # the text as a non-comment; no easy fix) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
313 if executable_linenos.has_key(i+1) and \ |
|
25219
8a7a2f1f88f0
Apply diff2.txt from SF patch http://www.python.org/sf/572113
Walter Dörwald <walter@livinglogic.de>
parents:
24844
diff
changeset
|
314 lines[i].find(' '.join(['#pragma', 'NO COVER'])) == -1: |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
315 outfile.write('>>>>>> ') |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
316 else: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
317 outfile.write(' '*7) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
318 n_lines = n_lines + 1 |
|
25219
8a7a2f1f88f0
Apply diff2.txt from SF patch http://www.python.org/sf/572113
Walter Dörwald <walter@livinglogic.de>
parents:
24844
diff
changeset
|
319 outfile.write(lines[i].expandtabs(8)) |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
320 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
321 outfile.close() |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
322 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
323 if summary and n_lines: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
324 percent = int(100 * n_hits / n_lines) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
325 sums[modulename] = n_lines, percent, modulename, filename |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
326 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
327 if summary and sums: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
328 mods = sums.keys() |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
329 mods.sort() |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
330 print "lines cov% module (path)" |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
331 for m in mods: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
332 n_lines, percent, modulename, filename = sums[m] |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
333 print "%5d %3d%% %s (%s)" % sums[m] |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
334 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
335 if self.outfile: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
336 # try and store counts and module info into self.outfile |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
337 try: |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
338 pickle.dump((self.counts, self.calledfuncs), |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
339 open(self.outfile, 'w'), 1) |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
340 except IOError, err: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
341 sys.stderr.write("cannot save counts files because %s" % err) |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
342 |
| 24844 | 343 def _find_LINENO_from_code(code): |
| 344 """return the numbers of the lines containing the source code that | |
| 345 was compiled into code""" | |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
346 linenos = {} |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
347 |
| 24844 | 348 line_increments = [ord(c) for c in code.co_lnotab[1::2]] |
| 349 table_length = len(line_increments) | |
| 350 | |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
351 lineno = code.co_firstlineno |
| 24844 | 352 |
| 353 for li in line_increments: | |
| 354 linenos[lineno] = 1 | |
| 355 lineno += li | |
| 356 linenos[lineno] = 1 | |
| 357 | |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
358 return linenos |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
359 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
360 def _find_LINENO(code): |
| 24844 | 361 """return all of the lineno information from a code object""" |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
362 import types |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
363 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
364 # get all of the lineno information from the code of this scope level |
| 24844 | 365 linenos = _find_LINENO_from_code(code) |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
366 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
367 # and check the constants for references to other code objects |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
368 for c in code.co_consts: |
| 14657 | 369 if type(c) == types.CodeType: |
| 370 # find another code object, so recurse into it | |
| 371 linenos.update(_find_LINENO(c)) | |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
372 return linenos |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
373 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
374 def find_executable_linenos(filename): |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
375 """return a dict of the line numbers from executable statements in a file |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
376 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
377 """ |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
378 import parser |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
379 |
|
17703
f3b8785bd022
Fix several bugs and add two features.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15930
diff
changeset
|
380 assert filename.endswith('.py') |
|
f3b8785bd022
Fix several bugs and add two features.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15930
diff
changeset
|
381 |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
382 prog = open(filename).read() |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
383 ast = parser.suite(prog) |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
384 code = parser.compileast(ast, filename) |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
385 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
386 return _find_LINENO(code) |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
387 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
388 ### XXX because os.path.commonprefix seems broken by my way of thinking... |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
389 def commonprefix(dirs): |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
390 "Given a list of pathnames, returns the longest common leading component" |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
391 if not dirs: return '' |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
392 n = copy.copy(dirs) |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
393 for i in range(len(n)): |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
394 n[i] = n[i].split(os.sep) |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
395 prefix = n[0] |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
396 for item in n: |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
397 for i in range(len(prefix)): |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
398 if prefix[:i+1] <> item[:i+1]: |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
399 prefix = prefix[:i] |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
400 if i == 0: return '' |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
401 break |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
402 return os.sep.join(prefix) |
|
15930
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
14657
diff
changeset
|
403 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
404 class Trace: |
|
26609
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
405 def __init__(self, count=1, trace=1, countfuncs=0, ignoremods=(), |
|
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
406 ignoredirs=(), infile=None, outfile=None): |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
407 """ |
|
26609
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
408 @param count true iff it should count number of times each |
|
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
409 line is executed |
|
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
410 @param trace true iff it should print out each line that is |
|
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
411 being counted |
|
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
412 @param countfuncs true iff it should just output a list of |
|
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
413 (filename, modulename, funcname,) for functions |
|
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
414 that were called at least once; This overrides |
|
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
415 `count' and `trace' |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
416 @param ignoremods a list of the names of modules to ignore |
|
26609
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
417 @param ignoredirs a list of the names of directories to ignore |
|
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
418 all of the (recursive) contents of |
|
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
419 @param infile file from which to read stored counts to be |
|
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
420 added into the results |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
421 @param outfile file in which to write the results |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
422 """ |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
423 self.infile = infile |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
424 self.outfile = outfile |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
425 self.ignore = Ignore(ignoremods, ignoredirs) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
426 self.counts = {} # keys are (filename, linenumber) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
427 self.blabbed = {} # for debugging |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
428 self.pathtobasename = {} # for memoizing os.path.basename |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
429 self.donothing = 0 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
430 self.trace = trace |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
431 self._calledfuncs = {} |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
432 if countfuncs: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
433 self.globaltrace = self.globaltrace_countfuncs |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
434 elif trace and count: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
435 self.globaltrace = self.globaltrace_lt |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
436 self.localtrace = self.localtrace_trace_and_count |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
437 elif trace: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
438 self.globaltrace = self.globaltrace_lt |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
439 self.localtrace = self.localtrace_trace |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
440 elif count: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
441 self.globaltrace = self.globaltrace_lt |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
442 self.localtrace = self.localtrace_count |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
443 else: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
444 # Ahem -- do nothing? Okay. |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
445 self.donothing = 1 |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
446 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
447 def run(self, cmd): |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
448 import __main__ |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
449 dict = __main__.__dict__ |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
450 if not self.donothing: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
451 sys.settrace(self.globaltrace) |
| 14657 | 452 try: |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
453 exec cmd in dict, dict |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
454 finally: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
455 if not self.donothing: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
456 sys.settrace(None) |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
457 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
458 def runctx(self, cmd, globals=None, locals=None): |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
459 if globals is None: globals = {} |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
460 if locals is None: locals = {} |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
461 if not self.donothing: |
|
24377
ec2c854bd196
* runctx - fix a couple typos
Skip Montanaro <skip@pobox.com>
parents:
21071
diff
changeset
|
462 sys.settrace(self.globaltrace) |
| 14657 | 463 try: |
|
24377
ec2c854bd196
* runctx - fix a couple typos
Skip Montanaro <skip@pobox.com>
parents:
21071
diff
changeset
|
464 exec cmd in globals, locals |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
465 finally: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
466 if not self.donothing: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
467 sys.settrace(None) |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
468 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
469 def runfunc(self, func, *args, **kw): |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
470 result = None |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
471 if not self.donothing: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
472 sys.settrace(self.globaltrace) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
473 try: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
474 result = apply(func, args, kw) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
475 finally: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
476 if not self.donothing: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
477 sys.settrace(None) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
478 return result |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
479 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
480 def globaltrace_countfuncs(self, frame, why, arg): |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
481 """ |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
482 Handles `call' events (why == 'call') and adds the (filename, modulename, funcname,) to the self._calledfuncs dict. |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
483 """ |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
484 if why == 'call': |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
485 filename, lineno, funcname, context, lineindex = \ |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
486 inspect.getframeinfo(frame, 0) |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
487 if filename: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
488 modulename = inspect.getmodulename(filename) |
| 14657 | 489 else: |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
490 modulename = None |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
491 self._calledfuncs[(filename, modulename, funcname,)] = 1 |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
492 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
493 def globaltrace_lt(self, frame, why, arg): |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
494 """ |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
495 Handles `call' events (why == 'call') and if the code block being entered is to be ignored then it returns `None', else it returns `self.localtrace'. |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
496 """ |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
497 if why == 'call': |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
498 filename, lineno, funcname, context, lineindex = \ |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
499 inspect.getframeinfo(frame, 0) |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
500 if filename: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
501 modulename = inspect.getmodulename(filename) |
|
24377
ec2c854bd196
* runctx - fix a couple typos
Skip Montanaro <skip@pobox.com>
parents:
21071
diff
changeset
|
502 if modulename is not None: |
|
ec2c854bd196
* runctx - fix a couple typos
Skip Montanaro <skip@pobox.com>
parents:
21071
diff
changeset
|
503 ignore_it = self.ignore.names(filename, modulename) |
|
ec2c854bd196
* runctx - fix a couple typos
Skip Montanaro <skip@pobox.com>
parents:
21071
diff
changeset
|
504 if not ignore_it: |
|
ec2c854bd196
* runctx - fix a couple typos
Skip Montanaro <skip@pobox.com>
parents:
21071
diff
changeset
|
505 if self.trace: |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
506 print (" --- modulename: %s, funcname: %s" |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
507 % (modulename, funcname)) |
|
24377
ec2c854bd196
* runctx - fix a couple typos
Skip Montanaro <skip@pobox.com>
parents:
21071
diff
changeset
|
508 return self.localtrace |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
509 else: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
510 # XXX why no filename? |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
511 return None |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
512 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
513 def localtrace_trace_and_count(self, frame, why, arg): |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
514 if why == 'line': |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
515 # record the file name and line number of every trace |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
516 # XXX I wish inspect offered me an optimized |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
517 # `getfilename(frame)' to use in place of the presumably |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
518 # heavier `getframeinfo()'. --Zooko 2001-10-14 |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
519 |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
520 filename, lineno, funcname, context, lineindex = \ |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
521 inspect.getframeinfo(frame, 1) |
|
26609
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
522 key = filename, lineno |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
523 self.counts[key] = self.counts.get(key, 0) + 1 |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
524 |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
525 # XXX not convinced that this memoizing is a performance |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
526 # win -- I don't know enough about Python guts to tell. |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
527 # --Zooko 2001-10-14 |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
528 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
529 bname = self.pathtobasename.get(filename) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
530 if bname is None: |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
531 |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
532 # Using setdefault faster than two separate lines? |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
533 # --Zooko 2001-10-14 |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
534 bname = self.pathtobasename.setdefault(filename, |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
535 os.path.basename(filename)) |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
536 try: |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
537 print "%s(%d): %s" % (bname, lineno, context[lineindex]), |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
538 except IndexError: |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
539 # Uh.. sometimes getframeinfo gives me a context of |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
540 # length 1 and a lineindex of -2. Oh well. |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
541 pass |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
542 return self.localtrace |
|
17703
f3b8785bd022
Fix several bugs and add two features.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15930
diff
changeset
|
543 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
544 def localtrace_trace(self, frame, why, arg): |
| 14657 | 545 if why == 'line': |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
546 # XXX shouldn't do the count increment when arg is |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
547 # exception? But be careful to return self.localtrace |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
548 # when arg is exception! ? --Zooko 2001-10-14 |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
549 |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
550 # record the file name and line number of every trace XXX |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
551 # I wish inspect offered me an optimized |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
552 # `getfilename(frame)' to use in place of the presumably |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
553 # heavier `getframeinfo()'. --Zooko 2001-10-14 |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
554 filename, lineno, funcname, context, lineindex = \ |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
555 inspect.getframeinfo(frame) |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
556 |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
557 # XXX not convinced that this memoizing is a performance |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
558 # win -- I don't know enough about Python guts to tell. |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
559 # --Zooko 2001-10-14 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
560 bname = self.pathtobasename.get(filename) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
561 if bname is None: |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
562 # Using setdefault faster than two separate lines? |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
563 # --Zooko 2001-10-14 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
564 bname = self.pathtobasename.setdefault(filename, os.path.basename(filename)) |
|
24377
ec2c854bd196
* runctx - fix a couple typos
Skip Montanaro <skip@pobox.com>
parents:
21071
diff
changeset
|
565 if context is not None: |
|
ec2c854bd196
* runctx - fix a couple typos
Skip Montanaro <skip@pobox.com>
parents:
21071
diff
changeset
|
566 try: |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
567 print "%s(%d): %s" % (bname, lineno, context[lineindex]), |
|
24377
ec2c854bd196
* runctx - fix a couple typos
Skip Montanaro <skip@pobox.com>
parents:
21071
diff
changeset
|
568 except IndexError: |
|
ec2c854bd196
* runctx - fix a couple typos
Skip Montanaro <skip@pobox.com>
parents:
21071
diff
changeset
|
569 # Uh.. sometimes getframeinfo gives me a context of length 1 and a lineindex of -2. Oh well. |
|
ec2c854bd196
* runctx - fix a couple typos
Skip Montanaro <skip@pobox.com>
parents:
21071
diff
changeset
|
570 pass |
|
ec2c854bd196
* runctx - fix a couple typos
Skip Montanaro <skip@pobox.com>
parents:
21071
diff
changeset
|
571 else: |
|
ec2c854bd196
* runctx - fix a couple typos
Skip Montanaro <skip@pobox.com>
parents:
21071
diff
changeset
|
572 print "%s(???): ???" % bname |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
573 return self.localtrace |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
574 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
575 def localtrace_count(self, frame, why, arg): |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
576 if why == 'line': |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
577 filename = frame.f_code.co_filename |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
578 lineno = frame.f_lineno |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
579 key = filename, lineno |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
580 self.counts[key] = self.counts.get(key, 0) + 1 |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
581 return self.localtrace |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
582 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
583 def results(self): |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
584 return CoverageResults(self.counts, infile=self.infile, |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
585 outfile=self.outfile, |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
586 calledfuncs=self._calledfuncs) |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
587 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
588 def _err_exit(msg): |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
589 sys.stderr.write("%s: %s\n" % (sys.argv[0], msg)) |
| 14657 | 590 sys.exit(1) |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
591 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
592 def main(argv=None): |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
593 import getopt |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
594 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
595 if argv is None: |
| 14657 | 596 argv = sys.argv |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
597 try: |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
598 opts, prog_argv = getopt.getopt(argv[1:], "tcrRf:d:msC:l", |
| 14657 | 599 ["help", "version", "trace", "count", |
|
27626
45906223efb2
add missing "summary" from long options list
Skip Montanaro <skip@pobox.com>
parents:
26609
diff
changeset
|
600 "report", "no-report", "summary", |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
601 "file=", "missing", |
|
17703
f3b8785bd022
Fix several bugs and add two features.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15930
diff
changeset
|
602 "ignore-module=", "ignore-dir=", |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
603 "coverdir=", "listfuncs",]) |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
604 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
605 except getopt.error, msg: |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
606 sys.stderr.write("%s: %s\n" % (sys.argv[0], msg)) |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
607 sys.stderr.write("Try `%s --help' for more information\n" |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
608 % sys.argv[0]) |
| 14657 | 609 sys.exit(1) |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
610 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
611 trace = 0 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
612 count = 0 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
613 report = 0 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
614 no_report = 0 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
615 counts_file = None |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
616 missing = 0 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
617 ignore_modules = [] |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
618 ignore_dirs = [] |
|
17703
f3b8785bd022
Fix several bugs and add two features.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15930
diff
changeset
|
619 coverdir = None |
|
f3b8785bd022
Fix several bugs and add two features.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15930
diff
changeset
|
620 summary = 0 |
|
26609
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
621 listfuncs = False |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
622 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
623 for opt, val in opts: |
| 14657 | 624 if opt == "--help": |
| 625 usage(sys.stdout) | |
| 626 sys.exit(0) | |
| 627 | |
| 628 if opt == "--version": | |
| 629 sys.stdout.write("trace 2.0\n") | |
| 630 sys.exit(0) | |
| 631 | |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
632 if opt == "-l" or opt == "--listfuncs": |
|
26609
2fab0b6488b5
Correct buggy module docstring.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26608
diff
changeset
|
633 listfuncs = True |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
634 continue |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
635 |
| 14657 | 636 if opt == "-t" or opt == "--trace": |
| 637 trace = 1 | |
| 638 continue | |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
639 |
| 14657 | 640 if opt == "-c" or opt == "--count": |
| 641 count = 1 | |
| 642 continue | |
| 643 | |
| 644 if opt == "-r" or opt == "--report": | |
| 645 report = 1 | |
| 646 continue | |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
647 |
| 14657 | 648 if opt == "-R" or opt == "--no-report": |
| 649 no_report = 1 | |
| 650 continue | |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
651 |
| 14657 | 652 if opt == "-f" or opt == "--file": |
| 653 counts_file = val | |
| 654 continue | |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
655 |
| 14657 | 656 if opt == "-m" or opt == "--missing": |
| 657 missing = 1 | |
| 658 continue | |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
659 |
|
17703
f3b8785bd022
Fix several bugs and add two features.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15930
diff
changeset
|
660 if opt == "-C" or opt == "--coverdir": |
|
f3b8785bd022
Fix several bugs and add two features.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15930
diff
changeset
|
661 coverdir = val |
|
f3b8785bd022
Fix several bugs and add two features.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15930
diff
changeset
|
662 continue |
|
f3b8785bd022
Fix several bugs and add two features.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15930
diff
changeset
|
663 |
|
f3b8785bd022
Fix several bugs and add two features.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15930
diff
changeset
|
664 if opt == "-s" or opt == "--summary": |
|
f3b8785bd022
Fix several bugs and add two features.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15930
diff
changeset
|
665 summary = 1 |
|
f3b8785bd022
Fix several bugs and add two features.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15930
diff
changeset
|
666 continue |
|
f3b8785bd022
Fix several bugs and add two features.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
15930
diff
changeset
|
667 |
| 14657 | 668 if opt == "--ignore-module": |
| 669 ignore_modules.append(val) | |
| 670 continue | |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
671 |
| 14657 | 672 if opt == "--ignore-dir": |
|
25219
8a7a2f1f88f0
Apply diff2.txt from SF patch http://www.python.org/sf/572113
Walter Dörwald <walter@livinglogic.de>
parents:
24844
diff
changeset
|
673 for s in val.split(os.pathsep): |
| 14657 | 674 s = os.path.expandvars(s) |
| 675 # should I also call expanduser? (after all, could use $HOME) | |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
676 |
|
25219
8a7a2f1f88f0
Apply diff2.txt from SF patch http://www.python.org/sf/572113
Walter Dörwald <walter@livinglogic.de>
parents:
24844
diff
changeset
|
677 s = s.replace("$prefix", |
|
8a7a2f1f88f0
Apply diff2.txt from SF patch http://www.python.org/sf/572113
Walter Dörwald <walter@livinglogic.de>
parents:
24844
diff
changeset
|
678 os.path.join(sys.prefix, "lib", |
|
8a7a2f1f88f0
Apply diff2.txt from SF patch http://www.python.org/sf/572113
Walter Dörwald <walter@livinglogic.de>
parents:
24844
diff
changeset
|
679 "python" + sys.version[:3])) |
|
8a7a2f1f88f0
Apply diff2.txt from SF patch http://www.python.org/sf/572113
Walter Dörwald <walter@livinglogic.de>
parents:
24844
diff
changeset
|
680 s = s.replace("$exec_prefix", |
|
8a7a2f1f88f0
Apply diff2.txt from SF patch http://www.python.org/sf/572113
Walter Dörwald <walter@livinglogic.de>
parents:
24844
diff
changeset
|
681 os.path.join(sys.exec_prefix, "lib", |
|
8a7a2f1f88f0
Apply diff2.txt from SF patch http://www.python.org/sf/572113
Walter Dörwald <walter@livinglogic.de>
parents:
24844
diff
changeset
|
682 "python" + sys.version[:3])) |
| 14657 | 683 s = os.path.normpath(s) |
| 684 ignore_dirs.append(s) | |
| 685 continue | |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
686 |
| 14657 | 687 assert 0, "Should never get here" |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
688 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
689 if listfuncs and (count or trace): |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
690 _err_exit("cannot specify both --listfuncs and (--trace or --count)") |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
691 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
692 if not count and not trace and not report and not listfuncs: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
693 _err_exit("must specify one of --trace, --count, --report or --listfuncs") |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
694 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
695 if report and no_report: |
| 14657 | 696 _err_exit("cannot specify both --report and --no-report") |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
697 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
698 if report and not counts_file: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
699 _err_exit("--report requires a --file") |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
700 |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
701 if no_report and len(prog_argv) == 0: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
702 _err_exit("missing name of file to run") |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
703 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
704 # everything is ready |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
705 if report: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
706 results = CoverageResults(infile=counts_file, outfile=counts_file) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
707 results.write_results(missing, summary=summary, coverdir=coverdir) |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
708 else: |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
709 sys.argv = prog_argv |
|
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
710 progname = prog_argv[0] |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
711 sys.path[0] = os.path.split(progname)[0] |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
712 |
|
26608
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
713 t = Trace(count, trace, countfuncs=listfuncs, |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
714 ignoremods=ignore_modules, ignoredirs=ignore_dirs, |
|
14f53b6d7f58
Fix one bug and reformat lots of code.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
26340
diff
changeset
|
715 infile=counts_file, outfile=counts_file) |
| 14657 | 716 try: |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
717 t.run('execfile(' + `progname` + ')') |
| 14657 | 718 except IOError, err: |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
719 _err_exit("Cannot run file %s because: %s" % (`sys.argv[0]`, err)) |
| 14657 | 720 except SystemExit: |
| 721 pass | |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
722 |
| 14657 | 723 results = t.results() |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
724 |
| 14657 | 725 if not no_report: |
|
21071
6392f03222e0
Checking in Zooko's version per SF patch #476866, plus my changes to
Guido van Rossum <guido@python.org>
parents:
20322
diff
changeset
|
726 results.write_results(missing, summary=summary, coverdir=coverdir) |
|
13838
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
727 |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
728 if __name__=='__main__': |
|
91d95a7b7858
Python code coverage tool by Skip Montanaro and Andrew Dalke
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff
changeset
|
729 main() |
