diff --git a/generators/wiki/mw_utils.rb b/generators/wiki/mw_utils.rb index 28373089458b4c0871ea040b9b480b9e34ae4411..93450b5c760b3e2fc423c6bf0c59e7def5775cce 100644 --- a/generators/wiki/mw_utils.rb +++ b/generators/wiki/mw_utils.rb @@ -28,6 +28,23 @@ module MediawikiApi res = get_conn.send(:get, '', params) res.body end + + def get_file_content(file_name) + get_conn = Faraday.new(url: MW::BASE_URL + "images/#{file_name}") do |faraday| + faraday.request :multipart + faraday.request :url_encoded + faraday.use :cookie_jar, jar: @cookies + faraday.use FaradayMiddleware::FollowRedirects + faraday.adapter Faraday.default_adapter + end + params = { + :token_type => false, + :action => 'raw' + } + params[:token] = get_token(:csrf) + res = get_conn.send(:get, '', params) + res.body + end def update_file(filename, path, content_type, comment, ignorewarnings, text = nil) file = Faraday::UploadIO.new(path, content_type) diff --git a/generators/wiki/wiki_generator.rb b/generators/wiki/wiki_generator.rb index 708e5ecbf96463895ab7738153d44817abdb6c83..0ae3cf453d9cec628172d84da6a7f7f57c65dbe4 100644 --- a/generators/wiki/wiki_generator.rb +++ b/generators/wiki/wiki_generator.rb @@ -53,6 +53,28 @@ class WikiGenerator } end + def diff_files + ret = true + @files.each { |file| + if file['content-type'] == 'text/plain' + file_content = @mw_client.get_file_content(file['filename']) + generated_content = File.read(file['path']) + diff = Diffy::Diff.new(file_content, generated_content, :context => 0) + if (diff.to_s.empty?) + puts "No differences found between generated and current content for file #{file['filename']}." + ret &= true + else + puts "Differences between generated and current content for file #{file['filename']}:" + puts '------------ FILE DIFF BEGIN ------------' + puts "#{diff.to_s(:text)}" + puts '------------- FILE DIFF END -------------' + ret &= false + end + end + } + return ret + end + #print generator content to stdout def print() puts @generated_content @@ -117,7 +139,8 @@ class WikiGenerator generator.login(options) end if (options[:diff]) - generator.diff_page + generator.diff_page if generator.instance_variable_get('@generated_content') + generator.diff_files if generator.instance_variable_get('@files') end if (options[:print]) generator.print