brightpearl-cli 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. checksums.yaml +5 -13
  2. data/bin/bp +1 -1
  3. data/bin/brightpearl +1 -1
  4. data/lib/brightpearl_cli.rb +161 -168
  5. data/lib/core/api.rb +1 -1
  6. data/lib/core/config.rb +10 -133
  7. data/lib/core/config_unique.rb +113 -0
  8. data/lib/core/encrypter.rb +6 -6
  9. data/lib/core/enums.rb +1 -1
  10. data/lib/core/git.rb +123 -108
  11. data/lib/core/git_delete.rb +89 -0
  12. data/lib/core/jira.rb +2 -2
  13. data/lib/core/mysql.rb +14 -14
  14. data/lib/core/pom.rb +129 -0
  15. data/lib/core/terminal.rb +28 -8
  16. data/lib/core/tools.rb +6 -6
  17. data/lib/core/utils_files.rb +92 -0
  18. data/lib/core/utils_routes.rb +25 -0
  19. data/lib/core/utils_strings.rb +45 -0
  20. data/lib/core/validate.rb +1 -1
  21. data/lib/routes/build.rb +16 -17
  22. data/lib/routes/dummy_order.rb +5 -5
  23. data/lib/routes/fix.rb +49 -0
  24. data/lib/routes/git_branch.rb +6 -6
  25. data/lib/routes/git_checkout.rb +42 -33
  26. data/lib/routes/git_delete.rb +8 -62
  27. data/lib/routes/git_merge.rb +198 -111
  28. data/lib/routes/git_pull.rb +11 -11
  29. data/lib/routes/git_push.rb +21 -12
  30. data/lib/routes/git_stash.rb +13 -8
  31. data/lib/routes/git_update.rb +17 -22
  32. data/lib/routes/jira.rb +3 -3
  33. data/lib/routes/production_logs.rb +12 -12
  34. data/lib/routes/reset.rb +1 -1
  35. data/lib/routes/review.rb +6 -5
  36. data/lib/routes/scripts_api_docs.rb +5 -5
  37. data/lib/routes/scripts_branch_cleaner.rb +58 -79
  38. data/lib/routes/scripts_color.rb +1 -1
  39. data/lib/routes/scripts_pom_fixer.rb +5 -62
  40. data/lib/routes/scripts_sonar.rb +82 -0
  41. data/lib/routes/setup.rb +6 -6
  42. data/lib/routes/tail.rb +5 -5
  43. data/lib/routes/test.rb +3 -3
  44. data/lib/routes/update.rb +1 -1
  45. metadata +16 -9
  46. data/lib/routes/scripts_code_sniffer.rb +0 -36
@@ -1,4 +1,4 @@
1
- module BrightpearlCommand
1
+ module AppCommand
2
2
 
3
3
  class GitPush < ::Convoy::ActionCommand::Base
4
4
 
@@ -6,7 +6,7 @@ module BrightpearlCommand
6
6
 
7
7
  @opts = command_options
8
8
  @args = arguments
9
- @git = Brightpearl::Git.new
9
+ @git = App::Git.new
10
10
 
11
11
  opts_validate
12
12
  opts_routing
@@ -16,7 +16,7 @@ module BrightpearlCommand
16
16
  def opts_validate
17
17
 
18
18
  if @args[0].nil?
19
- @args[0] = @git.current_branch_for_repo(Brightpearl::Config.param(Brightpearl::Config::WORKSTATION_PATH_TO_BP_CODE))
19
+ @args[0] = @git.current_branch_for_repo(App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_CODE))
20
20
  end
21
21
 
22
22
  end
@@ -29,17 +29,26 @@ module BrightpearlCommand
29
29
 
30
30
  def git_push
31
31
 
