mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Copy stat as well as files for static content.
This commit is contained in:
parent
82af37ea7c
commit
8011b358c8
@ -11,7 +11,6 @@
|
||||
|
||||
import os
|
||||
import codecs
|
||||
import shutil
|
||||
import posixpath
|
||||
import cPickle as pickle
|
||||
from os import path
|
||||
@ -30,7 +29,7 @@ from docutils.readers.doctree import Reader as DoctreeReader
|
||||
|
||||
from sphinx import package_dir, __version__
|
||||
from sphinx.util import SEP, os_path, relative_uri, ensuredir, \
|
||||
movefile, ustrftime, copy_static_entry
|
||||
movefile, ustrftime, copy_static_entry, copyfile
|
||||
from sphinx.errors import SphinxError
|
||||
from sphinx.search import js_index
|
||||
from sphinx.theming import Theme
|
||||
@ -495,8 +494,8 @@ class StandaloneHTMLBuilder(Builder):
|
||||
ensuredir(path.join(self.outdir, '_images'))
|
||||
for src, dest in self.images.iteritems():
|
||||
self.info(' '+src, nonl=1)
|
||||
shutil.copyfile(path.join(self.srcdir, src),
|
||||
path.join(self.outdir, '_images', dest))
|
||||
copyfile(path.join(self.srcdir, src),
|
||||
path.join(self.outdir, '_images', dest))
|
||||
self.info()
|
||||
|
||||
# copy downloadable files
|
||||
@ -505,8 +504,8 @@ class StandaloneHTMLBuilder(Builder):
|
||||
ensuredir(path.join(self.outdir, '_downloads'))
|
||||
for src, (_, dest) in self.env.dlfiles.iteritems():
|
||||
self.info(' '+src, nonl=1)
|
||||
shutil.copyfile(path.join(self.srcdir, src),
|
||||
path.join(self.outdir, '_downloads', dest))
|
||||
copyfile(path.join(self.srcdir, src),
|
||||
path.join(self.outdir, '_downloads', dest))
|
||||
self.info()
|
||||
|
||||
# copy static files
|
||||
@ -521,8 +520,8 @@ class StandaloneHTMLBuilder(Builder):
|
||||
jsfile = path.join(package_dir, 'locale', self.config.language,
|
||||
'LC_MESSAGES', 'sphinx.js')
|
||||
if path.isfile(jsfile):
|
||||
shutil.copyfile(jsfile, path.join(self.outdir, '_static',
|
||||
'translations.js'))
|
||||
copyfile(jsfile, path.join(self.outdir, '_static',
|
||||
'translations.js'))
|
||||
# then, copy over all user-supplied static files
|
||||
if self.theme:
|
||||
staticdirnames = [path.join(themepath, 'static')
|
||||
@ -545,8 +544,8 @@ class StandaloneHTMLBuilder(Builder):
|
||||
# last, copy logo file (handled differently)
|
||||
if self.config.html_logo:
|
||||
logobase = path.basename(self.config.html_logo)
|
||||
shutil.copyfile(path.join(self.confdir, self.config.html_logo),
|
||||
path.join(self.outdir, '_static', logobase))
|
||||
copyfile(path.join(self.confdir, self.config.html_logo),
|
||||
path.join(self.outdir, '_static', logobase))
|
||||
|
||||
# write build info file
|
||||
fp = open(path.join(self.outdir, '.buildinfo'), 'w')
|
||||
@ -663,7 +662,7 @@ class StandaloneHTMLBuilder(Builder):
|
||||
source_name = path.join(self.outdir, '_sources',
|
||||
os_path(ctx['sourcename']))
|
||||
ensuredir(path.dirname(source_name))
|
||||
shutil.copyfile(self.env.doc2path(pagename), source_name)
|
||||
copyfile(self.env.doc2path(pagename), source_name)
|
||||
|
||||
def handle_finish(self):
|
||||
self.info(bold('dumping search index... '), nonl=True)
|
||||
@ -778,7 +777,7 @@ class SerializingHTMLBuilder(StandaloneHTMLBuilder):
|
||||
source_name = path.join(self.outdir, '_sources',
|
||||
os_path(ctx['sourcename']))
|
||||
ensuredir(path.dirname(source_name))
|
||||
shutil.copyfile(self.env.doc2path(pagename), source_name)
|
||||
copyfile(self.env.doc2path(pagename), source_name)
|
||||
|
||||
def handle_finish(self):
|
||||
# dump the global context
|
||||
@ -794,8 +793,8 @@ class SerializingHTMLBuilder(StandaloneHTMLBuilder):
|
||||
|
||||
# copy the environment file from the doctree dir to the output dir
|
||||
# as needed by the web app
|
||||
shutil.copyfile(path.join(self.doctreedir, ENV_PICKLE_FILENAME),
|
||||
path.join(self.outdir, ENV_PICKLE_FILENAME))
|
||||
copyfile(path.join(self.doctreedir, ENV_PICKLE_FILENAME),
|
||||
path.join(self.outdir, ENV_PICKLE_FILENAME))
|
||||
|
||||
# touch 'last build' file, used by the web application to determine
|
||||
# when to reload its environment and clear the cache
|
||||
|
@ -10,7 +10,6 @@
|
||||
"""
|
||||
|
||||
import os
|
||||
import shutil
|
||||
from os import path
|
||||
|
||||
from docutils import nodes
|
||||
@ -19,7 +18,7 @@ from docutils.utils import new_document
|
||||
from docutils.frontend import OptionParser
|
||||
|
||||
from sphinx import package_dir, addnodes
|
||||
from sphinx.util import SEP, texescape
|
||||
from sphinx.util import SEP, texescape, copyfile
|
||||
from sphinx.builders import Builder
|
||||
from sphinx.environment import NoUri
|
||||
from sphinx.util.console import bold, darkgreen
|
||||
@ -175,8 +174,8 @@ class LaTeXBuilder(Builder):
|
||||
self.info(bold('copying images...'), nonl=1)
|
||||
for src, dest in self.images.iteritems():
|
||||
self.info(' '+src, nonl=1)
|
||||
shutil.copyfile(path.join(self.srcdir, src),
|
||||
path.join(self.outdir, dest))
|
||||
copyfile(path.join(self.srcdir, src),
|
||||
path.join(self.outdir, dest))
|
||||
self.info()
|
||||
|
||||
# copy additional files
|
||||
@ -184,20 +183,20 @@ class LaTeXBuilder(Builder):
|
||||
self.info(bold('copying additional files...'), nonl=1)
|
||||
for filename in self.config.latex_additional_files:
|
||||
self.info(' '+filename, nonl=1)
|
||||
shutil.copyfile(path.join(self.confdir, filename),
|
||||
path.join(self.outdir, path.basename(filename)))
|
||||
copyfile(path.join(self.confdir, filename),
|
||||
path.join(self.outdir, path.basename(filename)))
|
||||
self.info()
|
||||
|
||||
# the logo is handled differently
|
||||
if self.config.latex_logo:
|
||||
logobase = path.basename(self.config.latex_logo)
|
||||
shutil.copyfile(path.join(self.confdir, self.config.latex_logo),
|
||||
path.join(self.outdir, logobase))
|
||||
copyfile(path.join(self.confdir, self.config.latex_logo),
|
||||
path.join(self.outdir, logobase))
|
||||
|
||||
self.info(bold('copying TeX support files... '), nonl=True)
|
||||
staticdirname = path.join(package_dir, 'texinputs')
|
||||
for filename in os.listdir(staticdirname):
|
||||
if not filename.startswith('.'):
|
||||
shutil.copyfile(path.join(staticdirname, filename),
|
||||
path.join(self.outdir, filename))
|
||||
copyfile(path.join(staticdirname, filename),
|
||||
path.join(self.outdir, filename))
|
||||
self.info('done')
|
||||
|
@ -384,7 +384,7 @@ def force_decode(string, encoding):
|
||||
|
||||
|
||||
def movefile(source, dest):
|
||||
# move a file, removing the destination if it exists
|
||||
"""Move a file, removing the destination if it exists."""
|
||||
if os.path.exists(dest):
|
||||
try:
|
||||
os.unlink(dest)
|
||||
@ -393,6 +393,13 @@ def movefile(source, dest):
|
||||
os.rename(source, dest)
|
||||
|
||||
|
||||
def copyfile(source, dest):
|
||||
"""Copy a file and its modification times, if possible."""
|
||||
shutil.copyfile(source, dest)
|
||||
try: shutil.copystat(source, dest)
|
||||
except shutil.Error: pass
|
||||
|
||||
|
||||
def copy_static_entry(source, target, builder, context={}):
|
||||
if path.isfile(source):
|
||||
if source.lower().endswith('_t'):
|
||||
@ -403,7 +410,7 @@ def copy_static_entry(source, target, builder, context={}):
|
||||
fsrc.close()
|
||||
fdst.close()
|
||||
else:
|
||||
shutil.copyfile(source, target)
|
||||
copyfile(source, target)
|
||||
elif path.isdir(source):
|
||||
if source in builder.config.exclude_dirnames:
|
||||
return
|
||||
|
Loading…
Reference in New Issue
Block a user