Skip to content

Exit cleanly if file deleted? #49

@dmolesUC

Description

@dmolesUC

Right now if a file under preview is moved or deleted, GHMP throws an uncaught exception but keeps running:

$ github-markdown-preview /tmp/foo.md &
[2] 64025
FVFYK0RTHV2H:Work la-dmoles$ Preview available at file:///private/tmp/foo.md.html
rm /tmp/foo.md
FVFYK0RTHV2H:Work la-dmoles$ E, [2019-07-11T09:26:39.413391 #64025] ERROR -- : exception while processing events: Source file deleted Backtrace:
 -- /Users/la-dmoles/.rvm/gems/ruby-2.6.3/gems/github-markdown-preview-5.0.0/lib/github-markdown-preview/html_preview.rb:95:in `update'
 -- /Users/la-dmoles/.rvm/gems/ruby-2.6.3/gems/github-markdown-preview-5.0.0/lib/github-markdown-preview/html_preview.rb:137:in `block in start_watch'
 -- /Users/la-dmoles/.rvm/gems/ruby-2.6.3/gems/listen-3.1.5/lib/listen/event/config.rb:23:in `call'
 -- /Users/la-dmoles/.rvm/gems/ruby-2.6.3/gems/listen-3.1.5/lib/listen/event/processor.rb:115:in `_process_changes'
 -- /Users/la-dmoles/.rvm/gems/ruby-2.6.3/gems/listen-3.1.5/lib/listen/event/processor.rb:19:in `block in loop_for'
 -- /Users/la-dmoles/.rvm/gems/ruby-2.6.3/gems/listen-3.1.5/lib/listen/event/processor.rb:15:in `loop'
 -- /Users/la-dmoles/.rvm/gems/ruby-2.6.3/gems/listen-3.1.5/lib/listen/event/processor.rb:15:in `loop_for'
 -- /Users/la-dmoles/.rvm/gems/ruby-2.6.3/gems/listen-3.1.5/lib/listen/event/loop.rb:84:in `_wait_for_changes'
 -- /Users/la-dmoles/.rvm/gems/ruby-2.6.3/gems/listen-3.1.5/lib/listen/event/loop.rb:42:in `block in setup'
 -- /Users/la-dmoles/.rvm/gems/ruby-2.6.3/gems/listen-3.1.5/lib/listen/internals/thread_pool.rb:6:in `block in add'
ps
  PID TTY           TIME CMD
58571 ttys000    0:00.09 -bash
40405 ttys001    0:00.08 -bash
64025 ttys003    0:00.54 ruby /Users/la-dmoles/.rvm/gems/ruby-2.6.3/bin/github-markdown-preview /tmp/foo.md   
64026 ttys003    0:00.01 /Users/la-dmoles/.rvm/gems/ruby-2.6.3/gems/rb-fsevent-0.10.3/bin/fsevent_watch --format=otnetstring --la

If it's been backgrounded (my usual workflow, I don't know how common it is), it then has to be explicitly foregrounded and Ctrl-C'd, or killed manually.

Would it make sense to exit more cleanly? It looks like something like this (if cleaned up a little bit) in HtmlPreview.start_watch might do it:

@listener = Listen.to(source_file_dir) do
  begin
    update
  rescue FileNotFoundError
    Listen::Logger.error("Source file deleted")
    end_watch
  end
end

But that might also complicate the sleep if blocking at the end -- might have to be a loop that checks @listener.processing?.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions