Class: Jekyll::Commands::Doctor

Inherits:
Jekyll::Command show all
Defined in:
lib/jekyll/commands/doctor.rb

Class Method Summary collapse

Methods inherited from Jekyll::Command

add_build_options, configuration_from_options, inherited, process_site, subclasses

Class Method Details

.conflicting_urls(site) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/jekyll/commands/doctor.rb', line 48

def conflicting_urls(site)
  conflicting_urls = false
  urls = {}
  urls = collect_urls(urls, site.pages, site.dest)
  urls = collect_urls(urls, site.posts.docs, site.dest)
  urls.each do |url, paths|
    if paths.size > 1
      conflicting_urls = true
      Jekyll.logger.warn "Conflict:", "The URL '#{url}' is the destination" +
        " for the following pages: #{paths.join(", ")}"
    end
  end
  conflicting_urls
end


39
40
41
42
43
44
45
46
# File 'lib/jekyll/commands/doctor.rb', line 39

def deprecated_relative_permalinks(site)
  if site.config['relative_permalinks']
    Jekyll::Deprecator.deprecation_message "Your site still uses relative" +
                        " permalinks, which was removed in" +
                        " Jekyll v3.0.0."
    return true
  end
end

.fsnotify_buggy?(site) ⇒ Boolean

Returns:

  • (Boolean)


63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/jekyll/commands/doctor.rb', line 63

def fsnotify_buggy?(site)
  return true if !Utils::Platforms.osx?
  if Dir.pwd != `pwd`.strip
    Jekyll.logger.error "  " + <<-STR.strip.gsub(/\n\s+/, "\n  ")
      We have detected that there might be trouble using fsevent on your
      operating system, you can read https://github.com/thibaudgg/rb-fsevent/wiki/no-fsevents-fired-(OSX-bug)
      for possible work arounds or you can work around it immediately
      with `--force-polling`.
    STR

    false
  end

  true
end

.healthy?(site) ⇒ Boolean

Returns:

  • (Boolean)


31
32
33
34
35
36
37
# File 'lib/jekyll/commands/doctor.rb', line 31

def healthy?(site)
  [
    fsnotify_buggy?(site),
    !deprecated_relative_permalinks(site),
    !conflicting_urls(site)
  ].all?
end

.init_with_program(prog) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/jekyll/commands/doctor.rb', line 6

def init_with_program(prog)
  prog.command(:doctor) do |c|
    c.syntax 'doctor'
    c.description 'Search site and print specific deprecation warnings'
    c.alias(:hyde)

    c.option '--config CONFIG_FILE[,CONFIG_FILE2,...]', Array, 'Custom configuration file'

    c.action do |args, options|
      Jekyll::Commands::Doctor.process(options)
    end
  end
end

.process(options) ⇒ Object



20
21
22
23
24
25
26
27
28
29
# File 'lib/jekyll/commands/doctor.rb', line 20

def process(options)
  site = Jekyll::Site.new(configuration_from_options(options))
  site.read

  if healthy?(site)
    Jekyll.logger.info "Your test results", "are in. Everything looks fine."
  else
    abort
  end
end