32
- @git.check_for_same_branch(Brightpearl::Git::SAME_BRANCH_WARNING)
33
- branch_code = @git.current_branch_for_repo(Brightpearl::Config.param(Brightpearl::Config::WORKSTATION_PATH_TO_BP_CODE))
34
- branch_db = @git.current_branch_for_repo(Brightpearl::Config.param(Brightpearl::Config::WORKSTATION_PATH_TO_BP_DB))
35
- if Brightpearl::Terminal::prompt_yes_no("#{Brightpearl::Terminal::format_action('push')} the following repos:", [
36
- "#{Brightpearl::Terminal::format_directory(@git.get_repo_shorthand(Brightpearl::Config.param(Brightpearl::Config::WORKSTATION_PATH_TO_BP_CODE)))} will push #{Brightpearl::Terminal::format_branch(branch_code)} \xe2\x86\x92 #{Brightpearl::Terminal::format_branch("origin/#{branch_code}")}",
37
- "#{Brightpearl::Terminal::format_directory(@git.get_repo_shorthand(Brightpearl::Config.param(Brightpearl::Config::WORKSTATION_PATH_TO_BP_DB)))} will push #{Brightpearl::Terminal::format_branch(branch_db)} \xe2\x86\x92 #{Brightpearl::Terminal::format_branch("origin/#{branch_db}")}"
38
- ])
32
+ @git.check_for_same_branch(App::Git::SAME_BRANCH_WARNING)
33
+ branch_code = @git.current_branch_for_repo(App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_CODE))
34
+ branch_db = @git.current_branch_for_repo(App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_DB))
35
+
36
+ branches_to_push = []
37
+ branches_to_push << "#{App::Terminal::format_directory(@git.get_repo_shorthand(App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_CODE)))} will push #{App::Terminal::format_branch(branch_code)} \xe2\x86\x92 #{App::Terminal::format_branch("origin/#{branch_code}")}" unless branch_code == App::Git::MASTER
38
+ branches_to_push << "#{App::Terminal::format_directory(@git.get_repo_shorthand(App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_DB)))} will push #{App::Terminal::format_branch(branch_db)} \xe2\x86\x92 #{App::Terminal::format_branch("origin/#{branch_db}")}" unless branch_db == App::Git::MASTER
39
+
40
+ unless branches_to_push.any?
41
+ App::Terminal::error("#{App::Terminal::format_action('pushing')} to #{App::Terminal::format_branch(App::Git::MASTER)} is best done manually.", nil, true)
42
+ end
43
+
44
+ if App::Terminal::prompt_yes_no("#{App::Terminal::format_action('push')} the following repos:", branches_to_push)
39
45
  @git.check_for_uncommitted_files(true)
40
46
  @git.repo_loop.each do |repo_dir|
41
- unless Brightpearl::Terminal::command_capture("git push origin #{@git.current_branch_for_repo(repo_dir)}", repo_dir)
42
- Brightpearl::Terminal::warning('Something went wrong', "Not sure what the reason was, but doing a #{Brightpearl::Terminal::format_command('git push')} on #{Brightpearl::Terminal::format_directory(@git.get_repo_shorthand(repo_dir))} was unsuccessful.")
47
+ current_branch = @git.current_branch_for_repo(repo_dir)
48
+ if current_branch != App::Git::MASTER
49
+ unless App::Terminal::command_capture("git push origin #{current_branch}", repo_dir)
50
+ App::Terminal::warning('Something went wrong', "Not sure what the reason was, but doing a #{App::Terminal::format_command('git push')} on #{App::Terminal::format_directory(@git.get_repo_shorthand(repo_dir))} was unsuccessful.")
51
+ end
43
52
  end
44
53
  end
45
54
  @git.check_for_stash(true)
@@ -1,4 +1,4 @@
1
- module BrightpearlCommand
1
+ module AppCommand
2
2
 
3
3
  class GitStash < ::Convoy::ActionCommand::Base
4
4
 
@@ -6,7 +6,7 @@ module BrightpearlCommand
6
6
 
7
7
  @opts = command_options
8
8
  @args = arguments
9
- @git = Brightpearl::Git.new
9
+ @git = App::Git.new
10
10
  opts_validate
11
11
  opts_routing
12
12
 
@@ -24,16 +24,21 @@ module BrightpearlCommand
24
24
 
25
25
  def show_all_stashes
26
26
 
27
+ no_stash_found_count = 0
27
28
  @git.repo_loop.each do |repo_dir|
28
29
  stashes = `cd #{repo_dir} && git stash list`
29
30
  stashes = stashes.split("\n")
30
31
  # Skip if no stashes.
31
- next unless stashes.any?
32
- Brightpearl::Terminal::info("Showing stashes for: #{Brightpearl::Terminal::format_directory(@git.get_repo_shorthand(repo_dir))}")
33
- stashes.each do |stash|
34
- stash_name = stash.split(/:/).first
35
- output = Brightpearl::Terminal::command_capture("git stash show --name-only #{stash_name}", repo_dir, false)
36
- Brightpearl::Terminal::info("#{stash}", output[0], false)
32
+ if stashes.any?
33
+ App::Terminal::info("Showing stashes for: #{App::Terminal::format_directory(@git.get_repo_shorthand(repo_dir))}")
34
+ stashes.each do |stash|
35
+ stash_name = stash.split(/:/).first
36
+ output = App::Terminal::command_capture("git stash show --name-only #{stash_name}", repo_dir, false)
37
+ App::Terminal::info("#{stash}", output[0], false)
38
+ end
39
+ else
40
+ App::Terminal::info("No stashes found in: #{App::Terminal::format_directory(@git.get_repo_shorthand(repo_dir))}", nil, (no_stash_found_count > 0) ? false : true)
41
+ no_stash_found_count = no_stash_found_count + 1
37
42
  end
38
43
  end
39
44
 
@@ -1,9 +1,9 @@
1
- module BrightpearlCommand
1
+ module AppCommand
2
2
 
3
3
  class GitUpdate < ::Convoy::ActionCommand::Base
4
4
 
5
5
  def execute
