From fff6b89f0f51709e5c58be11e6b98e638383c678 Mon Sep 17 00:00:00 2001
From: Bob Van Landuyt <bob@vanlanduyt.co>
Date: Tue, 19 Jun 2018 19:13:11 +0200
Subject: [PATCH] More verbose errors in static-analysis

This makes the output in static analysis a bit more verbose.
---
 lib/tasks/gettext.rake | 21 +++++++++++++++------
 lib/tasks/lint.rake    | 22 +++++++++++++++-------
 2 files changed, 30 insertions(+), 13 deletions(-)

diff --git a/lib/tasks/gettext.rake b/lib/tasks/gettext.rake
index d52c419d66..d7c40cb6a1 100644
--- a/lib/tasks/gettext.rake
+++ b/lib/tasks/gettext.rake
@@ -53,25 +53,34 @@ namespace :gettext do
   task :updated_check do
     # Removing all pre-translated files speeds up `gettext:find` as the
     # files don't need to be merged.
-    `rm locale/*/gitlab.po`
+    # Having `LC_MESSAGES/gitlab.mo files present also confuses the output.
+    FileUtils.rm Dir['locale/**/gitlab.*']
+
+    # Make sure we start out with a clean pot.file
+    `git checkout -- locale/gitlab.pot`
 
     # `gettext:find` writes touches to temp files to `stderr` which would cause
-    # `static-analysis` to report failures. We can ignore these
-    silence_stream(STDERR) { Rake::Task['gettext:find'].invoke }
+    # `static-analysis` to report failures. We can ignore these.
+    silence_stream($stderr) do
+      Rake::Task['gettext:find'].invoke
+    end
 
-    changed_files = `git diff --name-only`.lines.map(&:strip)
+    pot_diff = `git diff -- locale/gitlab.pot`.strip
 
     # reset the locale folder for potential next tasks
     `git checkout -- locale`
 
-    if changed_files.include?('locale/gitlab.pot')
+    if pot_diff.present?
       raise <<~MSG
         Newly translated strings found, please add them to `gitlab.pot` by running:
 
-          bundle exec rake gettext:find; git checkout -- locale/*/gitlab.po;
+          rm locale/**/gitlab.*; bin/rake gettext:find; git checkout -- locale/*/gitlab.po
 
         Then commit and push the resulting changes to `locale/gitlab.pot`.
 
+        The diff was:
+
+        #{pot_diff}
       MSG
     end
   end
diff --git a/lib/tasks/lint.rake b/lib/tasks/lint.rake
index b5a9cddaac..006fcdd31a 100644
--- a/lib/tasks/lint.rake
+++ b/lib/tasks/lint.rake
@@ -17,13 +17,22 @@ unless Rails.env.production?
       Rake::Task['eslint'].invoke
     end
 
+    desc "GitLab | lint | Lint HAML files"
+    task :haml do
+      begin
+        Rake::Task['haml_lint'].invoke
+      rescue RuntimeError # The haml_lint tasks raise a RuntimeError
+        exit(1)
+      end
+    end
+
     desc "GitLab | lint | Run several lint checks"
     task :all do
       status = 0
 
       %w[
         config_lint
-        haml_lint
+        lint:haml
         scss_lint
         flay
         gettext:lint
@@ -39,13 +48,12 @@ unless Rails.env.production?
           $stderr.reopen(wr_err)
 
           begin
-            begin
-              Rake::Task[task].invoke
-            rescue RuntimeError # The haml_lint tasks raise a RuntimeError
-              exit(1)
-            end
+            Rake::Task[task].invoke
           rescue SystemExit => ex
-            msg = "*** Rake task #{task} failed with the following error(s):"
+            msg = "*** Rake task #{task} exited:"
+            raise ex
+          rescue => ex
+            msg = "*** Rake task #{task} raised #{ex.class}:"
             raise ex
           ensure
             $stdout.reopen(stdout)
-- 
2.30.9