You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2012/03/14 17:32:20 UTC
svn commit: r1300623 -
/subversion/trunk/subversion/tests/cmdline/svntest/main.py
Author: hwright
Date: Wed Mar 14 16:32:20 2012
New Revision: 1300623
URL: http://svn.apache.org/viewvc?rev=1300623&view=rev
Log:
Make sure we print exception stack on all test failures.
* subversion/tests/cmdline/svntest/main.py
(_log_exception): Don't require a message.
(TestRunner.run): Log the exception stack on a generic failure.
Modified:
subversion/trunk/subversion/tests/cmdline/svntest/main.py
Modified: subversion/trunk/subversion/tests/cmdline/svntest/main.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svntest/main.py?rev=1300623&r1=1300622&r2=1300623&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/svntest/main.py (original)
+++ subversion/trunk/subversion/tests/cmdline/svntest/main.py Wed Mar 14 16:32:20 2012
@@ -994,7 +994,7 @@ def use_editor(func):
os.environ['SVNTEST_EDITOR_FUNC'] = func
os.environ['SVN_TEST_PYTHON'] = sys.executable
-def _log_exception(fmt, *args):
+def _log_exception(fmt='', *args):
logger.warn(fmt, *args)
logger.warn(traceback.format_exc())
@@ -1345,6 +1345,8 @@ class TestRunner:
ex.__class__.__name__, ex_args)
else:
_log_exception('EXCEPTION: %s', ex.__class__.__name__)
+ else:
+ _log_exception()
except KeyboardInterrupt:
logger.error('Interrupted')
sys.exit(0)
Re: svn commit: r1300623 - /subversion/trunk/subversion/tests/cmdline/svntest/main.py
Posted by Hyrum K Wright <hy...@wandisco.com>.
On Wed, Mar 14, 2012 at 11:44 AM, Greg Stein <gs...@gmail.com> wrote:
> I don't see how this affects the logging at all. Before/after, you're
> still calling _log_exception(), but now without a specified message.
That isn't completely true. _log_exception() only gets called once
per exception.
The original code was:
except Failure, ex:
result = svntest.testcase.RESULT_FAIL
# We captured Failure and its subclasses. We don't want to print
# anything for plain old Failure since that just indicates test
# failure, rather than relevant information. However, if there
# *is* information in the exception's arguments, then print it.
if ex.__class__ != Failure or ex.args:
ex_args = str(ex)
print('CWD: %s' % os.getcwd())
if ex_args:
print('EXCEPTION: %s: %s' % (ex.__class__.__name__, ex_args))
else:
print('EXCEPTION: %s' % ex.__class__.__name__)
traceback.print_exc(file=sys.stdout)
sys.stdout.flush()
It might not be readily apparent, but the indentation is such that the
traceback.print_exc() is called (only once) outside of the if-block.
The new code (after r1300623) is:
except Failure, ex:
result = svntest.testcase.RESULT_FAIL
# We captured Failure and its subclasses. We don't want to print
# anything for plain old Failure since that just indicates test
# failure, rather than relevant information. However, if there
# *is* information in the exception's arguments, then print it.
if ex.__class__ != Failure or ex.args:
ex_args = str(ex)
logger.warn('CWD: %s' % os.getcwd())
if ex_args:
_log_exception('EXCEPTION: %s: %s',
ex.__class__.__name__, ex_args)
else:
_log_exception('EXCEPTION: %s', ex.__class__.__name__)
else:
_log_exception()
To log the exception with the message, we moved the _log_exception
inside if-block, meaning that the traceback is no longer printed
unconditionally. To fix it, I added the extra _log_exception() so
that _log_exception() is now called just once no matter the branch
taken through the if-block.
Granted, it could probably be cleaner, no doubt. But it's still correct.
-Hyrum
> In fact, won't this (now) generate an empty log message, followed by
> the traceback?
>
> Maybe you need to do something like:
>
> msg = traceback.format_exc()
> if fmt:
> logger.warn(fmt, *args)
> logger.warn(msg)
>
> It may be that the first logger.warn() erased the traceback information.
>
> Cheers,
> -g
>
> On Wed, Mar 14, 2012 at 12:32, <hw...@apache.org> wrote:
>> Author: hwright
>> Date: Wed Mar 14 16:32:20 2012
>> New Revision: 1300623
>>
>> URL: http://svn.apache.org/viewvc?rev=1300623&view=rev
>> Log:
>> Make sure we print exception stack on all test failures.
>>
>> * subversion/tests/cmdline/svntest/main.py
>> (_log_exception): Don't require a message.
>> (TestRunner.run): Log the exception stack on a generic failure.
>>
>> Modified:
>> subversion/trunk/subversion/tests/cmdline/svntest/main.py
>>
>> Modified: subversion/trunk/subversion/tests/cmdline/svntest/main.py
>> URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svntest/main.py?rev=1300623&r1=1300622&r2=1300623&view=diff
>> ==============================================================================
>> --- subversion/trunk/subversion/tests/cmdline/svntest/main.py (original)
>> +++ subversion/trunk/subversion/tests/cmdline/svntest/main.py Wed Mar 14 16:32:20 2012
>> @@ -994,7 +994,7 @@ def use_editor(func):
>> os.environ['SVNTEST_EDITOR_FUNC'] = func
>> os.environ['SVN_TEST_PYTHON'] = sys.executable
>>
>> -def _log_exception(fmt, *args):
>> +def _log_exception(fmt='', *args):
>> logger.warn(fmt, *args)
>> logger.warn(traceback.format_exc())
>>
>> @@ -1345,6 +1345,8 @@ class TestRunner:
>> ex.__class__.__name__, ex_args)
>> else:
>> _log_exception('EXCEPTION: %s', ex.__class__.__name__)
>> + else:
>> + _log_exception()
>> except KeyboardInterrupt:
>> logger.error('Interrupted')
>> sys.exit(0)
>>
>>
--
uberSVN: Apache Subversion Made Easy
http://www.uberSVN.com/
Re: svn commit: r1300623 - /subversion/trunk/subversion/tests/cmdline/svntest/main.py
Posted by Greg Stein <gs...@gmail.com>.
I don't see how this affects the logging at all. Before/after, you're
still calling _log_exception(), but now without a specified message.
In fact, won't this (now) generate an empty log message, followed by
the traceback?
Maybe you need to do something like:
msg = traceback.format_exc()
if fmt:
logger.warn(fmt, *args)
logger.warn(msg)
It may be that the first logger.warn() erased the traceback information.
Cheers,
-g
On Wed, Mar 14, 2012 at 12:32, <hw...@apache.org> wrote:
> Author: hwright
> Date: Wed Mar 14 16:32:20 2012
> New Revision: 1300623
>
> URL: http://svn.apache.org/viewvc?rev=1300623&view=rev
> Log:
> Make sure we print exception stack on all test failures.
>
> * subversion/tests/cmdline/svntest/main.py
> (_log_exception): Don't require a message.
> (TestRunner.run): Log the exception stack on a generic failure.
>
> Modified:
> subversion/trunk/subversion/tests/cmdline/svntest/main.py
>
> Modified: subversion/trunk/subversion/tests/cmdline/svntest/main.py
> URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svntest/main.py?rev=1300623&r1=1300622&r2=1300623&view=diff
> ==============================================================================
> --- subversion/trunk/subversion/tests/cmdline/svntest/main.py (original)
> +++ subversion/trunk/subversion/tests/cmdline/svntest/main.py Wed Mar 14 16:32:20 2012
> @@ -994,7 +994,7 @@ def use_editor(func):
> os.environ['SVNTEST_EDITOR_FUNC'] = func
> os.environ['SVN_TEST_PYTHON'] = sys.executable
>
> -def _log_exception(fmt, *args):
> +def _log_exception(fmt='', *args):
> logger.warn(fmt, *args)
> logger.warn(traceback.format_exc())
>
> @@ -1345,6 +1345,8 @@ class TestRunner:
> ex.__class__.__name__, ex_args)
> else:
> _log_exception('EXCEPTION: %s', ex.__class__.__name__)
> + else:
> + _log_exception()
> except KeyboardInterrupt:
> logger.error('Interrupted')
> sys.exit(0)
>
>