|
1 | 1 | class SyncExtensionContentsAtVersionsWorker < ApplicationWorker
|
| 2 | + include MarkdownHelper |
2 | 3 |
|
3 | 4 | def logger
|
4 | 5 | if Rails.env.production?
|
@@ -110,29 +111,61 @@ def check_for_overrides(version)
|
110 | 111 | end
|
111 | 112 |
|
112 | 113 | def override_readme(version, readme_url)
|
| 114 | + |
| 115 | + message = [] |
| 116 | + |
113 | 117 | begin
|
114 | 118 | url = URI.parse(readme_url)
|
115 | 119 | rescue URI::Error => error
|
116 | 120 | logger.info "URI error: #{readme_url} - #{error.message}"
|
117 | 121 | return
|
118 | 122 | end
|
| 123 | + |
| 124 | + readme_ext = File.extname(url.path).gsub(".", "") |
| 125 | + unless ExtensionVersion::MARKDOWN_EXTENSIONS.include?(readme_ext) |
| 126 | + message << "#{version.version} override readme_url is not a valid markdown file." |
| 127 | + end |
| 128 | + |
119 | 129 | # get file contents
|
120 | 130 | begin
|
121 | 131 | file = url.open
|
122 | 132 | rescue OpenURI::HTTPError => error
|
123 | 133 | status = error.io.status
|
124 |
| - logger.info "****** file read error: #{status[0]} - #{status[1]}" |
| 134 | + message << "#{version.version} #{url.path} file read error: #{status[0]} - #{status[1]}" |
| 135 | + logger.info message.compact.join('; ') |
| 136 | + compilation_error = [version.compilation_error] + message |
| 137 | + version.update_column(:compilation_error, compilation_error.compact.join('; ')) |
125 | 138 | return
|
126 | 139 | end
|
127 |
| - #readme_ext = File.extname(url.path).gsub(".", "") |
128 |
| - readme = file.read |
129 |
| - #readme = readme.encode(Encoding.find('UTF-8'), {invalid: :replace, undef: :replace, replace: ''}) |
130 | 140 |
|
131 |
| - version.update( |
132 |
| - readme: readme, |
133 |
| - readme_extension: 'html' |
134 |
| - ) |
135 |
| - logger.info "OVERRIDE README: #{url.path}" |
| 141 | + readme = file.read |
| 142 | + |
| 143 | + if readme.include?('!DOCTYPE html') |
| 144 | + message << "#{version.version} override readme is not valid markdown." |
| 145 | + end |
| 146 | + |
| 147 | + begin |
| 148 | + filter = HTML::Pipeline.new [ |
| 149 | + HTML::Pipeline::MarkdownFilter, |
| 150 | + ], {gfm: true} |
| 151 | + filter.call(readme) |
| 152 | + rescue |
| 153 | + message << "#{version.version} override readme is not valid markdown." |
| 154 | + end |
| 155 | + |
| 156 | + if message.present? |
| 157 | + compilation_error = [version.compilation_error] + message |
| 158 | + version.update_column(:compilation_error, compilation_error.compact.join('; ')) |
| 159 | + else |
| 160 | + |
| 161 | + readme = readme.encode(Encoding.find('UTF-8'), {invalid: :replace, undef: :replace, replace: ''}) |
| 162 | + |
| 163 | + version.update( |
| 164 | + readme: readme, |
| 165 | + readme_extension: readme_ext |
| 166 | + ) |
| 167 | + logger.info "OVERRIDE README: #{url.path}" |
| 168 | + end |
136 | 169 | end
|
137 | 170 |
|
138 | 171 | def extract_readme_file_extension(filename)
|
|
0 commit comments