brightpearl-cli 1.4.0 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,6 +6,8 @@ module App
6
6
 
7
7
  @git = git.nil? ? App::Git.new : git
8
8
 
9
+ branch_info = @git.branch_data(branch_name)
10
+
9
11
  App::Terminal::output("Must check that branch is up-to-date with it's remote counter-part, otherwise DO NOT delete!", App::Terminal::MSG_TODO)
10
12
  App::Terminal::output('Must check branch even exists.', App::Terminal::MSG_TODO)
11
13
 
@@ -16,12 +18,20 @@ module App
16
18
  end
17
19
 
18
20
  @git.repo_loop.each do |repo_dir|
19
- commands = []
20
21
  if @git.current_branch_for_repo(repo_dir) == branch_name
21
- commands << 'git checkout master'
22
+ App::Terminal::command("git checkout #{App::Git::MASTER}", repo_dir)
23
+ end
24
+ if (repo_dir == App::Config.param(ConfigUnique::WORKSTATION_PATH_TO_BP_CODE) && branch_info[0][:"#{App::Git::BRANCH_EXISTS_LOCALLY}"]) || (repo_dir == App::Config.param(ConfigUnique::WORKSTATION_PATH_TO_BP_CODE) && branch_info[0][:"#{App::Git::BRANCH_EXISTS_LOCALLY}"])
25
+ commands = [
26
+ "git branch --unset-upstream #{branch_name}",
27
+ "git branch -d #{branch_name}"
28
+ ]
29
+ results = App::Terminal::command(commands, repo_dir)
30
+ handle_results_1(branch_name, repo_dir, results)
31
+ else
32
+ App::Terminal::output("Skipping #{App::Terminal::format_directory(@git.get_repo_shorthand(repo_dir))} because branch #{App::Terminal::format_branch(branch_name)} doesn't exist there.", App::Terminal::MSG_WARNING)
22
33
  end
23
- commands << "git branch -d #{branch_name}"
24
- App::Terminal::command_capture(commands, repo_dir)
34
+
25
35
  end
26
36
 
27
37
  App::Terminal::success('Branch deleted', "Successfully #{App::Terminal::format_highlight('locally')} #{App::Terminal::format_action('deleted')} branch #{App::Terminal::format_branch(branch_name)}")
@@ -45,11 +55,15 @@ module App
45
55
  puts "Branch \x1B[32m[#{branch_name}]\x1B[0m not found in: \x1B[33m#{repo_dir}\x1B[0m. Aborting \x1B[35mREMOTE DELETE\x1B[0m for this repo."
46
56
  next
47
57
  end
48
- commands = [
49
- "git branch --unset-upstream #{branch_name}",
50
- "git push origin --delete #{branch_name}",
51
- ]
52
- App::Terminal::command_capture(commands, repo_dir)
58
+
59
+ # This is hacky (but no time) !
60
+ results = App::Terminal::command("git branch --unset-upstream #{branch_name}", repo_dir)
61
+ results[1] = true
62
+ handle_results_1(branch_name, repo_dir, results)
63
+
64
+ results = App::Terminal::command("git push origin --delete #{branch_name}", repo_dir)
65
+ handle_results_2(branch_name, repo_dir, results)
66
+
53
67
  end
54
68
 
55
69
  App::Terminal::success('Branch deleted', "Successfully #{App::Terminal::format_highlight('remotely')} #{App::Terminal::format_action('deleted')} branch #{App::Terminal::format_branch(branch_name)}")
@@ -70,20 +84,48 @@ module App
70
84
  end
71
85
 
72
86
  @git.repo_loop.each do |repo_dir|
73
- commands = []
74
87
  if @git.current_branch_for_repo(repo_dir) == branch_name
75
- commands << 'git checkout master'
88
+ App::Terminal::command("git checkout #{App::Git::MASTER}", repo_dir)
76
89
  end
