diff --git a/lib/tasks/gitlab/shell.rake b/lib/tasks/gitlab/shell.rake
index 25713482ed81e0dff32cfdaadbb22fc2bfa38c8f..c02fbad0214ec8e2e277b6b20071e979f28a6291 100644
--- a/lib/tasks/gitlab/shell.rake
+++ b/lib/tasks/gitlab/shell.rake
@@ -1,9 +1,25 @@
 namespace :gitlab do
   namespace :shell do
     desc "GITLAB | Setup gitlab-shell"
-    task :setup => :environment do
+    task setup: :environment do
       setup
     end
+
+    desc "GITLAB | Build missing projects"
+    task build_missing_projects: :environment do
+      Project.find_each(batch_size: 1000) do |project|
+        path_to_repo = File.join(Gitlab.config.gitolite.repos_path, "#{project.path_with_namespace}.git")
+        if File.exists?(path_to_repo)
+          print '-'
+        else
+          if Gitlab::Shell.new.add_repository(project.path_with_namespace)
+            print '.'
+          else
+            print 'F'
+          end
+        end
+      end
+    end
   end
 
   def setup
@@ -16,7 +32,7 @@ namespace :gitlab do
 
     system("echo '# Managed by gitlab-shell' > /home/git/.ssh/authorized_keys")
 
-    Key.find_each(:batch_size => 1000) do |key|
+    Key.find_each(batch_size: 1000) do |key|
       if Gitlab::Shell.new.add_key(key.shell_id, key.key)
         print '.'
       else