diff --git a/sphinx/builders/html.py b/sphinx/builders/html.py index 91682aa20..fa8026135 100644 --- a/sphinx/builders/html.py +++ b/sphinx/builders/html.py @@ -22,7 +22,8 @@ from docutils.frontend import OptionParser from docutils.readers.doctree import Reader as DoctreeReader from sphinx import package_dir, __version__ -from sphinx.util import SEP, os_path, relative_uri, ensuredir, ustrftime +from sphinx.util import SEP, os_path, relative_uri, ensuredir, \ + movefile, ustrftime from sphinx.search import js_index from sphinx.builders import Builder, ENV_PICKLE_FILENAME from sphinx.highlighting import PygmentsBridge @@ -504,7 +505,7 @@ class StandaloneHTMLBuilder(Builder): self.indexer.dump(f, self.indexer_format) finally: f.close() - os.rename(searchindexfn + '.tmp', searchindexfn) + movefile(searchindexfn + '.tmp', searchindexfn) self.info('done') self.info(bold('dumping object inventory... '), nonl=True) diff --git a/sphinx/environment.py b/sphinx/environment.py index fe4cba6bb..18c3ffe31 100644 --- a/sphinx/environment.py +++ b/sphinx/environment.py @@ -43,8 +43,8 @@ from docutils.transforms import Transform from docutils.transforms.parts import ContentsFilter from sphinx import addnodes -from sphinx.util import get_matching_docs, SEP, ustrftime, docname_join, \ - FilenameUniqDict +from sphinx.util import movefile, get_matching_docs, SEP, ustrftime, \ + docname_join, FilenameUniqDict from sphinx.directives import additional_xref_types default_settings = { @@ -219,7 +219,7 @@ class BuildEnvironment: pickle.dump(self, picklefile, pickle.HIGHEST_PROTOCOL) finally: picklefile.close() - os.rename(filename + '.tmp', filename) + movefile(filename + '.tmp', filename) # reset attributes self.config.values = values self.set_warnfunc(warnfunc) diff --git a/sphinx/ext/intersphinx.py b/sphinx/ext/intersphinx.py index 47ebceb3a..5340a55ec 100644 --- a/sphinx/ext/intersphinx.py +++ b/sphinx/ext/intersphinx.py @@ -125,7 +125,7 @@ def missing_reference(app, env, node, contnode): if target not in env.intersphinx_inventory: return None type, proj, version, uri = env.intersphinx_inventory[target] - print "Intersphinx hit:", target, uri + # print "Intersphinx hit:", target, uri newnode = nodes.reference('', '') newnode['refuri'] = uri + '#' + target newnode['reftitle'] = '(in %s v%s)' % (proj, version) diff --git a/sphinx/util/__init__.py b/sphinx/util/__init__.py index 4aacf67bd..08e619ee9 100644 --- a/sphinx/util/__init__.py +++ b/sphinx/util/__init__.py @@ -361,3 +361,12 @@ def force_decode(string, encoding): # last resort -- can't fail string = string.decode('latin1') return string + + +def movefile(source, dest): + # move a file, removing the destination if it exists + if os.path.exists(dest): + os.unlink(dest) + except OSError: + pass + os.rename(source, dest)