|
5 | 5 | module Jekyll
|
6 | 6 | class LastModifiedAt < Octopress::Hooks::Site
|
7 | 7 | DATE_FORMAT = '%Y-%m-%d %H:%M:%S %z'
|
8 |
| - def pre_render(site) |
9 |
| - if get_docs_url == "http://localhost:4000" |
10 |
| - # Do not generate last_modified_at for local development |
11 |
| - return |
| 8 | + |
| 9 | + def current_last_modified_at(site, page) |
| 10 | + if page.data.key?('last_modified_at') |
| 11 | + return page.data['last_modified_at'] |
12 | 12 | end
|
| 13 | + site.config['defaults'].map do |set| |
| 14 | + if set['values'].key?('last_modified_at') && set['scope']['path'].include?(page.relative_path) |
| 15 | + return set['values']['last_modified_at'] |
| 16 | + end |
| 17 | + end.compact |
| 18 | + nil |
| 19 | + end |
13 | 20 |
|
| 21 | + def pre_render(site) |
14 | 22 | beginning_time = Time.now
|
15 | 23 | Jekyll.logger.info "Starting plugin last_modified_at.rb..."
|
16 | 24 |
|
17 | 25 | git = Git.open(site.source)
|
18 |
| - site.pages.each do |page| |
| 26 | + use_file_mtime = get_docs_url == "http://localhost:4000" && ENV['DOCS_ENFORCE_GIT_LOG_HISTORY'] == "0" |
| 27 | + site.pages.sort!{|l,r| l.relative_path <=> r.relative_path }.each do |page| |
19 | 28 | next if page.relative_path == "redirect.html"
|
20 | 29 | next unless File.extname(page.relative_path) == ".md" || File.extname(page.relative_path) == ".html"
|
21 |
| - unless page.data.key?('last_modified_at') |
| 30 | + page.data['last_modified_at'] = current_last_modified_at(site, page) |
| 31 | + set_mode = "frontmatter" |
| 32 | + path_override = "" |
| 33 | + if page.data['last_modified_at'].nil? |
| 34 | + page_relative_path = page.relative_path |
| 35 | + if page.data.key?('datafolder') && page.data.key?('datafile') |
| 36 | + page_relative_path = File.join('_data', page.data['datafolder'], "#{page.data['datafile']}.yaml") |
| 37 | + path_override = "\n override: #{page_relative_path}" |
| 38 | + end |
22 | 39 | begin
|
23 |
| - page.data['last_modified_at'] = git.log.path(page.relative_path).first.date.strftime(DATE_FORMAT) |
| 40 | + if use_file_mtime |
| 41 | + # Use file's mtime for local development |
| 42 | + page.data['last_modified_at'] = File.mtime(page_relative_path).strftime(DATE_FORMAT) |
| 43 | + set_mode = "mtime" |
| 44 | + else |
| 45 | + page.data['last_modified_at'] = git.log.path(page_relative_path).first.date.strftime(DATE_FORMAT) |
| 46 | + set_mode = "git" |
| 47 | + end |
24 | 48 | rescue => e
|
25 | 49 | # Ignored
|
26 | 50 | end
|
27 | 51 | end
|
28 |
| - puts" #{page.relative_path}\n last_modified_at: #{page.data['last_modified_at']}" |
| 52 | + puts" #{page.relative_path}#{path_override}\n last_modified_at(#{set_mode}): #{page.data['last_modified_at']}" |
29 | 53 | end
|
30 | 54 |
|
31 | 55 | end_time = Time.now
|
|
0 commit comments