77
- commands << "git branch -d #{branch_name}"
78
- commands << "git branch --unset-upstream #{branch_name}"
79
- commands << "git push origin --delete #{branch_name}"
80
- App::Terminal::command_capture(commands, repo_dir)
90
+
91
+ commands = [
92
+ "git branch --unset-upstream #{branch_name}",
93
+ "git branch -d #{branch_name}"
94
+ ]
95
+ results = App::Terminal::command(commands, repo_dir)
96
+ handle_results_1(branch_name, repo_dir, results)
97
+
98
+ commands = [
99
+ "git push origin --delete #{branch_name}"
100
+ ]
101
+ results = App::Terminal::command(commands, repo_dir)
102
+ handle_results_2(branch_name, repo_dir, results)
103
+
81
104
  end
82
105
 
83
106
  App::Terminal::success('Branch deleted', "Successfully #{App::Terminal::format_highlight('locally')} and #{App::Terminal::format_highlight('remotely')} #{App::Terminal::format_action('deleted')} branch #{App::Terminal::format_branch(branch_name)}")
84
107
 
85
108
  end
86
109
 
110
+ private
111
+
112
+ def self.handle_results_1(branch_name, repo_dir, results)
113
+ unless results[0]
114
+ App::Terminal::output("The branch #{App::Terminal::format_branch(branch_name)} in #{App::Terminal::format_directory(@git.get_repo_shorthand(repo_dir))} has #{App::Terminal::format_highlight('no upstream information')}.", App::Terminal::MSG_WARNING)
115
+ end
116
+ unless results[1]
117
+ if App::Terminal::prompt_yes_no("The branch #{App::Terminal::format_branch(branch_name)} in #{App::Terminal::format_directory(@git.get_repo_shorthand(repo_dir))} is #{App::Terminal::format_invalid('not fully merged!', true)}", nil, "Are you #{App::Terminal::format_action('absolutely sure')}\x1B[38;5;89m you want to delete it?");
118
+ App::Terminal::command("git branch -D #{branch_name}", repo_dir)
119
+ end
120
+ end
121
+ end
122
+
123
+ def self.handle_results_2(branch_name, repo_dir, results)
124
+ unless results[0]
125
+ App::Terminal::output("#{App::Terminal::format_branch(branch_name)} in #{App::Terminal::format_directory(@git.get_repo_shorthand(repo_dir))} has #{App::Terminal::format_invalid('no remote branch to delete')}.", App::Terminal::MSG_WARNING)
126
+ end
127
+ end
128
+
87
129
  end
88
130
 
89
131
  end
data/lib/core/mysql.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'mysql'
1
+ require 'mysql2'
2
2
 
3
3
  module App
4
4
 
@@ -16,11 +16,11 @@ module App
16
16
  def self.vm(schema = DEFAULT_VM_SCHEMA)
17
17
 
18
18
  if @vm_connection[schema].nil?
