Avoid a possible recursive copy when destination (build_dir) is underneath source directory. Update docs to match.
This commit is contained in:
parent
6eb597a556
commit
bd14d0910a
|
@ -35,5 +35,6 @@ not specified it will default to the value of the `build.build-dir` key in
|
||||||
|
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
***Note:*** *Make sure to run the build command in the root directory and not in
|
***Note:*** *The build command copies all files (excluding files with `.md` extension) from the source directory
|
||||||
the source directory*
|
into the build directory. If the build directory is under the source directory it is not copied as this would
|
||||||
|
result in a recursive copy until your disk is full.*
|
||||||
|
|
|
@ -291,6 +291,7 @@ impl Renderer for HtmlHandlebars {
|
||||||
let src_dir = ctx.root.join(&ctx.config.book.src);
|
let src_dir = ctx.root.join(&ctx.config.book.src);
|
||||||
let destination = &ctx.destination;
|
let destination = &ctx.destination;
|
||||||
let book = &ctx.book;
|
let book = &ctx.book;
|
||||||
|
let build_dir = ctx.root.join(&ctx.config.build.build_dir);
|
||||||
|
|
||||||
if destination.exists() {
|
if destination.exists() {
|
||||||
utils::fs::remove_dir_content(destination)
|
utils::fs::remove_dir_content(destination)
|
||||||
|
@ -377,8 +378,8 @@ impl Renderer for HtmlHandlebars {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy all remaining files
|
// Copy all remaining files, avoid a recursive copy from/to the book build dir
|
||||||
utils::fs::copy_files_except_ext(&src_dir, &destination, true, &["md"])?;
|
utils::fs::copy_files_except_ext(&src_dir, &destination, true, Some(&build_dir), &["md"])?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,13 +95,15 @@ pub fn copy_files_except_ext(
|
||||||
from: &Path,
|
from: &Path,
|
||||||
to: &Path,
|
to: &Path,
|
||||||
recursive: bool,
|
recursive: bool,
|
||||||
|
avoid_dir: Option<&PathBuf>,
|
||||||
ext_blacklist: &[&str],
|
ext_blacklist: &[&str],
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
debug!(
|
debug!(
|
||||||
"Copying all files from {} to {} (blacklist: {:?})",
|
"Copying all files from {} to {} (blacklist: {:?}), avoiding {:?}",
|
||||||
from.display(),
|
from.display(),
|
||||||
to.display(),
|
to.display(),
|
||||||
ext_blacklist
|
ext_blacklist,
|
||||||
|
avoid_dir
|
||||||
);
|
);
|
||||||
|
|
||||||
// Check that from and to are different
|
// Check that from and to are different
|
||||||
|
@ -113,12 +115,18 @@ pub fn copy_files_except_ext(
|
||||||
let entry = entry?;
|
let entry = entry?;
|
||||||
let metadata = entry.metadata()?;
|
let metadata = entry.metadata()?;
|
||||||
|
|
||||||
// If the entry is a dir and the recursive option is enabled, call itself
|
// If the entry is a dir and the recursive option is enabled , call itself
|
||||||
if metadata.is_dir() && recursive {
|
if metadata.is_dir() && recursive {
|
||||||
if entry.path() == to.to_path_buf() {
|
if entry.path() == to.to_path_buf() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Some(avoid) = avoid_dir {
|
||||||
|
if entry.path() == *avoid {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// check if output dir already exists
|
// check if output dir already exists
|
||||||
if !to.join(entry.file_name()).exists() {
|
if !to.join(entry.file_name()).exists() {
|
||||||
fs::create_dir(&to.join(entry.file_name()))?;
|
fs::create_dir(&to.join(entry.file_name()))?;
|
||||||
|
@ -128,6 +136,7 @@ pub fn copy_files_except_ext(
|
||||||
&from.join(entry.file_name()),
|
&from.join(entry.file_name()),
|
||||||
&to.join(entry.file_name()),
|
&to.join(entry.file_name()),
|
||||||
true,
|
true,
|
||||||
|
avoid_dir,
|
||||||
ext_blacklist,
|
ext_blacklist,
|
||||||
)?;
|
)?;
|
||||||
} else if metadata.is_file() {
|
} else if metadata.is_file() {
|
||||||
|
@ -215,7 +224,7 @@ mod tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Err(e) =
|
if let Err(e) =
|
||||||
copy_files_except_ext(&tmp.path(), &tmp.path().join("output"), true, &["md"])
|
copy_files_except_ext(&tmp.path(), &tmp.path().join("output"), true, None, &["md"])
|
||||||
{
|
{
|
||||||
panic!("Error while executing the function:\n{:?}", e);
|
panic!("Error while executing the function:\n{:?}", e);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue