rust-lang / mdBook

Create book from markdown files. Like Gitbook but implemented in Rust
https://rust-lang.github.io/mdBook/
Mozilla Public License 2.0
17.25k stars 1.58k forks source link

Emacs lockfiles produce "Rendering failed" errors #2224

Open dmoles opened 8 months ago

dmoles commented 8 months ago

Problem

When an Emacs buffer has been edited but not saved, Emacs generates a lock file in the form of a symlink to a nonexistent file. E.g., when editing SUMMARY.md:

lrwxrwxrwx 1 david david   35 Oct 22 12:40  .#SUMMARY.md -> david@bibliotecarie.2199:1697969899

mdBook does not like these files:

$ mdbook build
2023-10-22 12:43:28 [INFO] (mdbook::book): Book building has started
2023-10-22 12:43:28 [INFO] (mdbook::book): Running the html backend
2023-10-22 12:43:28 [ERROR] (mdbook::utils): Error: Rendering failed
2023-10-22 12:43:28 [ERROR] (mdbook::utils):    Caused By: Failed to read "/home/david/projects/mdbook-project/src/.#SUMMARY.md"
2023-10-22 12:43:28 [ERROR] (mdbook::utils):    Caused By: No such file or directory (os error 2)

Steps

  1. In an mdBook project, open SUMMARY.md in Emacs and make a small edit, but do not save.
  2. Run mdbook build.

Expected:

Actual:

Possible Solution(s)

  1. a mechanism to exclude certain file patterns from the build would allow excluding all files of the pattern .#*.md
  2. the build command (as well as watch, serve, etc.) could (optionally?) ignore broken symlinks

(N.b. I'm new to mdBook; it's possible these mechanisms exist and I'm just not finding them in the docs. In which case, it would be nice to surface them more prominently there.)

Notes

This isn't a showstopper as it's cleared up as soon as the file is saved (or in the event of a crash, as soon as the offending symlink is deleted). Still, it creates a lot of noise, particularly in watch or serve mode, and makes it hard to see legitimate warnings/errors.

Version

`mdbook v0.4.35`
KFearsoff commented 7 months ago

This seems very relevant: https://github.com/notify-rs/notify/issues/255

The issue seems very hard to tackle. Very often, failing is what you want to do when your symlink is broken. Emacs is a rare special case. It seems like Emacs doesn't support other forms of lockfiles either, so I fear this is unfixable.

I guess this could be better documented, or a flag might be added when notify-rs lands support for ignoring symlink failures, but for now there's not much we can do.

KFearsoff commented 7 months ago

@rustbot label +A-Documentation +C-dependency-bug +Command-serve +Command-watch +S-Blocked-Upstream

pnkfelix commented 1 month ago

One way we could deal with this, as pointed out to me by @ehuss , would be to first put in a change resolving #1156/#1187 (such as PR #2183). Then, once that in place, all Emacs lockfiles can be specified via a pattern matching files starting with .# in the mdbookignore