6
- @git = Brightpearl::Git.new
6
+ @git = App::Git.new
7
7
  @opts = command_options
8
8
  opts_validate
9
9
  opts_routing
@@ -14,14 +14,7 @@ module BrightpearlCommand
14
14
 
15
15
  def opts_routing
16
16
 
17
- if @opts[:all]
18
-
19
- Brightpearl::Terminal::error('Note yet implemented', "Must write code to update ALL branches.\nCould get complicated as there will likely be merge conflicts.\nMust think about this...", true)
20
-
21
- # update_branch_all
22
- else
23
- update_branch_single
24
- end
17
+ update_branch_single
25
18
 
26
19
  end
27
20
 
@@ -32,28 +25,30 @@ module BrightpearlCommand
32
25
  @git.repo_loop.each do |repo_dir|
33
26
  current_branch = @git.current_branch_for_repo(repo_dir)
34
27
  commands = Array.new
35
- if current_branch != Brightpearl::Git::MASTER
36
- commands << 'git checkout master'
28
+ if current_branch != App::Git::MASTER
29
+ commands << "git checkout #{App::Git::MASTER}"
37
30
  end
38
- commands << 'git pull'
39
- if current_branch != Brightpearl::Git::MASTER
31
+ commands << "git pull origin #{App::Git::MASTER}"
32
+ if current_branch != App::Git::MASTER
40
33
  commands << "git checkout #{current_branch}"
41
- commands << 'git pull'
34
+ commands << "git pull origin #{current_branch}"
42
35
  commands << 'git merge master'
43
36
  end
44
- results = Brightpearl::Terminal::command(commands, repo_dir)
45
- if current_branch != Brightpearl::Git::MASTER
37
+ results = App::Terminal::command(commands, repo_dir)
38
+ if current_branch != App::Git::MASTER
46
39
  if results[3] == false
47
40
  @git.ask_to_setup_remote_tracking(current_branch, repo_dir)
48
41
  end
49
42
  if results[4] == false
50
- Brightpearl::Terminal::error('Merge conflict occurred', ["Unable to successfully merge #{Brightpearl::Terminal::format_branch(Brightpearl::Git::MASTER)} into #{Brightpearl::Terminal::format_branch(current_branch)} on #{Brightpearl::Terminal::format_directory(@git.get_repo_shorthand(repo_dir))}", "Please #{Brightpearl::Terminal::format_action('open an IDE')}\x1B[38;5;240m and resolve your conflicts as soon as this script has finished executing."])
43
+ unless App::Terminal::prompt_yes_no('Merge conflict occurred', ["Unable to successfully merge #{App::Terminal::format_branch(App::Git::MASTER)} into #{App::Terminal::format_branch(current_branch)} on #{App::Terminal::format_directory(@git.get_repo_shorthand(repo_dir))}", "Please #{App::Terminal::format_action('open an IDE')}\x1B[38;5;240m and resolve your conflicts as soon as this script has finished executing."])
44
+ App::Terminal::abort(nil, nil, true, false)
45
+ end
51
46
  end
52
47
  end
53
- if @opts[:push] && current_branch != Brightpearl::Git::MASTER
54
- Brightpearl::Terminal::command("git push origin #{current_branch}", repo_dir)
55
- elsif @opts[:push] && current_branch == Brightpearl::Git::MASTER
56
- Brightpearl::Terminal::warning("#{Brightpearl::Terminal::format_action('push')} to #{Brightpearl::Terminal::format_branch(Brightpearl::Git::MASTER)} not allowed!", ["Your #{Brightpearl::Terminal::format_directory(@git.get_repo_shorthand(repo_dir))} repo is currently on #{Brightpearl::Terminal::format_branch(Brightpearl::Git::MASTER)}","The script will not perform a #{Brightpearl::Terminal::format_action('push')} as requested for safety reasons."])
48
+ if @opts[:push] && current_branch != App::Git::MASTER
49
+ App::Terminal::command("git push origin #{current_branch}", repo_dir)
50
+ elsif @opts[:push] && current_branch == App::Git::MASTER
51
+ App::Terminal::warning("#{App::Terminal::format_action('push')} to #{App::Terminal::format_branch(App::Git::MASTER)} not allowed!", ["Your #{App::Terminal::format_directory(@git.get_repo_shorthand(repo_dir))} repo is currently on #{App::Terminal::format_branch(App::Git::MASTER)}", "The script will not perform a #{App::Terminal::format_action('push')} as requested for safety reasons."])
57
52
  end
58
53
 
59
54
  end
data/lib/routes/jira.rb CHANGED
@@ -1,4 +1,4 @@
1
- module BrightpearlCommand
1
+ module AppCommand
2
2
 
3
3
  class JiraCard < ::Convoy::ActionCommand::Base
4
4
 
@@ -6,7 +6,7 @@ module BrightpearlCommand
6
6
 
7
7
  @opts = command_options
8
8
  @args = arguments
9
- @jira = Brightpearl::Jira.new
9
+ @jira = App::Jira.new
10
10
 
11
11
  opts_validate
12
12
  opts_routing
@@ -26,7 +26,7 @@ module BrightpearlCommand
26
26
 
27
27
  if @opts[:card]
28
28
  if @args[0].nil? || @args[0] == ''
29
- Brightpearl::Terminal::error('Argument required', 'You must supply a valid Jira Number as an argument.', true)
29
+ App::Terminal::error('Argument required', 'You must supply a valid Jira Number as an argument.', true)
30
30
  end
31
31
  end
32
32
 
@@ -1,7 +1,7 @@
1
1
  require 'columnist'
2
2
  require 'rest-client'
3
3
 
4
- module BrightpearlCommand
4
+ module AppCommand
5
5
 
6
6
  class ProductionLogs < ::Convoy::ActionCommand::Base
7
7
 
@@ -21,8 +21,8 @@ module BrightpearlCommand
21
21
  @opts = command_options
22
22
  @args = arguments
23
23
 
24
- @ec2_connection = Brightpearl::MySQL::ec2
25
- @terminal_width = Brightpearl::Terminal::get_terminal_width
24
+ @ec2_connection = App::MySQL::ec2
25
+ @terminal_width = App::Terminal::get_terminal_width
26
26
 
27
27
  opts_validate
28
28
  opts_routing
@@ -36,7 +36,7 @@ module BrightpearlCommand
36
36
  watch = watch + 1 if @opts[:watchJava]
37
37
 
38
38
  if watch >= 2
39
- Brightpearl::Terminal::error('You can only watch one set of logs at a time', "Please set only 1 one of the following flags: #{Brightpearl::Terminal::format_flag('p', false)} #{Brightpearl::Terminal::format_flag('j', false)}", true)
39
+ App::Terminal::error('You can only watch one set of logs at a time', "Please set only 1 one of the following flags: #{App::Terminal::format_flag('p', false)} #{App::Terminal::format_flag('j', false)}", true)
40
40
  elsif watch == 0
41
41
  @opts[:watchPHP] = true
42
42
  end
@@ -44,7 +44,7 @@ module BrightpearlCommand
44
44
  if @opts[:compare]
45
45
  [@args[0], @args[1]].each do |version_number|
46
46
  if version_number.nil?
47
- Brightpearl::Terminal::error('Missing arguments', ["When using the #{Brightpearl::Terminal::format_flag('c')} the system expects #{Brightpearl::Terminal::format_highlight('2 arguments ')} \xe2\x80\x94 application version numbers.", "An example of a valid command would be: #{Brightpearl::Terminal::format_command('bp p l -c 4.76.6 4.78.4')}"], true)
47
+ App::Terminal::error('Missing arguments', ["When using the #{App::Terminal::format_flag('c')} the system expects #{App::Terminal::format_highlight('2 arguments ')} \xe2\x80\x94 application version numbers.", "An example of a valid command would be: #{App::Terminal::format_command('bp p l -c 4.76.6 4.78.4')}"], true)
48
48
  end
49
49
  validate_version_number(version_number)
50
50
  end
@@ -131,14 +131,14 @@ module BrightpearlCommand
131
131
  puts # PUTS SPACE AFTER TABLE
132
132
 
133
133
  rescue Exception => e
134
- Brightpearl::Terminal::error('Something went wrong', "#{e.message}", true)
134
+ App::Terminal::error('Something went wrong', "#{e.message}", true)
135
135
  end
136
136
 
137
137
  end
138
138
 
139
139
  def watch_java
140
140
 
141
- Brightpearl::Terminal::info('Not yet implemented', 'Please wait for Albert to program this and try again later.')
141
+ App::Terminal::info('Not yet implemented', 'Please wait for Albert to program this and try again later.')
142
142
  exit
143
143
 
144
144
  end
@@ -184,7 +184,7 @@ module BrightpearlCommand
184
184
  error_output << log_message
185
185
  error_output << nil
186
186
  error_output << sql
187
- Brightpearl::Terminal::warning('Query Failed', error_output)
187
+ App::Terminal::warning('Query Failed', error_output)
188
188
  end
189
189
  end
190
190
  error_parsed = " \x1B[38;5;34m#{account_version}\x1B[0m \xe2\x86\x92 \x1B[38;5;81m#{account_name}\x1B[0m \xe2\x80\x94 \x1B[38;5;#{error_color}m#{error_message} \xe2\x80\x94 #{error_file} \xe2\x80\x94 Line #{error_line}"
@@ -211,7 +211,7 @@ module BrightpearlCommand
211
211
  LOG_URI_STG2,
212
212
  ]
213
213
  raw_log_uris.each do |log_uri|
214
- Brightpearl::Terminal::output("Retrieving data from: #{log_uri}")
214
+ App::Terminal::output("Retrieving data from: #{log_uri}")
215
215
  raw_log_data << RestClient.get(log_uri)
216
216
  end
217
217
 
@@ -314,16 +314,16 @@ module BrightpearlCommand
314
314
  # @return void
315
315
  def validate_version_number(version_number)
316
316
  unless version_number =~ /\A\d\.\d{1,3}\.\d{1,2}\z/
317
- Brightpearl::Terminal::error('Invalid version number', "#{Brightpearl::Terminal::format_highlight(version_number)} is not a valid version number.", true)
317
+ App::Terminal::error('Invalid version number', "#{App::Terminal::format_highlight(version_number)} is not a valid version number.", true)
318
318
  end
319
319
  sql = "SELECT id FROM php_logs WHERE account_version='#{version_number}' LIMIT 1"
320
320
  begin
321
321
  result = @ec2_connection.query(sql)
322
322
  rescue
323
- Brightpearl::Terminal::warning('Query Failed', sql)
323
+ App::Terminal::warning('Query Failed', sql)
324
324
  end
325
325
  unless result.num_rows > 0
326
- Brightpearl::Terminal::info('No data', "We currently don't have any data for version: #{Brightpearl::Terminal::format_highlight(version_number)}")
326
+ App::Terminal::info('No data', "We currently don't have any data for version: #{App::Terminal::format_highlight(version_number)}")
327
327
  exit
328
328
  end
329
329
  end
data/lib/routes/reset.rb CHANGED
@@ -1,4 +1,4 @@
1
- module BrightpearlCommand
1
+ module AppCommand
2
2
 
3
3
  class Reset < ::Convoy::ActionCommand::Base
4
4
 
data/lib/routes/review.rb CHANGED
@@ -1,4 +1,4 @@
1
- module BrightpearlCommand
1
+ module AppCommand
2
2
 
3
3
  class Review < ::Convoy::ActionCommand::Base
4
4
 
@@ -6,7 +6,7 @@ module BrightpearlCommand
6
6
 
7
7
  @opts = command_options
8
8
  @args = arguments
9
- @git = Brightpearl::Git.new
9
+ @git = App::Git.new
10
10
  opts_validate
11
11
  opts_routing
12
12
 
@@ -15,8 +15,9 @@ module BrightpearlCommand
15
15
  def opts_validate
16
16
 
17
17
  unless @args.any?
18
- system('bp r -h')
19
- exit
18
+
19
+ App::Terminal::error('Must specify a valid branch name', nil, true)
20
+
20
21
  end
21
22
 
22
23
  end
@@ -29,7 +30,7 @@ module BrightpearlCommand
29
30
 
30
31
  def review
31
32
 
32
- current_branch = @git.current_branch_for_repo(Brightpearl::Config.param(Brightpearl::Config::WORKSTATION_PATH_TO_BP_CODE))
33
+ current_branch = @git.current_branch_for_repo(App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_CODE))
33
34
 
34
35
  @git.check_branch_exists_somewhere(@args[0])
35
36
 
@@ -1,4 +1,4 @@
1
- module BrightpearlCommand
1
+ module AppCommand
2
2
 
3
3
  class ScriptsApiDocs < ::Convoy::ActionCommand::Base
4
4
 
@@ -23,14 +23,14 @@ module BrightpearlCommand
23
23
 
24
24
  def build_api_docs
25
25
 
26
- if Brightpearl::Tools::this_is_a_mac
26
+ if App::Tools::this_is_a_mac
27
27
 
28
- Brightpearl::Terminal::info('Building API Docs')
29
- system("sshpass -p#{Brightpearl::Config.param(Brightpearl::Config::VM_USER_PASSWORD)} ssh #{Brightpearl::Config.param(Brightpearl::Config::VM_USER)}@#{Brightpearl::Config.param(Brightpearl::Config::VM_IP)} -t 'su root && cd /brightpearl-source/dev-vm-control-scripts && ./build-api-docs'")
28
+ App::Terminal::info('Building API Docs')
29
+ system("sshpass -p#{App::Config.param(App::Config::VM_USER_PASSWORD)} ssh #{App::Config.param(App::Config::VM_USER)}@#{App::Config.param(App::Config::VM_IP)} -t 'su root && cd /brightpearl-source/dev-vm-control-scripts && ./build-api-docs'")
30
30
 
31
31
  else
32
32
 
33
- Brightpearl::Terminal::info('This functionality has not yet been implemented on your OS', ["Currently only works on #{Brightpearl::Terminal::format_action(Brightpearl::Config.param(Brightpearl::Config::WORKSTATION_OS))}", nil, "You are on #{Brightpearl::Terminal::format_action(Brightpearl::Config.param(Brightpearl::Config::WORKSTATION_OS))}"])
33
+ App::Terminal::info('This functionality has not yet been implemented on your OS', ["Currently only works on #{App::Terminal::format_action(App::Config.param(App::Config::WORKSTATION_OS))}", nil, "You are on #{App::Terminal::format_action(App::Config.param(App::Config::WORKSTATION_OS))}"])
34
34
 
