Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # coding: utf-8
- require 'sunflower'
- settings = File.readlines('Settings-core.php').map{|ln| ln.chomp }
- settings = settings[ settings.index("$settings = array(")..settings.index(");") ]
- settings = settings.reject{|ln| ln =~ /^\s*(#|\/\/)/ }.select{|ln| ln =~ /^\s*'(wg\w+)' => ['"]\w+['"],$/i }
- settings = settings.map{|ln| ln.match(/^\s*'(wg\w+)' => ['"]\w+['"],$/i)[1] }
- summaries = File.readlines('Settings.i18n.php').map{|ln| ln.chomp }
- summaries = summaries[ summaries.index("$messages['en'] = array(")..summaries.index(");") ]
- summaries = summaries.reject{|ln| ln =~ /^\s*(#|\/\/)/ }.select{|ln| ln =~ /^\s*'configure-setting-(wg\w+)' => ['"](.+)['"],$/i }
- summaries = Hash[ summaries.map{|ln| ln.match(/^\s*'configure-setting-(wg\w+)' => ['"](.+)['"],$/i).values_at(1,2) } ]
- # puts settings.length
- # puts summaries.length
- s = Sunflower.new('www.mediawiki.org')
- pages = s.make_list('pages', settings.map{|s| "Manual:$#{s}" } ).pages_preloaded
- output = File.read 'Settings.i18n.php'
- # note on escaping: \' has special meaning in regex replacement, we need to double-escape
- pages.each_with_index do |page, idx|
- setting = page.title[/^Manual:\$(.+)$/, 1]
- page_summ = page.text[/\|\s*summary\s*=\s*(.+?\s*\.?)\s*\|?$/, 1]
- local_summ = summaries[setting]
- page_summ = nil if page_summ and page_summ.length<=5
- page_summ_orig = page_summ.dup
- page_summ.sub!(/\s*\.?\s*$/, '') if page_summ
- page_summ.gsub!(/\[\[([^\|]+)\]\]/, '\1') if page_summ
- page_summ.gsub!(/\[\[([^\|]+)\|([^\]]+)\]\]/, '\2') if page_summ
- local_summ.strip! if local_summ
- local_summ = local_summ.sub('\\\\', '\\').sub('\\\'', '\\\'') if local_summ
- print_contents = true
- print "[#{idx+1}/#{pages.length}] "
- if !page_summ
- puts "#{setting}: Missing remote summary"
- elsif !local_summ
- puts "#{setting}: Missing local summary"
- elsif page_summ == local_summ
- puts "#{setting}: All is well"
- print_contents = false
- else
- puts "#{setting}: Conflict"
- print_contents = true
- need_action = true
- end
- if print_contents
- puts " Remote:", " #{page_summ}" if page_summ
- puts " Local:", " #{local_summ}" if local_summ
- end
- if need_action
- # this is awful. awful.
- catch :loop_break do
- while true
- catch :loop_retry do
- print "What now? [rlx?] "
- action = gets.strip
- case action
- when 'l'
- unless s.logged_in?
- require 'io/console'
- begin
- print "User: "; user = gets.strip
- print "Password: "; pass = $stdin.noecho{ gets.strip }
- puts ''
- s.login user, pass
- s.summary = "updating summary based on data in [[Extension:Configure]]"
- rescue Sunflower::Error
- puts "Login failed."
- throw :loop_retry
- end
- end
- page.text.sub! page_summ_orig, local_summ + '.'
- page.save
- throw :loop_break
- when 'r'
- # oh god why
- for_output = page_summ =~ /['\\]/ ? page_summ.inspect.gsub('$', '\\$') : "'#{page_summ}'"
- output.sub!(
- /^(\s*)'configure-setting-#{setting}'.+$/,
- "\\1'configure-setting-#{setting}' => #{for_output},"
- )
- File.write 'Settings.i18n.php', output
- throw :loop_break
- when 'x'
- throw :loop_break
- when '?'
- puts <<-EOF.gsub(/^\s+/, ' ')
- l - upload local to remote wiki
- r - download remote to local messages
- x - ignore and continue
- EOF
- throw :loop_retry
- else
- # nuffin'
- end
- end
- end
- end
- end
- # output_qqq << "'configure-setting-#{setting}' => '{{config-wg|#{setting.sub 'wg', ''}}}',"
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement