summaryrefslogtreecommitdiffstats
path: root/redmine/vendor/plugins/gloc-1.1.0/tasks/gloc.rake
blob: 8da73779e0fc506849cf8d78bb23e931c864aed0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
namespace :gloc do
  desc 'Sorts the keys in the lang ymls'
  task :sort do
    dir = ENV['DIR'] || '{.,vendor/plugins/*}/lang'
    puts "Processing directory #{dir}"
    files = Dir.glob(File.join(dir,'*.{yaml,yml}'))
    puts 'No files found.' if files.empty?
    files.each {|file|
      puts "Sorting file: #{file}"
      header = []
      content = IO.readlines(file)
      content.each {|line| line.gsub!(/[\s\r\n\t]+$/,'')}
      content.delete_if {|line| line==''}
      tmp= []
      content.each {|x| tmp << x unless tmp.include?(x)}
      content= tmp
      header << content.shift if !content.empty? && content[0] =~ /^file_charset:/
      content.sort!
      filebak = "#{file}.bak"
      File.rename file, filebak
      File.open(file, 'w') {|fout| fout << header.join("\n") << content.join("\n") << "\n"}
      File.delete filebak
      # Report duplicates
      count= {}
      content.map {|x| x.gsub(/:.+$/, '') }.each {|x| count[x] ||= 0; count[x] += 1}
      count.delete_if {|k,v|v==1}
      puts count.keys.sort.map{|x|"  WARNING: Duplicate key '#{x}' (#{count[x]} occurances)"}.join("\n") unless count.empty?
    }
  end
end