35
35
  end
36
36
 
@@ -1,4 +1,4 @@
1
- module BrightpearlCommand
1
+ module AppCommand
2
2
 
3
3
  class ScriptsBranchCleaner < ::Convoy::ActionCommand::Base
4
4
 
@@ -6,7 +6,7 @@ module BrightpearlCommand
6
6
 
7
7
  @opts = command_options
8
8
  @args = arguments
9
- @git = Brightpearl::Git.new
9
+ @git = App::Git.new
10
10
 
11
11
  opts_validate
12
12
  opts_routing
@@ -15,14 +15,6 @@ module BrightpearlCommand
15
15
 
16
16
  def opts_validate
17
17
 
18
- if @opts[:scanLocal] && @opts[:scanRemote]
19
- Brightpearl::Terminal::error("Cannot scan #{Brightpearl::Terminal::format_action('local')} & #{Brightpearl::Terminal::format_action('remote')} simultaneously", "Must use either the #{Brightpearl::Terminal::format_flag('l')} or the #{Brightpearl::Terminal::format_flag('r')} \xe2\x80\x94 cannot use both.", true)
20
- end
21
-
22
- if @opts[:scanLocal] == false && @opts[:scanRemote] == false
23
- @opts[:scanLocal] = true
24
- end
25
-
26
18
  end
27
19
 
28
20
  def opts_routing
@@ -33,12 +25,10 @@ module BrightpearlCommand
33
25
 
34
26
  def clean
35
27
 
36
- local_remote = @opts[:scanRemote] ? 'remote' : 'local'
37
-
38
- Brightpearl::Terminal::info('Running branch cleaner', "Gathering list of #{Brightpearl::Terminal::format_action(local_remote)} branches which are safe to delete.")
28
+ App::Terminal::info('Running branch cleaner', "Gathering list of #{App::Terminal::format_highlight('local')} branches where last commit was #{App::Terminal::format_highlight('more than 1 month ago')}")
39
29
 
40
30
  branches_code, branches_db = get_historic_branches
41
- umc_branches = get_unsafe_branches(branches_code, branches_db)
31
+ umc_branches = get_unmerged_commit_branches(branches_code, branches_db)
42
32
  fnl_branches_cd, fnl_branches_db = get_final_branches(branches_code, branches_db, umc_branches)
43
33
 
44
34
  puts "\n"
@@ -46,99 +36,90 @@ module BrightpearlCommand
46
36
  atleast_one_error = false
47
37
 
48
38
  if umc_branches.any?
49
- Brightpearl::Terminal::warning("The following branches have commits which #{Brightpearl::Terminal::format_invalid('have not been merged to', true)} #{Brightpearl::Terminal::format_branch(Brightpearl::Git::MASTER)} \xe2\x80\x94 #{Brightpearl::Terminal::format_directory(@git.get_repo_shorthand(Brightpearl::Config.param(Brightpearl::Config::WORKSTATION_PATH_TO_BP_CODE)))}", umc_branches, false)
39
+ App::Terminal::warning("The following branches have commits which #{App::Terminal::format_invalid('have not been merged to', true)} #{App::Terminal::format_branch(App::Git::MASTER)}", umc_branches, false)
50
40
  atleast_one_error = true
51
41
  end
52
42
 
53
- if atleast_one_error
54
- unless Brightpearl::Terminal::prompt_yes_no('Skip these branches?', ["The above branch(es) have unmerged commits and will be #{Brightpearl::Terminal::format_action('skipped')} in the removal process."])
55
- Brightpearl::Terminal::abort(nil, nil, true, false)
56
- end
43
+ unless fnl_branches_cd.any? || fnl_branches_db.any?
44
+ App::Terminal::info('No branches to delete', ["The script found no branches which are #{App::Terminal::format_action('eligible for deletion')}.","All branches on your system have either a #{App::Terminal::format_highlight('commit within the last month')} or a #{App::Terminal::format_highlight('commit not in')} #{App::Terminal::format_branch(App::Git::MASTER)}."])
45
+ exit
57
46
  end
58
47
 
59
- unless fnl_branches_cd.any? && fnl_branches_db.any?
60
- Brightpearl::Terminal::info('Nothing to delete', nil, false)
61
- exit
48
+ if atleast_one_error
49
+ unless App::Terminal::prompt_yes_no('Skip these branches?', ["The above branch(es) have unmerged commits and will be #{App::Terminal::format_action('skipped')} in the removal process.", "You #{App::Terminal::format_invalid('cannot delete', true)} these branches using this script, this must be done manually #{App::Terminal::format_highlight('afterwards')}."])
50
+ App::Terminal::abort(nil, nil, true, false)
51
+ end
62
52
  end
63
53
 
64
54
  @git.show_branches_draw_table(fnl_branches_cd, fnl_branches_db)
65
55
 
