From 0befef718f4ba09f847cc5827aa3df9b286e8df7 Mon Sep 17 00:00:00 2001
From: Holger Just <h.just@finn.de>
Date: Sat, 8 Oct 2011 20:05:41 +0200
Subject: [PATCH] Add rake task to set magic comments for source encoding

---
 lib/tasks/code.rake | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/lib/tasks/code.rake b/lib/tasks/code.rake
index e202e5d9c..5be74c949 100644
--- a/lib/tasks/code.rake
+++ b/lib/tasks/code.rake
@@ -1,3 +1,4 @@
+#-- encoding: UTF-8
 #-- copyright
 # ChiliProject is a project management system.
 #
@@ -29,4 +30,34 @@ namespace :code do
       end
     end
   end
+
+  desc "Set the magic encoding comment everywhere to UTF-8"
+  task :source_encoding do
+    shebang = '\s*#!.*?(\n|\r\n)'
+    magic_regex = /\A(#{shebang})?\s*(#\W*(en)?coding:.*?$)/mi
+
+    magic_comment = '#-- encoding: UTF-8'
+
+    (Dir['script/**/**'] + Dir['**/**{.rb,.rake}']).each do |file_name|
+      next unless File.file?(file_name)
+
+      # We don't skip code here, as we need ALL code files to have UTF-8
+      # source encoding
+      file_content = File.read(file_name)
+      if file_content =~ magic_regex
+        file_content.gsub!(magic_regex, "\\1#{magic_comment}")
+      else
+        if file_content.start_with?("#!")
+          # We have a shebang. Encoding comment is to put on the second line
+          file_content.sub!(/(\n|\r\n)/, "\\1#{magic_comment}\\1")
+        else
+          file_content = magic_comment + "\n" + file_content
+        end
+      end
+
+      File.open(file_name, "w") do |file|
+        file.write file_content
+      end
+    end
+  end
 end
-- 
GitLab