From 0f3bb8be9d3eb2549de15c7192fcbeb57baf588d Mon Sep 17 00:00:00 2001
From: Tom Rondeau <trondeau@vt.edu>
Date: Tue, 3 Jan 2012 17:15:23 -0500
Subject: build: have swig_doc catch the exception when the xml parsing fails
 on a not-complete file.

The method sleeps for a second and tries again 3 times before fully failing. This seems a bit crass...
---
 docs/doxygen/swig_doc.py | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

(limited to 'docs/doxygen/swig_doc.py')

diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
index 5034099e3d..7b34a523e6 100644
--- a/docs/doxygen/swig_doc.py
+++ b/docs/doxygen/swig_doc.py
@@ -27,7 +27,7 @@ python docstrings.
 
 """
 
-import sys
+import sys, time
 
 try:
     from doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, base
@@ -193,7 +193,25 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
         output.append(custom_output)
 
     # Create docstrings for the blocks.
-    blocks = di.in_category(Block)
+    tries = 0
+    while(1):
+        try:
+            blocks = di.in_category(Block)
+        except:
+            if(tries < 3):
+                # May not be built just yet; sleep and try again
+                sys.stderr.write("XML parsing problem with file {0}, retrying.\n".format(
+                        swigdocfilename))
+                time.sleep(1)
+                tries += 1
+            else:
+                # if we've given it three tries, give up and raise an error
+                sys.stderr.write("XML parsing error with file {0}. giving up.\n".format(
+                        swigdocfilename))
+                raise
+        else:
+            break
+
     make_funcs = set([])
     for block in blocks:
         try:
-- 
cgit v1.2.3


From 0aa47db21afc09b37ac4e0feebeaa624e5549714 Mon Sep 17 00:00:00 2001
From: Tom Rondeau <trondeau@vt.edu>
Date: Fri, 6 Jan 2012 15:07:35 -0500
Subject: docs: another recheck point in the siwg_doc code. If a parse error
 happens, try rereading up to 3 times.

---
 docs/doxygen/swig_doc.py | 28 ++++++++++++++++++++++++----
 1 file changed, 24 insertions(+), 4 deletions(-)

(limited to 'docs/doxygen/swig_doc.py')

diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
index 7b34a523e6..95d143aab4 100644
--- a/docs/doxygen/swig_doc.py
+++ b/docs/doxygen/swig_doc.py
@@ -219,7 +219,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
             make_funcs.add(make_func.name())
             output.append(make_block_entry(di, block))
         except block.ParsingError:
-            print('Parsing error for block %s' % block.name())
+            sys.stderr.write('Parsing error for block {0}'.format(block.name()))
 
     # Create docstrings for functions
     # Don't include the make functions since they have already been dealt with.
@@ -228,7 +228,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
         try:
             output.append(make_func_entry(f))
         except f.ParsingError:
-            print('Parsing error for function %s' % f.name())
+            sys.stderr.write('Parsing error for function {0}'.format(f.name()))
 
     # Create docstrings for classes
     block_names = [block.name() for block in blocks]
@@ -237,7 +237,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
         try:
             output.append(make_class_entry(k))
         except k.ParsingError:
-            print('Parsing error for class %s' % k.name())
+            sys.stderr.write('Parsing error for class {0}'.format(k.name()))
 
     # Docstrings are not created for anything that is not a function or a class.
     # If this excludes anything important please add it here.
@@ -268,4 +268,24 @@ if __name__ == "__main__":
     custom_output = "\n\n".join(output)
 
     # Generate the docstrings interface file.
-    make_swig_interface_file(di, swigdocfilename, custom_output=custom_output)
+    # If parsing error on NoSuchMember, try again by rereading everything.
+    # Give up after 3 tries.
+    tries = 0
+    while(1):
+        try:
+            make_swig_interface_file(di, swigdocfilename, custom_output=custom_output)
+        except base.Base.NoSuchMember:
+            if(tries < 3):
+                # May not be built just yet; sleep and try again
+                sys.stderr.write("XML parsing problem with file {0}, retrying.\n".format(
+                        swigdocfilename))
+                time.sleep(1)
+                tries += 1
+            else:
+                # if we've given it three tries, give up and raise an error
+                sys.stderr.write("XML parsing error with file {0}. giving up.\n".format(
+                        swigdocfilename))
+                raise
+        else:
+            break
+        
-- 
cgit v1.2.3


From f58076ffbba790fd93504ea1d38e39e278e663de Mon Sep 17 00:00:00 2001
From: Tom Rondeau <trondeau@vt.edu>
Date: Mon, 16 Jan 2012 09:30:12 -0500
Subject: docs: another hack to check for errors and retry when building the
 swigdocs.

---
 docs/doxygen/swig_doc.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'docs/doxygen/swig_doc.py')

diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
index 95d143aab4..0148ba8fbe 100644
--- a/docs/doxygen/swig_doc.py
+++ b/docs/doxygen/swig_doc.py
@@ -274,7 +274,7 @@ if __name__ == "__main__":
     while(1):
         try:
             make_swig_interface_file(di, swigdocfilename, custom_output=custom_output)
-        except base.Base.NoSuchMember:
+        except:
             if(tries < 3):
                 # May not be built just yet; sleep and try again
                 sys.stderr.write("XML parsing problem with file {0}, retrying.\n".format(
-- 
cgit v1.2.3


From 6e3ec5d3697274f45bb83e68818402e50c1e23a6 Mon Sep 17 00:00:00 2001
From: Tom Rondeau <trondeau@vt.edu>
Date: Thu, 19 Jan 2012 22:14:31 -0500
Subject: docs: another try/except/rerun spot.

---
 docs/doxygen/swig_doc.py | 28 ++++++++++++++++++++++------
 1 file changed, 22 insertions(+), 6 deletions(-)

(limited to 'docs/doxygen/swig_doc.py')

diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
index 0148ba8fbe..4148a546b3 100644
--- a/docs/doxygen/swig_doc.py
+++ b/docs/doxygen/swig_doc.py
@@ -214,12 +214,28 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
 
     make_funcs = set([])
     for block in blocks:
-        try:
-            make_func = di.get_member(make_name(block.name()), DoxyFunction)
-            make_funcs.add(make_func.name())
-            output.append(make_block_entry(di, block))
-        except block.ParsingError:
-            sys.stderr.write('Parsing error for block {0}'.format(block.name()))
+        tries = 0
+        while(1):
+            try:
+                make_func = di.get_member(make_name(block.name()), DoxyFunction)
+                make_funcs.add(make_func.name())
+                output.append(make_block_entry(di, block))
+            except block.ParsingError:
+                sys.stderr.write('Parsing error for block {0}'.format(block.name()))
+            except:
+                if(tries < 3):
+                    # May not be built just yet; sleep and try again
+                    sys.stderr.write("XML parsing problem with file {0}, retrying.\n".format(
+                            swigdocfilename))
+                    time.sleep(1)
+                    tries += 1
+                else:
+                    # if we've given it three tries, give up and raise an error
+                    sys.stderr.write("XML parsing error with file {0}. giving up.\n".format(
+                            swigdocfilename))
+                    raise
+            else:
+                break
 
     # Create docstrings for functions
     # Don't include the make functions since they have already been dealt with.
-- 
cgit v1.2.3