66
- unless Brightpearl::Terminal::prompt_yes_no('Remove these branches?', ["By continuing, the above branches will be #{Brightpearl::Terminal::format_action('removed permanently')}"], 'Are you absolutely sure you want to continue?', false)
67
- Brightpearl::Terminal::abort(nil, nil, true, false)
56
+ unless App::Terminal::prompt_yes_no('Remove these branches?', ["By continuing, the above branches will be #{App::Terminal::format_action('removed permanently')} both #{App::Terminal::format_highlight('locally & remotely')}!"], 'Are you absolutely sure you want to continue?', false)
57
+ App::Terminal::abort(nil, nil, true, false)
68
58
  end
69
59
 
70
- repo_cd = Brightpearl::Config.param(Brightpearl::Config::WORKSTATION_PATH_TO_BP_CODE)
71
- repo_db = Brightpearl::Config.param(Brightpearl::Config::WORKSTATION_PATH_TO_BP_DB)
60
+ repo_cd = App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_CODE)
61
+ repo_db = App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_DB)
72
62
 
73
63
  branch_count = 0
74
64
 
75
65
  fnl_branches_cd.each do |branch|
76
- branch_name = branch[:"#{Brightpearl::Git::REFNAME}"]
77
- commands = []
78
- if @opts[:scanLocal]
79
- commands << "git branch -D #{branch_name}"
80
- else
66
+ branch_name = branch[:"#{App::Git::REFNAME}"]
67
+ unless branch_name == App::Git::MASTER
68
+ commands = []
81
69
  commands << "git branch --unset-upstream #{branch_name}"
82
- commands << "git push origin --delete #{branch_name}"
70
+ commands << "git branch -D #{branch_name}"
71
+ commands << "git push origin --delete #{branch_name}" unless release_branch(branch_name)
72
+ App::Terminal::command(commands, repo_cd)
73
+ branch_count = branch_count + 1
83
74
  end
84
- Brightpearl::Terminal::command(commands, repo_cd)
85
- branch_count = branch_count + 1
86
75
  end
87
76
 
88
77
  fnl_branches_db.each do |branch|
89
- branch_name = branch[:"#{Brightpearl::Git::REFNAME}"]
90
- commands = []
91
- if @opts[:scanLocal]
92
- commands << "git branch -D #{branch_name}"
93
- else
78
+ branch_name = branch[:"#{App::Git::REFNAME}"]
79
+ unless branch_name == App::Git::MASTER
80
+ commands = []
94
81
  commands << "git branch --unset-upstream #{branch_name}"
95
- commands << "git push origin --delete #{branch_name}"
82
+ commands << "git branch -D #{branch_name}"
83
+ commands << "git push origin --delete #{branch_name}" unless release_branch(branch_name)
84
+ App::Terminal::command(commands, repo_db)
85
+ branch_count = branch_count + 1
96
86
  end
97
- Brightpearl::Terminal::command(commands, repo_db)
98
- branch_count = branch_count + 1
99
87
  end
100
88
 
101
- Brightpearl::Terminal::success("#{Brightpearl::Terminal::format_highlight(branch_count)} branches successfully #{Brightpearl::Terminal::format_action('removed')}")
102
-
89
+ App::Terminal::success("#{App::Terminal::format_highlight(branch_count)} branches successfully #{App::Terminal::format_action('removed')}")
103
90
  end
104
91
 
105
92
  private
106
93
 
94
+ def release_branch(branch)
95
+ branch =~ /release-(\d){1,3}.(\d){1,3}.(\d){1,3}-(\d){4}/i
96
+ end
97
+
107
98
  # Gets all (remote) branches where last commit was longer than 1 month ago and committer is CONFIG::GIT_USERNAME
108
99
  # @return Array
109
100
  def get_historic_branches
110
101
 
111
- committer_name = Brightpearl::Config.param(Brightpearl::Config::GIT_USERNAME)
112
102
  date_1_month_ago = DateTime.now << 1
113
103
 
114
104
  fnl_branches_cd = []
115
105
  fnl_branches_db = []
106
+ all_branches_db = []
116
107
 
117
- if @opts[:scanRemote]
118
- repos = @git.get_remote_branches(Brightpearl::Git::SORT_DATE)
119
- else
120
- repos = @git.get_local_branches(Brightpearl::Git::SORT_DATE)
121
- end
122
-
123
- repos[0].each do |branch|
124
- unless branch[:"#{Brightpearl::Git::REFNAME}"].match(Brightpearl::Git::RELEASE_BRANCH_REGEX) || branch[:"#{Brightpearl::Git::COMMITTER_DATE}"] > date_1_month_ago
125
- if branch[:"#{Brightpearl::Git::COMMITTER_NAME}"] == committer_name && @opts[:anyName] == false
126
- fnl_branches_cd << branch
127
- elsif @opts[:anyName] == true
128
- fnl_branches_cd << branch
129
- end
108
+ repos = @git.get_local_branches(App::Git::SORT_DATE)
109
+ repos[1].each do |branch|
110
+ all_branches_db << branch[:"#{App::Git::REFNAME}"]
111
+ if branch[:"#{App::Git::COMMITTER_DATE}"] < date_1_month_ago
112
+ fnl_branches_db << branch
130
113
  end
