OSDN Git Service

Add a warning prompt to the setup task
authorRiyad Preukschas <riyad@informatik.uni-bremen.de>
Thu, 17 Jan 2013 20:19:36 +0000 (21:19 +0100)
committerRiyad Preukschas <riyad@informatik.uni-bremen.de>
Thu, 17 Jan 2013 20:19:36 +0000 (21:19 +0100)
lib/tasks/gitlab/setup.rake
lib/tasks/gitlab/task_helpers.rake

index 572a22a..ce6d0eb 100644 (file)
@@ -1,10 +1,24 @@
 namespace :gitlab do
   namespace :app do
     desc "GITLAB | Setup production application"
-    task :setup => [
-      'db:setup',
-      'db:seed_fu',
-      'gitlab:enable_automerge'
-    ]
+    task :setup => :environment do
+      setup
+    end
+
+    def setup
+      warn_user_is_not_gitlab
+
+      puts "This will create the necessary database tables and seed the database."
+      puts "You will lose any previous data stored in the database."
+      ask_to_continue
+      puts ""
+
+      Rake::Task["db:setup"].invoke
+      Rake::Task["db:seed_fu"].invoke
+      Rake::Task["gitlab:enable_automerge"].invoke
+    rescue Gitlab::TaskAbortedByUserError
+      puts "Quitting...".red
+      exit 1
+    end
   end
 end
index 12fd518..d494125 100644 (file)
@@ -1,5 +1,18 @@
+module Gitlab
+  class TaskAbortedByUserError < StandardError; end
+end
+
 namespace :gitlab do
 
+  # Ask if the user wants to continue
+  #
+  # Returns "yes" the user chose to continue
+  # Raises Gitlab::TaskAbortedByUserError if the user chose *not* to continue
+  def ask_to_continue
+    answer = prompt("Do you want to continue (yes/no)? ".blue, %w{yes no})
+    raise Gitlab::TaskAbortedByUserError unless answer == "yes"
+  end
+
   # Check which OS is running
   #
   # It will primarily use lsb_relase to determine the OS.
@@ -22,6 +35,20 @@ namespace :gitlab do
     os_name.try(:squish!)
   end
 
+  # Prompt the user to input something
+  #
+  # message - the message to display before input
+  # choices - array of strings of acceptible answers or nil for any answer
+  #
+  # Returns the user's answer
+  def prompt(message, choices = nil)
+    begin
+      print(message)
+      answer = STDIN.gets.chomp
+    end while choices.present? && !choices.include?(answer)
+    answer
+  end
+
   # Runs the given command and matches the output agains the given pattern
   #
   # Returns nil if nothing matched