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;
 }