131
114
  end
132
- repos[1].each do |branch|
133
- unless branch[:"#{Brightpearl::Git::REFNAME}"].match(Brightpearl::Git::RELEASE_BRANCH_REGEX) || branch[:"#{Brightpearl::Git::COMMITTER_DATE}"] > date_1_month_ago
134
- if branch[:"#{Brightpearl::Git::COMMITTER_NAME}"] == committer_name && @opts[:anyName] == false
135
- fnl_branches_db << branch
136
- elsif @opts[:anyName] == true
115
+ repos[0].each do |branch|
116
+ if branch[:"#{App::Git::COMMITTER_DATE}"] < date_1_month_ago
117
+ fnl_branches_cd << branch
118
+ if all_branches_db.include?(branch[:"#{App::Git::REFNAME}"])
137
119
  fnl_branches_db << branch
138
120
  end
139
121
  end
140
122
  end
141
-
142
123
  fnl_branches_cd.uniq!
143
124
  fnl_branches_db.uniq!
144
125
  return fnl_branches_cd, fnl_branches_db
@@ -146,21 +127,24 @@ module BrightpearlCommand
146
127
 
147
128
  # Gets array of branches which still have commits NOT in master.
148
129
  # @return Array
149
- def get_unsafe_branches(branches_code, branches_db)
130
+ def get_unmerged_commit_branches(branches_code, branches_db)
150
131
  branches_unmerged_commits = []
151
- origin = @opts[:scanLocal] ? '' : 'origin/'
152
132
  branches_code.each do |code_branch|
153
- missing_commits = Brightpearl::Terminal::command_capture("git log #{origin}master..#{origin}#{code_branch[:"#{Brightpearl::Git::REFNAME}"]}", Brightpearl::Config.param(Brightpearl::Config::WORKSTATION_PATH_TO_BP_CODE))
133
+ missing_commits = App::Terminal::command_capture("git log origin/master..origin/#{code_branch[:"#{App::Git::REFNAME}"]}", App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_CODE), true, false)
154
134
  if missing_commits[0] != ''
155
- puts missing_commits
156
- branches_unmerged_commits << code_branch[:"#{Brightpearl::Git::REFNAME}"]
135
+ missing_commits[0].split("\n").each do |line|
136
+ App::Terminal::output(line, App::Terminal::MSG_WARNING)
137
+ end
138
+ branches_unmerged_commits << code_branch[:"#{App::Git::REFNAME}"]
157
139
  end
158
140
  end
159
141
  branches_db.each do |db_branch|
160
- missing_commits = Brightpearl::Terminal::command_capture("git log #{origin}master..#{origin}#{db_branch[:"#{Brightpearl::Git::REFNAME}"]}", Brightpearl::Config.param(Brightpearl::Config::WORKSTATION_PATH_TO_BP_DB))
142
+ missing_commits = App::Terminal::command_capture("git log origin/master..origin/#{db_branch[:"#{App::Git::REFNAME}"]}", App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_DB), true, false)
161
143
  if missing_commits[0] != ''
162
- puts missing_commits
163
- branches_unmerged_commits << db_branch[:"#{Brightpearl::Git::REFNAME}"]
144
+ missing_commits[0].split("\n").each do |line|
145
+ App::Terminal::output(line, App::Terminal::MSG_WARNING)
146
+ end
147
+ branches_unmerged_commits << db_branch[:"#{App::Git::REFNAME}"]
164
148
  end
165
149
  end
166
150
  branches_unmerged_commits.uniq!
@@ -171,20 +155,15 @@ module BrightpearlCommand
171
155
  # Gets final array of branches which are safe to delete.
172
156
  # @return Array
173
157
  def get_final_branches(branches_code, branches_db, umc_branches)
174
-
175
- puts branches_code
176
- puts umc_branches
177
- exit
178
-
179
158
  fnl_branches_cd = []
180
159
  fnl_branches_db = []
181
160
  branches_code.each do |branch|
182
- unless umc_branches.include?(branch[:"#{Brightpearl::Git::REFNAME}"])
161
+ unless umc_branches.include?(branch[:"#{App::Git::REFNAME}"])
183
162
  fnl_branches_cd << branch
184
163
  end
185
164
  end
186
165
  branches_db.each do |branch|
187
- unless umc_branches.include?(branch[:"#{Brightpearl::Git::REFNAME}"])
166
+ unless umc_branches.include?(branch[:"#{App::Git::REFNAME}"])
188
167
  fnl_branches_db << branch
189
168
  end
190
169
  end
@@ -1,4 +1,4 @@
1
- module BrightpearlCommand
1
+ module AppCommand
2
2
 
3
3
  class ScriptsColor < ::Convoy::ActionCommand::Base
4
4