19
- @vm_connection[schema] = Mysql.new(
20
- App::Config.param(App::Config::VM_IP),
21
- App::Config.param(App::Config::VM_MYSQL_USER),
22
- App::Config.param(App::Config::VM_MYSQL_PASSWORD),
23
- schema
19
+ @vm_connection[schema] = Mysql2::Client.new(
20
+ :host => App::Config.param(App::Config::VM_IP),
21
+ :username => App::Config.param(App::Config::VM_MYSQL_USER),
22
+ :password => App::Config.param(App::Config::VM_MYSQL_PASSWORD),
23
+ :database => schema
24
24
  )
25
25
  end
26
26
  @vm_connection[schema]
@@ -38,11 +38,11 @@ module App
38
38
  if host.nil? || user.nil? || pass.nil? || host == '' || user == '' || pass == ''
39
39
  App::Terminal::error('EC2 access data not found', ["The command you're trying to run requires access to an EC2 database.", "In order for this to work you will need valid #{App::Terminal::format_highlight('access data')}.", "Please speak to #{App::Terminal::format_highlight('Albert')} (or team Raptor) for more info."], true)
40
40
  end
41
- @ec2_connection = Mysql.new(
42
- encrypter.decrypt(host),
43
- encrypter.decrypt(user),
44
- encrypter.decrypt(pass),
45
- schema
41
+ @ec2_connection = Mysql2::Client.new(
42
+ :host => encrypter.decrypt(host),
43
+ :username => encrypter.decrypt(user),
44
+ :password => encrypter.decrypt(pass),
45
+ :database => schema
46
46
  )
47
47
  end
48
48
  @ec2_connection
@@ -52,7 +52,7 @@ module App
52
52
  def self.get_random_customer_id
53
53
  unless @ids_customers.any?
54
54
  customers = App::MySQL::vm.query('SELECT customers_id FROM customers ORDER BY customers_id DESC LIMIT 100')
55
- customers.each_hash do |row|
55
+ customers.each do |row|
56
56
  @ids_customers << row['customers_id']
57
57
  end
58
58
  end
@@ -62,7 +62,7 @@ module App
62
62
  def self.get_random_shipping_id
63
63
  unless @ids_shipping.any?
64
64
  ship_methods = App::MySQL::vm.query('SELECT ship_method_id FROM ship_methods ORDER BY ship_method_id DESC LIMIT 100')
65
- ship_methods.each_hash do |row|
65
+ ship_methods.each do |row|
66
66
  @ids_shipping << row['ship_method_id']
67
67
  end
68
68
  end
data/lib/core/pom.rb CHANGED
@@ -2,11 +2,6 @@ module App
2
2
 
3
3
  class Pom
4
4
 
5
- # Initialise credentials
6
- # @return void
7
- def initialize
8
- end
9
-
10
5
  # Retrieves list of pom.xml files which need to be un-snapshotted
11
6
  # @return Array
12
7
  def self.get_files_to_change
@@ -66,18 +61,29 @@ module App
66
61
  File.open(filename, 'w') { |file| file.puts contents_new }
67
62
  end
68
63
 
64
+ red_versions = []
65
+ green_versions = []
66
+
69
67
  diff_result = App::Terminal::command_capture('git diff | grep "+ \|- "', App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_CODE))
70
68
  puts
71
69
  diff_result[0].split("\n").each do |line|
72
70
  if line[0] == '+'
73
71
  puts " \x1B[38;5;46m#{line.gsub(' ', '')}\x1B[0m"
72
+ green_versions << get_version_from_line(line)
74
73
  else
75
74
  puts " \x1B[38;5;196m#{line.gsub(' ', '')}\x1B[0m"
75
+ red_versions << get_version_from_line(line)
76
76
  end
77
77
  end
78
78
  puts
79
79
 
80
- App::Terminal::command(['git add .', 'git status'], App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_CODE))
80
+ if red_versions != green_versions
81
+ unless App::Terminal::prompt_yes_no('POM version conflict occurred', ['Unable to successfully Un-snapshot POMs.', 'Please fix the POM versions before continuing.'], 'POMs fixed and ready to continue?')
82
+ App::Terminal::abort(nil, nil, true, false)
83
+ end
84
+ end
85
+
86
+ App::Terminal::command_capture(['git add .', 'git status'], App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_CODE))
81
87
 
82
88
  # Figure out the commit message.
83
89
  git = App::Git.new
@@ -87,25 +93,37 @@ module App
87
93
  else
88
94
  jira_number = '0000'
89
95
  end
90
- commit_message = "BP-#{jira_number} Updated POM tags on #{current_branch_code_repo}."
91
96
 
92
- unless current_branch_code_repo == App::Git::MASTER
97
+ if current_branch_code_repo == App::Git::MASTER
98
+ commit_message = "BP-#{jira_number} Removed POM tags."
99
+ else
100
+ commit_message = "BP-#{jira_number} Updated POM tags on #{current_branch_code_repo}."
101
+ end
93
102
 
94
- if App::Terminal::prompt_yes_no('Commit to GIT', ["This will commit your changes to GIT with message: #{App::Terminal::format_highlight(commit_message)}"])
95
- App::Terminal::command(["git commit -m '#{commit_message.gsub("'", "\\'")}'"], App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_CODE))
96
- else
97
- App::Terminal::info('Un-snapshotting complete', "Please note that your changes #{App::Terminal::format_highlight('HAVE NOT')} been #{App::Terminal::format_action('committed')} to Git.", false)
98
- return
99
- end
103
+ git = App::Git.new
100
104
 
101
- if App::Terminal::prompt_yes_no('Push changes to origin')
102
- App::Terminal::command('git push', App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_CODE))
103
- App::Terminal::info('Un-snapshotting complete', "Your POMs have been un-snapshotted, the changes #{App::Terminal::format_action('committed')} to Git and #{App::Terminal::format_action('pushed')} to origin.")
104
- else
105
- App::Terminal::info('Un-snapshotting complete', ["Your POMs have been un-snapshotted and the changes #{App::Terminal::format_action('committed')} to Git.", 'However, nothing has been pushed to origin. You will need to do this manually.'], false)
106
- end
107
- else
105
+ if git.current_branch_for_repo(App::Config.param(ConfigUnique::WORKSTATION_PATH_TO_BP_CODE)) == App::Git::MASTER
108
106
  App::Terminal::info('Un-snapshotting complete', ["Your POMs have been un-snapshotted. However, nothing has been committed to Git or pushed to origin because you are on #{App::Git::MASTER}.", 'You will need to do this manually.'], false)
107
+ else
108
+
109
+ if git.changes_exist(App::Config.param(ConfigUnique::WORKSTATION_PATH_TO_BP_CODE))
110
+
111
+ if App::Terminal::prompt_yes_no('Commit to GIT', ["This will commit your changes to GIT with message: #{App::Terminal::format_highlight(commit_message)}"])
112
+ App::Terminal::command(["git commit -m '#{commit_message.gsub("'", "\\'")}'"], App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_CODE))
113
+ else
114
+ App::Terminal::info('Un-snapshotting complete', "Please note that your changes #{App::Terminal::format_highlight('HAVE NOT')} been #{App::Terminal::format_action('committed')} to Git.", false)
115
+ return
116
+ end
117
+
118
+ if App::Terminal::prompt_yes_no('Push changes to origin')
119
+ App::Terminal::command('git push', App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_CODE))
120
+ App::Terminal::info('Un-snapshotting complete', "Your POMs have been un-snapshotted, the changes #{App::Terminal::format_action('committed')} to Git and #{App::Terminal::format_action('pushed')} to origin.")
121
+ else
122
+ App::Terminal::info('Un-snapshotting complete', ["Your POMs have been un-snapshotted and the changes #{App::Terminal::format_action('committed')} to Git.", 'However, nothing has been pushed to origin. You will need to do this manually.'], false)
123
+ end
124
+
125
+ end
126
+
109
127
  end
110
128
 
111
129
  end
@@ -124,6 +142,11 @@ module App
124
142
 
125
143
  end
126
144
 
145
+ def self.get_version_from_line(line)
146
+ version = line.match(/>\d{1,2}.\d{1,2}.\d{1,2}-/)
147
+ version[0].gsub('>', '').gsub('-', '')
148
+ end
149
+
127
150
  end
128
151
 
129
152
  end
@@ -0,0 +1,24 @@
1
+ module App
2
+
3
+ class SqlUpdate
4
+
5
+ def self.run_sql_update
6
+
7
+ unless App::Terminal::prompt_yes_no("You're about to run the SQL update script", ["Please note this script is still in #{App::Terminal::format_highlight('BETA')} and will only work under certain (assumed) circumstances."])
8
+ App::Terminal::abort(nil, nil, true, false)
9
+ end
10
+
11
+ @git = App::Git::new
12
+
13
+ App::Terminal::output('Checking that both your repositories are on the same branch')
14
+ @git.check_for_same_branch(App::Git::SAME_BRANCH_ERROR)
15
+
16
+ branch_number = @git.current_branch_for_repo(App::Config.param(ConfigUnique::WORKSTATION_PATH_TO_BP_DB))
17
+
18
+ puts branch_number
19
+
20
+ end
21
+
22
+ end
23
+
24
+ end
data/lib/core/terminal.rb CHANGED
@@ -123,7 +123,7 @@ module App
123
123
  if preceding_blank_line
124
124
  puts
125
125
  end
126
- puts " \x1B[48;5;27m Message \x1B[0m \xe2\x86\x92 #{title}"
126
+ puts " \x1B[48;5;240m Message \x1B[0m \xe2\x86\x92 #{title}"
127
127
  parse_messages(message)
128
128
  end
129
129
 
@@ -136,7 +136,7 @@ module App
136
136
  if preceding_blank_line
137
137
  puts
138
138
  end
139
- puts " \x1B[48;5;34m Success \x1B[0m \xe2\x86\x92 #{title}"
139
+ puts " \x1B[48;5;12m Success \x1B[0m \xe2\x86\x92 #{title}"
140
140
  parse_messages(message)
141
141
  end
142
142
 
@@ -302,10 +302,11 @@ module App
302
302
  end
303
303
  table(:border => false) do
304
304
  messages.each do |line|
305
- line.gsub! "\x1B[0m", "\x1B[38;5;240m" unless line.nil?
305
+ new_line = line
306
+ new_line = line.gsub("\x1B[0m", "\x1B[38;5;240m") unless line.nil?
306
307
  row do
307
308
  column('', :align => 'left', :width => 4)
308
- column("\x1B[38;5;240m#{line}\x1B[0m", :align => 'left', :width => 180)
309
+ column("\x1B[38;5;240m#{new_line}\x1B[0m", :align => 'left', :width => 180)
309
310
  end
310
311
  end
311
312
  end
@@ -34,8 +34,6 @@ module App
34
34
  file.close
35
35
  }
36
36
 
37
- add_file_to_git(full_path_and_file)
38
-
39
37
  rescue Exception => e
40
38
 
41
39
  App::Terminal::error('Something went wrong', "#{e.message}", true)
@@ -81,12 +79,6 @@ module App
81
79
  files
82
80
  end
83
81
 
84
- def self.add_file_to_git(full_path_and_file)
85
-
86
- App::Terminal::error('Must program add_file_to_git', "#{full_path_and_file}", true)
87
-
88
- end
89
-
90
82
  end
91
83
 
92
84
  end
data/lib/core/vm.rb ADDED
@@ -0,0 +1,62 @@
1
+ module App
2
+
3
+ class VM
4
+
5
+ def self.run_on_vm(script_name, args = [])
6
+
7
+ unless args.is_a? Array
8
+ raise RuntimeError, 'args (to run_on_vm) must be an Array'
9
+ end
10
+
11
+ script_name_vm = "#{App::Config.param(ConfigUnique::VM_USER)}-#{script_name}"
12
+
13
+ scripts = get_all_scripts.keys
14
+ unless scripts.include?(script_name)
15
+ App::Terminal::error("Script doesn't exist: #{App::Terminal::format_invalid(script_name)}", nil, true)
16
+ end
17
+
18
+ commands = [
19
+ "scp #{App::Enum::get_base_path}/vm-scripts/#{script_name} #{App::Config.param(ConfigUnique::VM_USER)}@#{App::Config.param(ConfigUnique::VM_IP)}:/tmp/#{script_name_vm}",
20
+ ]
21
+
22
+ App::Terminal::command(commands, nil, false, false)
23
+
24
+ command("chmod 0755 /tmp/#{script_name_vm}")
25
+ command("/tmp/#{script_name_vm} #{args.join(' ')}")
26
+ command("rm /tmp/#{script_name_vm}")
27
+
28
+ end
29
+
30
+ # Runs a series of commands on the VM.
31
+ # @return void
32
+ def self.command(commands, verbose = true)
33
+ unless commands.is_a?(Array)
34
+ commands = [commands]
35
+ end
36
+ if commands.any?
37
+ commands.each do |command|
38
+ if verbose
39
+ puts "\x1B[48;5;136m Executing \x1B[0m \x1B[0m\xe2\x86\x92\x1B[0m #{App::Terminal::format_command("#{command}")}"
40
+ end
41
+ system("sshpass -p#{App::Config.param(ConfigUnique::VM_USER)} ssh #{App::Config.param(ConfigUnique::VM_USER)}@#{App::Config.param(ConfigUnique::VM_IP)} -t \"#{command}\"")
42
+ end
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ # Returns all script files as hash, IE: {'sql-updates' => '/Library/Ruby/Gems/2.0.0/gems/brightpearl-cli-1.4.0/vm-scripts/sql-updates.sh'}
49
+ # @return Hash
50
+
51
+ def self.get_all_scripts
52
+ return_hash = {}
53
+ all_scripts = App::UtilsFiles::get_files_in_dir("#{App::Enum::get_base_path}/vm-scripts")
54
+ all_scripts.each do |file|
55
+ return_hash[File.basename(file)] = file
56
+ end
57
+ return_hash
58
+ end
59
+
60
+ end
61
+
62
+ end
@@ -1,5 +1,4 @@
1
1
  require 'rest_client'
