mpdot/mpdot.py
changeset 4 468f4c8d3d5b
parent 2 932c358ece3e
--- a/mpdot/mpdot.py	Fri Apr 23 20:47:58 2010 +0100
+++ b/mpdot/mpdot.py	Wed Aug 11 14:49:30 2010 +0100
@@ -45,7 +45,7 @@
 #import xml
 from cStringIO import StringIO
 
-__version__ = '0.1.3'
+__version__ = '0.1.4'
 
 """
 Nokia XHTML conversion:
@@ -62,10 +62,10 @@
 CMD_PREFIX_NERVOUS  = "echo"
 #CMD_PREFIX_XSL      = "/xsl:plugins/cxxapiref/xsl/dita2xhtml.nokia.xsl "
 
-DIR_DOT_COMPONENT   = 'dot_comp'
-DIR_DOT_SOURCE      = 'dot_src'
-DIR_TOC_TMP         = 'dot_toc_tmp'
-DIR_DOT_TOC         = 'dot_toc'
+BUILD_DIR           = 'build'
+DIR_DOT_COMPONENT   = os.path.join(BUILD_DIR, 'dot_comp')
+DIR_TOC_TMP         = os.path.join(BUILD_DIR, 'dot_toc_tmp')
+DIR_DOT_TOC         = os.path.join(BUILD_DIR, 'dot_toc')
 
 
 def invokeDot(theDitaMapPath, theDirOut, argList, isNervous):
@@ -143,7 +143,7 @@
 
 def execute(inToc, outDir, argList, numJobs=0, nervous=False):
     inDir = os.path.dirname(inToc)
-    outDirCmpDot = os.path.join(outDir, DIR_DOT_COMPONENT)
+    outDirCmpDot = os.path.join(os.path.dirname(outDir), DIR_DOT_COMPONENT)
     if not os.path.exists(outDirCmpDot):
         os.makedirs(outDirCmpDot)
     if numJobs >= 1:
@@ -161,7 +161,7 @@
         for t in genCompMapNames(inToc)
     ]
     myResults = [r.get() for r in [myPool.apply_async(invokeDot, t) for t in myTaskS]]
-    copyDirs(myResults, os.path.join(outDir, DIR_DOT_SOURCE))
+    copyDirs(myResults, outDir)
     return myResults
 
 class DitamapLinkConverterError(Exception):
@@ -208,7 +208,7 @@
         if root is not None:
             with open(filepath, 'w') as f:
                 f.write("""<?xml version="1.0" encoding="UTF-8"?>"""+'\n')
-                f.write("""<!DOCTYPE cxxAPIMap PUBLIC "-//NOKIA//DTD DITA C++ API Map Reference Type v0.5.0//EN" "dtd/cxxAPIMap.dtd" >"""+'\n')
+                f.write("""<!DOCTYPE cxxAPIMap PUBLIC "-//NOKIA//DTD DITA C++ API Map Reference Type v0.6.0//EN" "dtd/cxxAPIMap.dtd" >"""+'\n')
                 f.write(etree.tostring(root))        
                 f.close()
     
@@ -231,19 +231,33 @@
 
 def publish_toc(toc_path, out_dir, argList, nervous):
     toc_name = os.path.basename(toc_path)
-    tmp_out =  os.path.join(out_dir, DIR_TOC_TMP)
+    tmp_out =  os.path.join(os.path.dirname(out_dir), DIR_TOC_TMP)
     dlc = DitamapLinkConverter(toc_path, tmp_out)
     dlc.convert()
     toc_to_publish = os.path.join(tmp_out, toc_name)
-    out = os.path.join(out_dir, DIR_DOT_TOC)
+    out = os.path.join(os.path.dirname(out_dir), DIR_DOT_TOC)
     invokeDot(toc_to_publish, out, argList, nervous)
-    final_destination = os.path.join(out_dir, DIR_DOT_SOURCE)
+    final_destination = out_dir
     if not os.path.exists(final_destination):
         os.makedirs(final_destination)
-    try:
-        shutil.copy(os.path.join(out, 'index.html'), final_destination)
-    except IOError, err:
-        logging.error('publish_toc(): %s' % str(err))
+    for item in os.listdir(out):
+        item_path = os.path.join(out, item)
+        try:                                                                               
+            if os.path.isdir(item_path):
+                if os.path.exists(os.path.join(final_destination, item)):           # The published toc's META-INF files etc.
+                    shutil.rmtree(os.path.join(final_destination, item))            # will be the final ones in the publication,                
+                    shutil.copytree(item_path, os.path.join(final_destination, item)) # any existing ones will be overwritten                                                
+            else:
+                shutil.copy(item_path, final_destination)
+            logging.info("Copied %s to %s" % (item_path, final_destination))            
+        except IOError, err:
+            logging.error("Couldn't copy %s to %s, error was '%s'" % (item_path, final_destination, str(err)))
+            
+def clean(out_dir):
+    if os.path.exists(out_dir):        
+        shutil.rmtree(out_dir)
+    if os.path.exists(os.path.join(os.path.dirname(out_dir), BUILD_DIR)):
+        shutil.rmtree(os.path.join(os.path.dirname(out_dir), BUILD_DIR))                      
     
 def main():
     usage = "usage: %prog [options] <DITA map> <output directory> -Doptions without the -D"
@@ -277,6 +291,7 @@
     # Dump out timestamp
     print 'Start time: %s' % time.ctime()
     execTime = time.clock()
+    clean(args[1])
     myResults = execute(args[0], args[1], args[2:], options.jobs, options.nervous)
     publish_toc(args[0], args[1], args[2:], options.nervous)
     print 'Number of DITA maps processed: %d' % len(myResults)
@@ -354,7 +369,7 @@
         self.assertRaises(DitamapLinkConverterError, dlc.convert)
            
 cmap = """<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE cxxAPIMap PUBLIC "-//NOKIA//DTD DITA C++ API Map Reference Type v0.5.0//EN" "dtd/cxxAPIMap.dtd" >
+<!DOCTYPE cxxAPIMap PUBLIC "-//NOKIA//DTD DITA C++ API Map Reference Type v0.6.0//EN" "dtd/cxxAPIMap.dtd" >
 <cxxAPIMap id="GUID-0D9E5D45-5A07-302C-BEB3-2D0252214F2E" title="wlmplatform">
     <cxxStructRef href="GUID-AE25CF37-B862-306B-B7B3-4A1226B83DA2.xml" navtitle="_SChannels" />
     <cxxFileRef href="GUID-E1984316-685F-394E-B71A-9816E1495C1F.xml" navtitle="wlanerrorcodes.h" />
@@ -363,7 +378,7 @@
 """
                         # 
 converted_cmap = """<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE cxxAPIMap PUBLIC "-//NOKIA//DTD DITA C++ API Map Reference Type v0.5.0//EN" "dtd/cxxAPIMap.dtd" >
+<!DOCTYPE cxxAPIMap PUBLIC "-//NOKIA//DTD DITA C++ API Map Reference Type v0.6.0//EN" "dtd/cxxAPIMap.dtd" >
 <cxxAPIMap id="GUID-0D9E5D45-5A07-302C-BEB3-2D0252214F2E" title="wlmplatform">
     <cxxStructRef format="html" href="GUID-AE25CF37-B862-306B-B7B3-4A1226B83DA2.html" navtitle="_SChannels" scope="peer" />
     <cxxFileRef format="html" href="GUID-E1984316-685F-394E-B71A-9816E1495C1F.html" navtitle="wlanerrorcodes.h" scope="peer" />