You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by da...@apache.org on 2013/04/13 16:43:47 UTC
svn commit: r1467643 - in /subversion/trunk: build/generator/gen_base.py
gen-make.py subversion/libsvn_subr/ subversion/libsvn_subr/error.c
Author: danielsh
Date: Sat Apr 13 14:43:47 2013
New Revision: 1467643
URL: http://svn.apache.org/r1467643
Log:
Maintainer-mode stack traces: print symbolic names for errno.h errors, too.
* build/generator/gen_base.py
(GeneratorBase.write_errno_table): New function.
(IncludeDependencyInfo._scan_for_includes): Add exemption.
* gen-make.py
(main): Invoke the new logic.
* subversion/libsvn_subr/errorcode.inc: New svn:ignore'd file.
* subversion/libsvn_subr/error.c
(errorcode.inc): Include, in maintainer mode.
(svn__errno): New file-private variable, defined by errorcode.inc.
(svn_error_symbolic_name): Try svn__errno too.
Modified:
subversion/trunk/build/generator/gen_base.py
subversion/trunk/gen-make.py
subversion/trunk/subversion/libsvn_subr/ (props changed)
subversion/trunk/subversion/libsvn_subr/error.c
Modified: subversion/trunk/build/generator/gen_base.py
URL: http://svn.apache.org/viewvc/subversion/trunk/build/generator/gen_base.py?rev=1467643&r1=1467642&r2=1467643&view=diff
==============================================================================
--- subversion/trunk/build/generator/gen_base.py (original)
+++ subversion/trunk/build/generator/gen_base.py Sat Apr 13 14:43:47 2013
@@ -239,6 +239,19 @@ class GeneratorBase:
except: pass
os.rename(new_hdrfile, hdrfile)
+ @staticmethod
+ def write_errno_table():
+ import errno
+ fd = open('subversion/libsvn_subr/errorcode.inc', 'w')
+ fd.write('/* This file was generated by build/generator/gen_base.py */\n\n')
+ fd.write('static struct {\n'
+ ' int errcode;\n'
+ ' const char *errname;\n'
+ '} svn__errno[] = {\n');
+ for num, val in sorted(errno.errorcode.items()):
+ fd.write(' { %d, "%s" },\n' % (num, val))
+ # fd.seek(-2, os.SEEK_CUR); fd.write('\n');
+ fd.write('};\n')
class DependencyGraph:
"""Record dependencies between build items.
@@ -1100,7 +1113,10 @@ class IncludeDependencyInfo:
direct_possibility_fname = os.path.normpath(os.path.join(
os.path.dirname(fname), include_param))
domain_fnames = self._domain.get(os.path.basename(include_param), [])
- if direct_possibility_fname in domain_fnames:
+ if os.sep.join(['libsvn_subr', 'error.c']) in fname \
+ and 'errorcode.inc' == include_param:
+ continue # generated by GeneratorBase.write_errno_table
+ elif direct_possibility_fname in domain_fnames:
self._upd_dep_hash(hdrs, direct_possibility_fname, type_code)
elif (len(domain_fnames) == 1
and (include_param.find(os.sep) == -1
Modified: subversion/trunk/gen-make.py
URL: http://svn.apache.org/viewvc/subversion/trunk/gen-make.py?rev=1467643&r1=1467642&r2=1467643&view=diff
==============================================================================
--- subversion/trunk/gen-make.py (original)
+++ subversion/trunk/gen-make.py Sat Apr 13 14:43:47 2013
@@ -64,6 +64,7 @@ def main(fname, gentype, verfname=None,
generator.write()
generator.write_sqlite_headers()
+ generator.write_errno_table()
if ('--debug', '') in other_options:
for dep_type, target_dict in generator.graph.deps.items():
Propchange: subversion/trunk/subversion/libsvn_subr/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Sat Apr 13 14:43:47 2013
@@ -9,3 +9,4 @@ Debug
.*~
libsvn_subr.def
internal_statements.h
+errorcode.inc
Modified: subversion/trunk/subversion/libsvn_subr/error.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/error.c?rev=1467643&r1=1467642&r2=1467643&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/error.c (original)
+++ subversion/trunk/subversion/libsvn_subr/error.c Sat Apr 13 14:43:47 2013
@@ -668,10 +668,18 @@ svn_strerror(apr_status_t statcode, char
return apr_strerror(statcode, buf, bufsize);
}
+#ifdef SVN_DEBUG
+/* Defines svn__errno */
+#include "errorcode.inc"
+#endif
+
const char *
svn_error_symbolic_name(apr_status_t statcode)
{
const err_defn *defn;
+#ifdef SVN_DEBUG
+ int i;
+#endif /* SVN_DEBUG */
for (defn = error_table; defn->errdesc != NULL; ++defn)
if (defn->errcode == (svn_errno_t)statcode)
@@ -681,6 +689,16 @@ svn_error_symbolic_name(apr_status_t sta
if (statcode == SVN_NO_ERROR)
return "SVN_NO_ERROR";
+#ifdef SVN_DEBUG
+ /* Try errno.h symbols. */
+ /* Linear search through a sorted array */
+ for (i = 0; i < sizeof(svn__errno) / sizeof(svn__errno[0]); i++)
+ if (svn__errno[i].errcode == (int)statcode)
+ return svn__errno[i].errname;
+#endif /* SVN_DEBUG */
+
+ /* ### TODO: do we need APR_* error macros? What about APR_TO_OS_ERROR()? */
+
return NULL;
}