brightpearl-cli 1.9.0 → 1.10.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 239f8202d6affc513d68106c3bdd67e6486fa229
4
- data.tar.gz: f627b421f9bf49db7d6ea91116931818fcf3f559
3
+ metadata.gz: ae4119f560e1d2c52826ff48b55b943f5a45b2e2
4
+ data.tar.gz: 36e6d9e050013d1ea168c3175e86b19579047d49
5
5
  SHA512:
6
- metadata.gz: c157acadce1ad0488cb11e240f8c0930bd7cc28225d51ab7562a606aefdf228f6352fc05dcb7f20a7c9ee990be773d44a71cd0e22a26a41999ee6ab3ab92038e
7
- data.tar.gz: aca605539273863f19ad9a01e2b5e942232f027e4511bdcf5153f9652776cd126ac0c48437bbfde34305b83d957084907fe9ee24cafd08205aced7e8b551e899
6
+ metadata.gz: f46eee364d52415d3dac658306739d24632c6782e65537fdb3a3e7ce321dd997a2a1211fa5e1c1dd8ad14a0ad7b2e628417d876c98d06eab40d5ce3fa4c493db
7
+ data.tar.gz: b555efa6bdded5ba86e2151532985080483f8c38528979b5820ad034dbb02083f46e125ff9e06bacbc7e49a66d4a35207326a54e612841e633763fd4fa667967
@@ -47,6 +47,7 @@ require 'core/utils_files'
47
47
  require 'core/utils_routes'
48
48
  require 'core/utils_strings'
49
49
  require 'routes/setup'
50
+ require 'routes/ssh'
50
51
 
51
52
  module App
52
53
 
@@ -58,17 +59,17 @@ module App
58
59
  App::Config.initialize
59
60
  end
60
61
 
61
- Convoy::App.create do |brightpearl|
62
+ Convoy::App.create do |app|
62
63
 
63
64
  # COLOR OF TITLE TEXT
64
65
  title_color = 255
65
66
 
66
- brightpearl.version VERSION
67
- brightpearl.summary "\x1B[38;5;166mBRIGHTPEARL-CLI\x1B[0m \x1B[38;5;240m\xe2\x80\x94 BETA\x1B[0m"
68
- brightpearl.description "\x1B[38;5;#{title_color}mA command line utility for Brightpearl developers and QAs.\nUsed for automating daily work flows & completing repetitive tasks quicker with less errors.\nDesigned to work from anywhere on your workstation.\n\nUse #{App::Terminal::format_command('brightpearl')}\x1B[38;5;#{title_color}m or #{App::Terminal::format_command('bp')}\x1B[38;5;#{title_color}m to run.\x1B[0m"
67
+ app.version VERSION
68
+ app.summary "\x1B[38;5;166mBRIGHTPEARL-CLI\x1B[0m \x1B[38;5;240m\xe2\x80\x94 BETA\x1B[0m"
69
+ app.description "\x1B[38;5;#{title_color}mA command line utility for Brightpearl developers and QAs.\nUsed for automating daily work flows & completing repetitive tasks quicker with less errors.\nDesigned to work from anywhere on your workstation.\n\nUse #{App::Terminal::format_command('app')}\x1B[38;5;#{title_color}m or #{App::Terminal::format_command('bp')}\x1B[38;5;#{title_color}m to run.\x1B[0m"
69
70
 
70
71
  # BUILD
71
- brightpearl.command :build, :aliases => [:b] do |build|
72
+ app.command :build, :aliases => [:b] do |build|
72
73
  build.summary 'Build (and deploy) Java services'
73
74
  build.options do |opts|
74
75
  opts.opt :serviceOnly, 'Build service only (default)', :short => '-s', :long => '--service-only', :type => :boolean
@@ -82,7 +83,7 @@ module App
82
83
  end
83
84
 
84
85
  # DUMMY
85
- brightpearl.command :dummy, :aliases => [:d] do |dummy|
86
+ app.command :dummy, :aliases => [:d] do |dummy|
86
87
 
87
88
  dummy.summary 'Insert dummy data into the App'
88
89
 
@@ -109,7 +110,7 @@ module App
109
110
  end
110
111
 
111
112
  # FIX
112
- brightpearl.command :fix, :aliases => [:f] do |fix|
113
+ app.command :fix, :aliases => [:f] do |fix|
113
114
  fix.summary 'Quick fixes for common problems'
114
115
  fix.options do |opts|
115
116
  opts.opt :login_sessions, 'LOGIN - Clear sessions to fix login problem(s)', :short => '-l', :long => '--login-sessions', :type => :boolean
@@ -122,7 +123,7 @@ module App
122
123
 
123
124
  # GIT
124
125
 
125
- brightpearl.command :git, :aliases => [:g] do |git|
126
+ app.command :git, :aliases => [:g] do |git|
126
127
 
127
128
  git.summary 'All git related functionality'
128
129
 
@@ -198,6 +199,7 @@ module App
198
199
  opts.opt :from_file, 'Get branch names from file (1 branch per line)', :short => '-f', :long => '--from-file', :type => :boolean
199
200
  opts.opt :delete_source_branches_local, "Delete all source branches (locally) in #{App::Terminal::format_directory(App::Enum::GIT_MERGE_DEFAULT_FILE)}", :short => '-d', :long => '--delete-local', :type => :boolean