2
- require 'mysql'
3
2
  require 'json'
4
3
 
5
4
  module AppCommand
data/lib/routes/fix.rb CHANGED
@@ -10,6 +10,9 @@ module AppCommand
10
10
  @mysql_app = App::MySQL::vm
11
11
  @mysql_ses = App::MySQL::vm('_session')
12
12
 
13
+ @sql_index_start = nil
14
+ @sql_index_end = nil
15
+
13
16
  opts_validate
14
17
  opts_routing
15
18
 
@@ -17,33 +20,55 @@ module AppCommand
17
20
 
18
21
  def opts_validate
19
22
 
23
+ if @opts[:sql_updates]
24
+ unless @args.any?
25
+ App::Terminal::error('Must specify a SQL update to run from', "For example, if the #{App::Terminal::format_highlight('current update fail')} happened at #{App::Terminal::format_directory('0306.sql')}, type \xe2\x86\x92 #{App::Terminal::format_action('306')}", true)
26
+ end
27
+ if @args[0] =~ /\A0?\d{3}\z/i
28
+ @sql_index_start = @args[0].to_i
29
+ sql_files = App::UtilsFiles::get_files_in_dir("#{App::Config.param(ConfigUnique::WORKSTATION_PATH_TO_BP_DB)}/brightpearl/structure")
30
+ @sql_index_end = File.basename(sql_files[sql_files.length - 1], '.sql').to_i
31
+ if @sql_index_start > @sql_index_end
32
+ App::Terminal::error("Invalid SQL update index: #{App::Terminal::format_invalid(@args[0])}", "The most recent SQL update is currently: #{App::Terminal::format_directory("0#{@sql_index_end}.sql")}", true)
33
+ end
34
+ else
35
+ App::Terminal::error("Invalid SQL update index: #{App::Terminal::format_invalid(@args[0])}", "The SQL update index you supplied does not match the required format (IE: #{App::Terminal::format_highlight('306')} or #{App::Terminal::format_highlight('0306')}).", true)
36
+ end
37
+ end
38
+
20
39
  end
21
40
 
22
41
  def opts_routing
23
42
 
24
- if @opts[:clear_sessions]
43
+ if @opts[:login_sessions]
25
44
  clear_sessions
45
+ elsif @opts[:sql_updates]
46
+ sql_updates
26
47
  else
27
48
  system('bp f -h')
28
49
  end
29
50
 
30
51
  end
31
52
 
53
+ # Fixes problem with Login (when sessions get screwed up)
54
+ # @return void
32
55
  def clear_sessions
33
56
  App::Terminal::info('Attempting to clear all sessions from DB..')
34
-
35
57
  App::Terminal::output('DELETE FROM _session.session;')
36
58
  @mysql_ses.query('DELETE FROM session;')
37
-
38
59
  App::Terminal::output('DELETE FROM app.session_to_licence_type;')
39
60
  @mysql_app.query('DELETE FROM session_to_licence_type;')
40
-
41
61
  App::Terminal::output('DELETE FROM app.sessions;')
42
62
  @mysql_app.query('DELETE FROM sessions;')
43
-
44
63
  puts
45
64
  end
46
65
 
66
+ # Runs all SQL updates from a specified index
67
+ # @return void
68
+ def sql_updates
69
+ App::VM::run_on_vm('sql-updates.sh', [@sql_index_start, @sql_index_end + 1])
70
+ end
71
+
47
72
  end
48
73
 
49
74
  end