200
201
  opts.opt :delete_source_branches_remote, "Delete all source branches (remotely) in #{App::Terminal::format_directory(App::Enum::GIT_MERGE_DEFAULT_FILE)}", :short => '-D', :long => '--delete-remote', :type => :boolean
202
+ opts.opt :sanity_check, 'Run sanity check. Submit source/target branches same as you would during a merge.', :short => '-s', :long => '--sanity-check', :type => :boolean
201
203
  end
202
204
  git_merge.action do |opts, args|
203
205
  AppCommand::GitMerge.new(opts, args).execute
@@ -247,7 +249,7 @@ module App
247
249
  end
248
250
 
249
251
  # JIRA
250
- brightpearl.command :jira, :aliases => [:j] do |jira|
252
+ app.command :jira, :aliases => [:j] do |jira|
251
253
  jira.summary 'Access the Jira API'
252
254
 
253
255
  # JIRA CARD
@@ -265,7 +267,7 @@ module App
265
267
  end
266
268
 
267
269
  # RESET
268
- brightpearl.command :reset, :aliases => [:R] do |reset|
270
+ app.command :reset, :aliases => [:R] do |reset|
269
271
  reset.summary 'Reset various things within the App'
270
272
  reset.options do |opts|
271
273
  opts.opt :fitnesseDump, 'Reset the Fitnesse Dump on your VM', :short => '-f', :long => '--fitnesse-dump', :type => :boolean
@@ -276,7 +278,7 @@ module App
276
278
  end
277
279
 
278
280
  # PRODUCTION
279
- brightpearl.command :production, :aliases => [:p] do |production|
281
+ app.command :production, :aliases => [:p] do |production|
280
282
 
281
283
  production.summary 'Everything to do with production servers'
282
284
 
@@ -303,7 +305,7 @@ module App
303
305
  end
304
306
 
305
307
  # REVIEW
306
- brightpearl.command :review, :aliases => [:r] do |review|
308
+ app.command :review, :aliases => [:r] do |review|
307
309
  review.summary 'Perform a quick code review'
308
310
  review.action do |opts, args|
309
311
  AppCommand::Review.new(opts, args).execute
@@ -311,7 +313,7 @@ module App
311
313
  end
312
314
 
313
315
  # SCRIPTS
314
- brightpearl.command :scripts, :aliases => [:s] do |scripts|
316
+ app.command :scripts, :aliases => [:s] do |scripts|
315
317
 
316
318
  scripts.summary 'Quick & dirty scripts'
317
319
 
@@ -378,8 +380,16 @@ module App
378
380
 
379
381
  end
380
382
 
383
+ # SSH - SSH
384
+ app.command :ssh, :aliases => [:s] do |ssh|
385
+ ssh.summary 'SSH into various stuff.'
386
+ ssh.action do |opts, args|
387
+ AppCommand::SSH.new(opts, args).execute
388
+ end
389
+ end
390
+
381
391
  # TAIL
382
- brightpearl.command :tail, :aliases => [:T] do |tail|
392
+ app.command :tail, :aliases => [:T] do |tail|
383
393
  tail.summary 'Tail various logs (all catalina.out by default)'
384
394
  tail.action do |opts, args|
385
395
  AppCommand::Tail.new(opts, args).execute
@@ -387,7 +397,7 @@ module App
387
397
  end
388
398
 
389
399
  # TEST
390
- brightpearl.command :test, :aliases => [:t] do |test|
400
+ app.command :test, :aliases => [:t] do |test|
391
401
  test.summary 'Run various tests (PHPUnit by default)'
392
402
  test.options do |opts|
393
403
  opts.opt :cucumber, 'Run Cucumber tests', :short => '-c', :long => '--cucumber', :type => :boolean
@@ -402,7 +412,7 @@ module App
402
412
  end
403
413
 
404
414
  # UPDATE
405
- brightpearl.command :update, :aliases => [:u] do |update|
415
+ app.command :update, :aliases => [:u] do |update|
406
416
  update.summary 'Check for updates'
407
417
  update.action do |opts, args|
408
418
  AppCommand::Update.new(opts, args).execute
@@ -410,7 +420,7 @@ module App
410
420
  end
411
421
 
412
422
  # X - SETUP
413
- brightpearl.command :setup, :aliases => [:x] do |setup|
423
+ app.command :setup, :aliases => [:x] do |setup|
414
424
  setup.summary 'Setup your configuration file'
415
425
  setup.action do |opts, args|
416
426
  AppCommand::Setup.new(opts, args).execute
@@ -418,7 +428,7 @@ module App
418
428
  end
419
429
 
420
430
  # BRIGHTPEARL/BP (DEFAULT)
421
- brightpearl.action do
431
+ app.action do
422
432
  system('bp -h')
423
433
  end
424
434
 
data/lib/core/config.rb CHANGED
@@ -97,6 +97,10 @@ module App
97
97
  missing_keys
98
98
  end
99
99
 
100
+ def self.param_exists(param_name)
101
+ @params.has_key?(param_name)
102
+ end
103
+
100
104
  end
101
105
 
102
106
  end
@@ -32,9 +32,6 @@ module ConfigUnique
32
32
  EC2_PASS = 'ec2_pass'
33
33
 
34
34
  def param(param_name)
35
- unless all_available_config_keys.include?(param_name)
36
- App::Terminal::error("#{App::Terminal::format_highlight(param_name)} is not a valid config parameter", true)
37
- end
38
35
  @params[param_name]
39
36
  end
40
37
 
@@ -87,27 +84,4 @@ module ConfigUnique
87
84
  ]
88
85
  end
89
86
 
90
- def all_available_config_keys
91
- [
92
- WORKSTATION_IP,
93
- WORKSTATION_OS,
94
- WORKSTATION_PATH_TO_BP_CODE,
95
- WORKSTATION_PATH_TO_BP_DB,
96
- VM_IP,
97
- VM_USER,
98
- VM_USER_PASSWORD,
99
- VM_ROOT,
100
- VM_ROOT_PASSWORD,
101
- VM_MYSQL_USER,
102
- VM_MYSQL_PASSWORD,
103
- PREFERRED_TEXT_EDITOR,
104
- GIT_USERNAME,
105
- CRYPT_KEY,
106
- CRYPT_HEX,
107
- EC2_HOST,
108
- EC2_USER,
109
- EC2_PASS
110
- ]
111
- end
112
-
113
87
  end
data/lib/core/ebay.rb CHANGED
@@ -2,7 +2,43 @@ module App
2
2
 
3
3
  class Ebay
4
4
 
5
- def initialize(credentials = App::Ebay)
5
+ SANDBOX = 'sandbox'
6
+ SANDBOX_URL = 'https://api.sandbox.ebay.com/ws/api.dll'
7
+
8
+ PRODUCTION = 'production'
9
+ PRODUCTION_URL = 'https://api.ebay.com/ws/api.dll'
10
+
11
+ def initialize(app_key, dev_key, cert_key, runame, api_url, api_token)
12
+
13
+ @app_key = app_key
14
+ @dev_key = dev_key
15
+ @cert_key = cert_key
16
+ @runame = runame
17
+ @api_url = api_url
18
+ @api_token = api_token
19
+
20
+ end
21
+
22
+ # findItemsByKeywordsRequest
23
+ def find(search_term = nil)
24
+
25
+ if search_term.nil?
26
+ raise RuntimeError, 'Search term cannot be nil.'
27
+ end
28
+
29
+ payload = "<?xml version=\"1.0\" encoding=\"utf-8\"?><findItemsByKeywordsRequest xmlns=\"http://www.ebay.com/marketplace/search/v1/services\"><keywords>#{search_term}</keywords></findItemsByKeywordsRequest>"
30
+ headers = {
31
+ 'X-EBAY-SOA-SERVICE-NAME' => 'FindingService',
32
+ 'X-EBAY-SOA-OPERATION-NAME' => 'findItemsByKeywords',
33
+ 'X-EBAY-SOA-SERVICE-VERSION' => '1.13.0',
34
+ 'X-EBAY-SOA-GLOBAL-ID' => 'EBAY-GB',
35
+ 'X-EBAY-SOA-SECURITY-APPNAME' => @app_key,
36
+ 'X-EBAY-SOA-REQUEST-DATA-FORMAT' => 'XML'
37
+ }
38
+
39
+ response = RestClient.post(@api_url, payload, headers)
40
+
41
+ puts response.inspect
6
42
 
7
43
  end
8
44
 
@@ -2,30 +2,44 @@ module App
2
2
 
3
3
  class EbayFactory
4
4
 
5
- DEFAULT_CREDENTIALS = 'nimzo_seller'
5
+ CONFIGURATION_PREFIX = 'ebay_'
6
6
 
7
7
  @credentials = {}
8
8
 
9
- def self.get(credentials = DEFAULT_CREDENTIALS)
9
+ def self.get(sandbox_production = App::Ebay::SANDBOX, api_token = nil)
10
10
 
11
- if @credentials[credentials].nil?
11
+ if api_token.nil?
12
+ raise RuntimeError, 'You must provide an API token.'
13
+ end
12
14
 
13
- # encrypter = Encrypter.new
14
- # host = App::Config.param(App::Config::EC2_HOST)
15
- # user = App::Config.param(App::Config::EC2_USER)
16
- # pass = App::Config.param(App::Config::EC2_PASS)
17
- # if host.nil? || user.nil? || pass.nil? || host == '' || user == '' || pass == ''
18
- # 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)
19
- # end
20
- # @ec2_connection = Mysql2::Client.new(
21
- # :host => encrypter.decrypt(host),
22
- # :username => encrypter.decrypt(user),
23
- # :password => encrypter.decrypt(pass),
24
- # :database => schema
25
- # )
15
+ if api_token =~ /\Aebay_\S+\z/i
16
+ api_token_final = api_token
17
+ else
18
+ api_token_final = "#{CONFIGURATION_PREFIX}#{api_token}"
19
+ end
26
20
 
21
+ if api_token.nil? || App::Config::param_exists(api_token_final) == false
22
+ App::Terminal::error('Invalid API Token', "The #{App::Terminal::format_highlight('config parameter')} #{App::Terminal::format_invalid(api_token_final)} doesn't exist in: #{App::Terminal::format_directory(ConfigUnique::CONFIG_FILE)}", true)
27
23
  end
28
- @credentials[credentials]
24
+
25
+ case sandbox_production
26
+ when App::Ebay::SANDBOX
27
+ app_key = App::Config.param(ConfigUnique::EBAY_SANDBOX_APP)
28
+ dev_key = App::Config.param(ConfigUnique::EBAY_SANDBOX_DEV)
29
+ cert_key = App::Config.param(ConfigUnique::EBAY_SANDBOX_CERT)
30
+ runame = App::Config.param(ConfigUnique::EBAY_SANDBOX_RUNAME)
31
+ api_url = App::Ebay::SANDBOX_URL
32
+ when App::Ebay::PRODUCTION
33
+ app_key = App::Config.param(ConfigUnique::EBAY_PRODUCTION_APP)
34
+ dev_key = App::Config.param(ConfigUnique::EBAY_PRODUCTION_DEV)
35
+ cert_key = App::Config.param(ConfigUnique::EBAY_PRODUCTION_CERT)
36
+ runame = App::Config.param(ConfigUnique::EBAY_PRODUCTION_RUNAME)
37
+ api_url = App::Ebay::PRODUCTION_URL
38
+ else
39
+ raise RuntimeError, "Must specify either '#{App::Ebay::SANDBOX}' or '#{App::Ebay::PRODUCTION}', you passed: #{sandbox_production}"
40
+ end
41
+
42
+ App::Ebay.new(app_key, dev_key, cert_key, runame, api_url, api_token)
29
43
 
30
44
  end
31
45
 
data/lib/core/git.rb CHANGED
@@ -597,16 +597,16 @@ module App
597
597
  case display
598
598
  when SAME_BRANCH_WARNING
599
599
  App::Terminal::warning("You're on #{App::Terminal::format_highlight('2 different branches')}", [
600
- "#{App::Terminal::format_directory(get_repo_shorthand(App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_CODE)))} is on #{App::Terminal::format_branch(branch_code)}",
601
- "#{App::Terminal::format_directory(get_repo_shorthand(App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_DB)))} is on #{App::Terminal::format_branch(branch_db)}"
602
- ])
600
+ "#{App::Terminal::format_directory(get_repo_shorthand(App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_CODE)))} is on #{App::Terminal::format_branch(branch_code)}",
601
+ "#{App::Terminal::format_directory(get_repo_shorthand(App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_DB)))} is on #{App::Terminal::format_branch(branch_db)}"
602
+ ])
603
603
  when SAME_BRANCH_ERROR
604
604
  App::Terminal::error("You're on #{App::Terminal::format_highlight('2 different branches')}", [
605
- "#{App::Terminal::format_directory(get_repo_shorthand(App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_CODE)))} is on #{App::Terminal::format_branch(branch_code)}",
606
- "#{App::Terminal::format_directory(get_repo_shorthand(App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_DB)))} is on #{App::Terminal::format_branch(branch_db)}",
607
- nil,
608
- 'You cannot run this command unless both of your repos are on the same branch.'
609
- ])
605
+ "#{App::Terminal::format_directory(get_repo_shorthand(App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_CODE)))} is on #{App::Terminal::format_branch(branch_code)}",
606
+ "#{App::Terminal::format_directory(get_repo_shorthand(App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_DB)))} is on #{App::Terminal::format_branch(branch_db)}",
607
+ nil,
608
+ 'You cannot run this command unless both of your repos are on the same branch.'
609
+ ])
610
610
  end
611
611
  return false
612
612
  end
@@ -792,7 +792,7 @@ module App
792
792
  possible_branches = []
793
793
  if jira_number =~ /\A\d{4,5}\z/
794
794
  get_all_branches_as_array.each do |possible_branch|
795
- if possible_branch =~ /(bug|bp|feature)-#{jira_number}\z/i
795
+ if possible_branch =~ /#{jira_number}/i
796
796
  # If more than one possible branch exists, IE: bug-14145 & bp-14145
797
797
  if possible_branches.any?
798
798
  App::Terminal::error("More than one possible branch found for jira number: #{App::Terminal::format_highlight(jira_number)}", [App::Terminal::format_branch(possible_branches[0]), App::Terminal::format_branch(possible_branch), nil, "In this case, you must specify the branch name #{App::Terminal::format_highlight('explicitly')}."], true)
@@ -824,6 +824,31 @@ module App
824
824
  changes_exist
825
825
  end
826
826
 
827
+ # Pass the result of App::Terminal::command() and this should do the rest. Bombs out if you don't confirm.
828
+ # @return void
829
+ def check_for_conflicts(result, additional_info = nil)
830
+ final_info = []
831
+ unless additional_info.nil?
832
+ if additional_info.is_a? Array
833
+ additional_info.each do |info|
834
+ final_info << info
835
+ end
836
+ else
837
+ if additional_info.is_a? String
838
+ final_info << additional_info
839
+ else
840
+ raise RuntimeError, "Expected String, got: #{additional_info.class}"
841
+ end
842
+ end
843
+ end
844
+ final_info << "Please #{App::Terminal::format_action('open an IDE')} and resolve your conflicts before continuing."
845
+ if result == false
846
+ unless App::Terminal::prompt_yes_no('Merge conflict occurred', final_info, "Have you #{App::Terminal::format_highlight('resolved your conflicts', true)}\x1B[38;5;89m and #{App::Terminal::format_action('committed')}\x1B[38;5;89m the changes?")
847
+ App::Terminal::abort(nil, nil, true, false)
848
+ end
849
+ end
850
+ end
851
+
827
852
  # Get list of files that have changed between 2 branches
828
853
  # @return Array
829
854
  def get_changed_files(repo_dir, branch_to_compare_to = "origin/#{App::Git::MASTER}")
data/lib/core/terminal.rb CHANGED
@@ -199,8 +199,12 @@ module App
199
199
 
200
200
  # Returns action text in consistent, uniform manner.
201
201
  # @return String
202
- def self.format_highlight(highlighted_text)
203
- "\x1B[38;5;117m#{highlighted_text}\x1B[0m"
202
+ def self.format_highlight(highlighted_text, capitalize = false)
203
+ if capitalize
204
+ return "\x1B[38;5;117m#{highlighted_text.upcase}\x1B[0m"
205
+ else
206
+ return "\x1B[38;5;117m#{highlighted_text}\x1B[0m"
207
+ end
204
208
  end
205
209
 
206
210
  # Returns invalid data in consistent, uniform manner.
@@ -16,15 +16,12 @@ module AppCommand
16
16
  def opts_validate
17
17
 
18
18
  unless @args.any?
19
-
20
19
  if @opts[:branch] || @opts[:branch_origin]
21
20
  App::Terminal::error('You must specify a branch name')
22
21
  else
23
22
  system('bp g co -h')
24
23
  end
25
-
26
24
  exit
27
-
28
25
  end
29
26
 
30
27
  end
@@ -145,14 +142,21 @@ module AppCommand
145
142
  unless branch_data_inner[:"#{App::Git::BRANCH_IS_CURRENT}"]
146
143
  commands << "git checkout #{branch_to_checkout}"
147
144
  end
145
+ App::Terminal::command(commands, repo_dir)
148
146
  if @opts[:update] || @opts[:updatePush]
149
- commands << 'git pull'
150
- commands << "git merge #{App::Git::MASTER} --no-edit"
147
+ commands = [
148
+ 'git pull',
149
+ "git merge #{App::Git::MASTER} --no-edit"
150
+ ]
151
+ results = App::Terminal::command(commands, repo_dir, true, false)
152
+ @git.check_for_conflicts(results[1], "Unable to successfully merge #{App::Terminal::format_branch(App::Git::MASTER)} into #{App::Terminal::format_branch(branch_to_checkout)} on #{App::Terminal::format_directory(@git.get_repo_shorthand(repo_dir))}")
151
153
  end
152
154
  if @opts[:updatePush]
153
- commands << 'git push'
155
+ commands =[
156
+ 'git push'
157
+ ]
158
+ App::Terminal::command(commands, repo_dir, true, false)
154
159
  end
155
- App::Terminal::command(commands, repo_dir)
156
160
  count = count + 1
157
161
  end
158
162
  @git.check_for_same_branch
@@ -23,13 +23,13 @@ module AppCommand
23
23
  end
24
24
 
25
25
  unless @args.any?
26
- unless @opts[:from_file] || @opts[:open_file] || @opts[:delete_source_branches_local] || @opts[:delete_source_branches_remote]
26
+ unless @opts[:from_file] || @opts[:open_file] || @opts[:delete_source_branches_local] || @opts[:delete_source_branches_remote] || @otps[:sanity_check]
27
27
  system('bp g m -h')
28
28
  exit
29
29
  end
30
30
  end
31
31
 
32
- if @args[0] == App::Git::MASTER
32
+ if @args[0] == App::Git::MASTER && !@opts[:from_file]
33
33
  App::Terminal::error('Not allowed', "You cannot merge #{App::Terminal::format_branch(App::Git::MASTER)}\x1B[38;5;240m to #{App::Terminal::format_branch(App::Git::MASTER)}", true)
34
34
  end
35
35
 
@@ -38,9 +38,7 @@ module AppCommand
38
38
  App::Terminal::error('Too many parameters', ["When using the #{App::Terminal::format_flag('f')}\x1B[38;5;240m the system only expects one #{App::Terminal::format_action('optional')}\x1B[38;5;240m parameter \xe2\x80\x94 the target branch.", "The amount of parameters you passed were: #{App::Terminal::format_highlight(@args.length)}"], true)
39
39
  end
40
40
  if @opts[:from_file] != '' && File.file?(App::Enum::GIT_MERGE_DEFAULT_FILE) == false
41
- App::Terminal::error("File not found: #{App::Terminal::format_directory(App::Enum::GIT_MERGE_DEFAULT_FILE)}", [
42
- "To specify multiple #{App::Terminal::format_branch('source-branches')} try running #{App::Terminal::format_command('bp g m -o')} first."
43
- ], true)
41
+ App::Terminal::error("File not found: #{App::Terminal::format_directory(App::Enum::GIT_MERGE_DEFAULT_FILE)}", ["To specify multiple #{App::Terminal::format_branch('source-branches')} try running #{App::Terminal::format_command('bp g m -o')} first."], true)
44
42
  end
45
43
  end
46
44
 
@@ -51,7 +49,10 @@ module AppCommand
51
49
  retrieve_source_branches unless @opts[:open_file]
52
50
  retrieve_target_branches unless @opts[:open_file]
53
51
 
54
- if @opts[:open_file]
52
+ if @opts[:sanity_check]
53
+ sanity_check
54
+ exit
55
+ elsif @opts[:open_file]
55
56
  system("#{App::Config.param(App::Config::PREFERRED_TEXT_EDITOR)} #{App::Enum::GIT_MERGE_DEFAULT_FILE}")
56
57
  exit
57
58
  elsif @opts[:delete_source_branches_local]
@@ -327,14 +328,7 @@ module AppCommand
327
328
 
328
329
  App::Terminal::success('It seems as if everything ran smoothly', "#{@source_branches.count} #{(@source_branches.count) == 1 ? 'branch has' : 'branches have'} been successfully merged to #{App::Terminal::format_branch(@target_branch)}")
329
330
 
330
- # SANITY CHECK SCRIPT
331
- @source_branches.each do |x|
332
- grep_string = x.split('-')
333
- grep_string = "BP-#{grep_string[grep_string.count - 1]}"
334
- puts "\x1B[38;5;39m#{x}\x1B[0m \xe2\x80\x94 (#{grep_string})"
335
- system("cd #{App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_CODE)} && git log | grep '#{grep_string}' --color=auto")
336
- system("cd #{App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_DB)} && git log | grep '#{grep_string}' --color=auto")
337
- end
331
+ sanity_check
338
332
  puts
339
333
 
340
334
  @git.check_for_stash(true)
@@ -367,6 +361,30 @@ module AppCommand
367
361
 
368
362
  end
369
363
 
364
+ def sanity_check
365
+
366
+ App::Terminal::info("Running sanity check against: #{App::Terminal::format_branch(@target_branch)}")
367
+
368
+ @source_branches.each do |source_branch|
369
+
370
+ jira_numbers = source_branch.scan(/\d{4,5}/i)
371
+ if jira_numbers.any?
372
+ jira_numbers.each do |jira_number|
373
+ unless jira_number == ''
374
+ sanity_check_grep(jira_number, source_branch, @target_branch)
375
+ end
376
+
377
+ end
378
+ else
379
+ sanity_check_grep(source_branch, source_branch, @target_branch)
380
+ end
381
+
382
+ end
383
+
384
+ puts
385
+
386
+ end
387
+
370
388
  private
371
389
 
372
390
  def retrieve_source_branches
@@ -385,6 +403,8 @@ module AppCommand
385
403
 
386
404
  @source_branches.uniq!
387
405
 
406
+ return if @opts[:sanity_check]
407
+
388
408
  # If branch(es) was/were specified as '1234' or '12345', this code tries to resolve it automatically as bp-12345/bug-12345/feature-12345
389
409
  branches_to_resolve = {}
390
410
  @source_branches.each do |branch_name|
@@ -402,7 +422,7 @@ module AppCommand
402
422
  end
403
423
  @git.get_all_branches_as_array.each do |possible_branch|
404
424
  branches_to_resolve.keys.each do |branch_to_resolve|
405
- if possible_branch =~ /(bug|bp|feature)-#{branch_to_resolve}\z/i
425
+ if possible_branch =~ /#{branch_to_resolve}/i
406
426
 
407
427
  # If more than one possible branch exists, IE: bug-14145 & bp-14145
408
428
  unless branches_to_resolve[branch_to_resolve] == false
@@ -411,14 +431,16 @@ module AppCommand
411
431
 
412
432
  branches_to_resolve[branch_to_resolve] = possible_branch
413
433
  App::Terminal::output("Resolved branch #{App::Terminal::format_branch(possible_branch)} from jira number: #{App::Terminal::format_highlight(branch_to_resolve)}", App::Terminal::MSG_AUTOMATIC)
434
+
414
435
  end
415
436
  end
416
437
  end
417
438
  branches_to_resolve.each do |branch_to_resolve|
418
- if branch_to_resolve[1] == false
439
+ if branch_to_resolve[1] == false && !@opts[:sanity_check]
419
440
  App::Terminal::error("No branch found for jira number: #{App::Terminal::format_highlight(branch_to_resolve[0])}", ['Please check your input and try again.'], true)
441
+ elsif branch_to_resolve[1] != false
442
+ new_source_branches << branch_to_resolve[1] unless branch_to_resolve[1] == '' || branch_to_resolve[1].nil?
420
443
  end
421
- new_source_branches << branch_to_resolve[1] unless branch_to_resolve[1] == '' || branch_to_resolve[1].nil?
422
444
  end
423
445
  @source_branches = new_source_branches
424
446
  end
@@ -464,6 +486,24 @@ module AppCommand
464
486
  source_branch_text
465
487
  end
466
488
 
489
+ def sanity_check_grep(grep_string, source_branch, target_branch)
490
+
491
+ puts " \x1B[38;5;39m#{source_branch}\x1B[0m \xe2\x80\x94 (#{grep_string})"
492
+ results_cd = App::Terminal::command_capture("git log #{target_branch} | grep '#{grep_string}' --color=auto", App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_CODE), false, false)
493
+ results_db = App::Terminal::command_capture("git log #{target_branch} | grep '#{grep_string}' --color=auto", App::Config.param(App::Config::WORKSTATION_PATH_TO_BP_DB), false, false)
494
+
495
+ results_cd.push(*results_db).each do |block|
496
+ block.split("\n").each do |line|
497
+ if line.strip != ''
498
+ if line =~ /\A\s*bp-\d{4,5}/i
499
+ puts " #{line.gsub(/#{grep_string}/i, "\x1B[38;5;196m#{grep_string}\x1B[0m")}"
500
+ end
501
+ end
502
+ end
503
+ end
504
+
505
+ end
506
+
467
507
  end
468
508
 
469
509
  end
@@ -3,10 +3,14 @@ module AppCommand
3
3
  class GitUpdate < ::Convoy::ActionCommand::Base
4
4
 
5
5
  def execute
6
- @git = App::Git.new
6
+
7
7
  @opts = command_options
8
+ @args = arguments
9
+ @git = App::Git.new
10
+
8
11
  opts_validate
9
12
  opts_routing
13
+
10
14
  end
11
15
 
12
16
  def opts_validate
@@ -39,11 +43,7 @@ module AppCommand
39
43
  if results[3] == false
40
44
  @git.ask_to_setup_remote_tracking(current_branch, repo_dir)
41
45
  end
42
- if results[4] == false
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
46
- end
46
+ @git.check_for_conflicts(results[4], "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))}")
47
47
  end
48
48
  if @opts[:push] && current_branch != App::Git::MASTER
49
49
  App::Terminal::command("git push origin #{current_branch}", repo_dir)
@@ -7,15 +7,6 @@ module AppCommand
7
7
 
8
8
  include Columnist
9
9
 
10
- LOG_URI_EUW1 = 'http://ec2-54-73-66-114.eu-west-1.compute.amazonaws.com:7777/php/php.log'
11
- LOG_URI_EUW2 = 'http://ec2-54-73-26-152.eu-west-1.compute.amazonaws.com:7777/php/php.log'
12
- LOG_URI_USE1 = 'http://ec2-174-129-36-164.compute-1.amazonaws.com:7777/php/php.log'
13
- LOG_URI_USE2 = 'http://54.235.155.6:7777/php/php.log'
14
- LOG_URI_USW1 = 'http://ec2-184-72-46-73.us-west-1.compute.amazonaws.com:7777/php/php.log'
15
- LOG_URI_USW2 = 'http://ec2-184-72-49-68.us-west-1.compute.amazonaws.com:7777/php/php.log'
16
- LOG_URI_STG1 = 'http://ec2-54-185-160-108.us-west-2.compute.amazonaws.com:7777/php/php.log'
17
- LOG_URI_STG2 = 'http://ec2-54-190-109-53.us-west-2.compute.amazonaws.com:7777/php/php.log'
18
-
19
10
  def execute
20
11
 
21
12
  @opts = command_options
@@ -200,16 +191,17 @@ module AppCommand
200
191
  def php_log_data
201
192
 
202
193
  raw_log_data = ''
203
- raw_log_uris = [
204
- LOG_URI_EUW1,
205
- LOG_URI_EUW2,
206
- LOG_URI_USE1,
207
- LOG_URI_USE2,
208
- LOG_URI_USW1,
209
- LOG_URI_USW2,
210
- LOG_URI_STG1,
211
- LOG_URI_STG2,
212
- ]
194
+ raw_log_uris = %w(
195
+ http://54.235.155.6:7777/php/php.log
196
+ http://ec2-174-129-36-164.compute-1.amazonaws.com:7777/php/php.log
197
+ http://ec2-54-185-160-108.us-west-2.compute.amazonaws.com:7777/php/php.log
198
+ http://ec2-54-190-109-53.us-west-2.compute.amazonaws.com:7777/php/php.log
199
+ http://ec2-54-73-66-114.eu-west-1.compute.amazonaws.com:7777/php/php.log
200
+ http://ec2-54-73-26-152.eu-west-1.compute.amazonaws.com:7777/php/php.log
201
+ http://ec2-54-217-40-80.eu-west-1.compute.amazonaws.com:7777/php/php.log
202
+ http://ec2-184-72-46-73.us-west-1.compute.amazonaws.com:7777/php/php.log
203
+ http://ec2-184-72-49-68.us-west-1.compute.amazonaws.com:7777/php/php.log
204
+ )
213
205
  raw_log_uris.each do |log_uri|
214
206
  App::Terminal::output("Retrieving data from: #{log_uri}")
215
207
  raw_log_data << RestClient.get(log_uri)
@@ -46,14 +46,14 @@ module AppCommand
46
46
  end
47
47
 
48
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')}."])
49
+ unless App::Terminal::prompt_yes_no('Continue by skipping 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
50
  App::Terminal::abort(nil, nil, true, false)
51
51
  end
52
52
  end
53
53
 
54
54
  @git.show_branches_draw_table(fnl_branches_cd, fnl_branches_db)
55
55
 
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)
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')} (except release branches)."], 'Are you absolutely sure you want to continue?', false)
57
57
  App::Terminal::abort(nil, nil, true, false)
58
58
  end
59
59
 
@@ -56,6 +56,7 @@ module AppCommand
56
56
  end
57
57
 
58
58
  found_results = false
59
+ found_warnings = false
59
60
  results_output = []
60
61
 
61
62
  results.each do |result|
@@ -65,6 +66,9 @@ module AppCommand
65
66
  if line =~ /\AFILE:\s(.*).\w{3,5}/i
66
67
  found_results = true
67
68
  results_output << "\x1B[38;5;196m#{line}\x1B[0m"
69
+ elsif line =~ /fatal error: (.*) on line \d+/i || line =~ /warning: (.*) on line \d+/i
70
+ found_warnings = true
71
+ results_output << "\x1B[38;5;250m#{line}\x1B[0m"
68
72
  else
69
73
  results_output << "\x1B[38;5;250m#{line}\x1B[0m"
70
74
  end
@@ -75,6 +79,8 @@ module AppCommand
75
79
 
76
80
  if found_results
77
81
  App::Terminal::error('Found errors!', results_output)
82
+ elsif found_warnings
83
+ App::Terminal::warning('Found warnings!', results_output)
78
84
  else
79
85
  App::Terminal::success('No errors found.', nil, file_found_to_scan ? true : false)
80
86
  end
data/lib/routes/ssh.rb ADDED
@@ -0,0 +1,80 @@
1
+ module AppCommand
2
+
3
+ class SSH < ::Convoy::ActionCommand::Base
4
+
5
+ CONFIGURATION_PREFIX = 'ssh_'
6
+
7
+ def execute
8
+
9
+ @opts = command_options
10
+ @args = arguments
11
+
12
+ opts_validate
13
+ opts_routing
14
+
15
+ end
16
+
17
+ def opts_validate
18
+
19
+ if @args[0].nil?
20
+ App::Terminal::error('You must specify what server you want to SSH into', "This must be specified in: #{App::Terminal::format_directory(ConfigUnique::CONFIG_FILE)}", true)
21
+ end
22
+
23
+ if @args[0] =~ /\Assh_\S+\z/i
24
+ config_param = @args[0]
25
+ else
26
+ config_param = "#{CONFIGURATION_PREFIX}#{@args[0]}"
27
+ end
28
+
29
+ unless App::Config::param_exists(config_param)
30
+ App::Terminal::error('Invalid Config Parameter', "The #{App::Terminal::format_highlight('config parameter')} #{App::Terminal::format_invalid(config_param)} doesn't exist in: #{App::Terminal::format_directory(ConfigUnique::CONFIG_FILE)}", true)
31
+ end
32
+
33
+ ssh_parts = App::Config.param(config_param).split('|')
34
+
35
+ @ssh_user = ssh_parts[0]
36
+ @ssh_host = ssh_parts[1]
37
+ @ssh_cert = ssh_parts[2].to_s.strip.length == 0 ? nil : ssh_parts[2]
38
+
39
+ help_message = [
40
+ "The file: #{App::Terminal::format_directory(ConfigUnique::CONFIG_FILE)} must contain a line similar to the following:",
41
+ nil,
42
+ 'ssh_ec2=ec2-user|ec2-XX-XX-XX-XX.eu-west-1.compute.amazonaws.com|~/.ssh/pem-key.pem',
43
+ 'ssh_ec2=ec2-user|ec2-XX-XX-XX-XX.eu-west-1.compute.amazonaws.com',
44
+ ]
45
+
46
+ if @ssh_user.nil? || @ssh_user == ''
47
+ App::Terminal::error("SSH #{App::Terminal::format_highlight('user')} required", help_message, true)
48
+ end
49
+
50
+ if @ssh_host.nil? || @ssh_host == ''
51
+ App::Terminal::error("SSH #{App::Terminal::format_highlight('host')} required", help_message, true)
52
+ end
53
+
54
+ unless @ssh_cert.nil?
55
+ unless App::UtilsFiles::file_exists(File.expand_path(@ssh_cert))
56
+ App::Terminal::error("PEM key not found: #{App::Terminal::format_directory(@ssh_cert)}")
57
+ end
58
+ end
59
+
60
+ end
61
+
62
+ def opts_routing
63
+
64
+ ssh_into_server
65
+
66
+ end
67
+
68
+ def ssh_into_server
69
+
70
+ if @ssh_cert.nil?
71
+ App::Terminal::command("ssh #{@ssh_user}@#{@ssh_host}", nil, false, false)
72
+ else
73
+ App::Terminal::command("ssh -i #{@ssh_cert} #{@ssh_user}@#{@ssh_host}", nil, false, false)
74
+ end
75
+
76
+ end
77
+
78
+ end
79
+
80
+ end
data/lib/version.rb CHANGED
@@ -1 +1 @@
1
- VERSION = '1.9.0'
1
+ VERSION = '1.10.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brightpearl-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.0
4
+ version: 1.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Albert Rannetsperger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-29 00:00:00.000000000 Z
11
+ date: 2015-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: columnist
@@ -157,6 +157,7 @@ files:
157
157
  - lib/routes/scripts_sonar.rb
158
158
  - lib/routes/scripts_sql_update.rb
159
159
  - lib/routes/setup.rb
160
+ - lib/routes/ssh.rb
160
161
  - lib/routes/tail.rb
161
162
  - lib/routes/test.rb
162
163
  - lib/routes/update.rb
@@ -174,9 +175,9 @@ require_paths:
174
175
  - lib
175
176
  required_ruby_version: !ruby/object:Gem::Requirement
176
177
  requirements:
177
- - - '>='
178
+ - - ~>
178
179
  - !ruby/object:Gem::Version
179
- version: '0'
180
+ version: '2.0'
180
181
  required_rubygems_version: !ruby/object:Gem::Requirement
181
182
  requirements:
182
183
  - - '>='