thegarage-gitx 2.11.0 → 2.12.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8d556d4767bbd711d406930510b698a1811e063c
4
- data.tar.gz: 4b71eb5f631cf5b9d134ab842df9136321ca2601
3
+ metadata.gz: 9c042898972c5d2092ec9f3a579a75e32c448a95
4
+ data.tar.gz: a8b5e3cd62170304f12cfdb4000e2325ad77325d
5
5
  SHA512:
6
- metadata.gz: 3baa98bde329c5ef4d7aa54610aa5393ef4899d7ed28e4558bad31df5d135f918983974947acea1f0a2f3db56d57506f2cf3696aaf7c44fae7095f9e9c90e0b0
7
- data.tar.gz: 1d16107432222b84b7942a9be5af7be1875c15bd794432221667daaf0a8738155b740ab671cb13d9ea0488b9edcec0e35b5b069dd9fd757b6addbf412fec9348
6
+ metadata.gz: a0aca7c57d79390ecfc96913132303a830fa258f6e3dd5d0a5f26de44b584a5cb840324f14ee160b06127cb37c8068eeaad86c5a6ff315fa3b23945ee35db624
7
+ data.tar.gz: cb4eed326c8c2ddeb0554d88a8722c84a06e40aab83856f0ee61051a13c9a061ce0b565f9da71b1b8d82b6d56c22a0b6d13f561c472edb72ca3aaac7f5c3b6d8
@@ -1,4 +1,5 @@
1
1
  require 'thegarage/gitx/version'
2
+ require 'thegarage/gitx/configuration'
2
3
  require 'thegarage/gitx/extensions/string'
3
4
  require 'thegarage/gitx/extensions/thor'
4
5
 
@@ -11,8 +11,6 @@ module Thegarage
11
11
 
12
12
  class MergeError < Thor::Error; end
13
13
 
14
- AGGREGATE_BRANCHES = %w( staging prototype )
15
- RESERVED_BRANCHES = %w( HEAD master next_release ) + AGGREGATE_BRANCHES
16
14
  add_runtime_options!
17
15
 
18
16
  method_option :trace, :type => :boolean, :aliases => '-v'
@@ -38,18 +36,22 @@ module Thegarage
38
36
  repo.branches.find(&:head?)
39
37
  end
40
38
 
41
- def aggregate_branch?(branch)
42
- AGGREGATE_BRANCHES.include?(branch)
39
+ def assert_aggregate_branch!(target_branch)
40
+ fail "Invalid aggregate branch: #{target_branch} must be one of supported aggregate branches #{config.aggregate_branches}" unless config.aggregate_branch?(target_branch)
43
41
  end
44
42
 
45
43
  def assert_not_protected_branch!(branch, action)
46
- raise "Cannot #{action} reserved branch" if RESERVED_BRANCHES.include?(branch) || aggregate_branch?(branch)
44
+ raise "Cannot #{action} reserved branch" if config.reserved_branch?(branch) || config.aggregate_branch?(branch)
47
45
  end
48
46
 
49
47
  # helper to invoke other CLI commands
50
48
  def execute_command(command_class, method, args = [])
51
49
  command_class.new.send(method, *args)
52
50
  end
51
+
52
+ def config
53
+ @configuration ||= Thegarage::Gitx::Configuration.new(repo.workdir)
54
+ end
53
55
  end
54
56
  end
55
57
  end
@@ -6,12 +6,11 @@ module Thegarage
6
6
  module Gitx
7
7
  module Cli
8
8
  class BuildtagCommand < BaseCommand
9
- TAGGABLE_BRANCHES = %w( master staging )
10
9
 
11
10
  desc 'buildtag', 'create a tag for the current build and push it back to origin (supports Travis CI and Codeship)'
12
11
  def buildtag
13
12
  fail "Unknown branch. Environment variables TRAVIS_BRANCH or CI_BRANCH are required" unless branch_name
14
- fail "Branch must be one of the supported taggable branches: #{TAGGABLE_BRANCHES}" unless TAGGABLE_BRANCHES.include?(branch_name)
13
+ fail "Branch must be one of the supported taggable branches: #{config.taggable_branches}" unless config.taggable_branch?(branch_name)
15
14
 
16
15
  label = "buildtag generated by build #{build_number}"
17
16
  create_build_tag(branch_name, label)
@@ -36,8 +36,8 @@ module Thegarage
36
36
  branch
37
37
  end
38
38
  branches.uniq!
39
- branches -= RESERVED_BRANCHES
40
- branches.reject! { |b| aggregate_branch?(b) }
39
+ branches -= config.reserved_branches
40
+ branches.reject! { |b| config.aggregate_branch?(b) }
41
41
 
42
42
  branches
43
43
  end
@@ -26,7 +26,7 @@ module Thegarage
26
26
  integrate_branch(branch, integration_branch) unless options[:resume]
27
27
  checkout_branch branch
28
28
 
29
- create_integrate_comment(branch) unless RESERVED_BRANCHES.include?(branch)
29
+ create_integrate_comment(branch) unless config.reserved_branch?(branch)
30
30
  end
31
31
 
32
32
  private
@@ -59,10 +59,6 @@ module Thegarage
59
59
  end
60
60
  end
61
61
 
62
- def assert_aggregate_branch!(target_branch)
63
- fail "Invalid aggregate branch: #{target_branch} must be one of supported aggregate branches #{AGGREGATE_BRANCHES}" unless aggregate_branch?(target_branch)
64
- end
65
-
66
62
  # nuke local branch and pull fresh version from remote repo
67
63
  def fetch_remote_branch(target_branch)
68
64
  create_remote_branch(target_branch) unless remote_branch_exists?(target_branch)
@@ -14,7 +14,7 @@ module Thegarage
14
14
 
15
15
  last_known_good_tag = current_build_tag(good_branch)
16
16
  return unless yes?("Reset #{bad_branch} to #{last_known_good_tag}? (y/n)", :green)
17
- fail "Only aggregate branches are allowed to be reset: #{AGGREGATE_BRANCHES}" unless aggregate_branch?(bad_branch)
17
+ assert_aggregate_branch!(bad_branch)
18
18
  return if migrations_need_to_be_reverted?(bad_branch, last_known_good_tag)
19
19
 
20
20
  say "Resetting "
@@ -0,0 +1,47 @@
1
+ require 'yaml'
2
+
3
+ module Thegarage
4
+ module Gitx
5
+ class Configuration
6
+ DEFAULT_CONFIG = {
7
+ 'aggregate_branches' => %w( staging prototype ),
8
+ 'reserved_branches' => %w( HEAD master next_release staging prototype ),
9
+ 'taggable_branches' => %w( master staging )
10
+ }
11
+ CONFIG_FILE = '.gitx.yml'
12
+
13
+ attr_reader :config
14
+
15
+ def initialize(root_dir)
16
+ @config = Thor::CoreExt::HashWithIndifferentAccess.new(DEFAULT_CONFIG)
17
+ config_file_path = File.join(root_dir, CONFIG_FILE)
18
+ if File.exists?(config_file_path)
19
+ @config.merge!(::YAML::load_file(config_file_path))
20
+ end
21
+ end
22
+
23
+ def aggregate_branches
24
+ config[:aggregate_branches]
25
+ end
26
+ def aggregate_branch?(branch)
27
+ aggregate_branches.include?(branch)
28
+ end
29
+
30
+ def reserved_branches
31
+ config[:reserved_branches]
32
+ end
33
+
34
+ def reserved_branch?(branch)
35
+ reserved_branches.include?(branch)
36
+ end
37
+
38
+ def taggable_branches
39
+ config[:taggable_branches]
40
+ end
41
+
42
+ def taggable_branch?(branch)
43
+ taggable_branches.include?(branch)
44
+ end
45
+ end
46
+ end
47
+ end
@@ -1,5 +1,5 @@
1
1
  module Thegarage
2
2
  module Gitx
3
- VERSION = '2.11.0'
3
+ VERSION = '2.12.0'
4
4
  end
5
5
  end
@@ -1,21 +1,24 @@
1
1
  # helper for reading global config file
2
2
  module GlobalConfig
3
3
  def global_config_file
4
- config_dir = File.join(__dir__, '../tmp/.config/gitx')
5
- config_file = File.join(config_dir, 'github.yml')
4
+ config_file = File.join(temp_dir, '.config/gitx/github.yml')
5
+ config_dir = File.dirname(config_file)
6
6
  FileUtils.mkdir_p(config_dir) unless File.exists?(config_dir)
7
7
  config_file
8
8
  end
9
9
  def global_config
10
10
  YAML.load_file(global_config_file)
11
11
  end
12
+ def temp_dir
13
+ tmp_dir = File.join(__dir__, '../tmp')
14
+ end
12
15
  end
13
16
 
14
17
  RSpec.configure do |config|
15
18
  config.include GlobalConfig
16
19
 
17
20
  config.before do
18
- tmp_dir = File.join(__dir__, '../tmp')
19
- FileUtils.rm_rf(tmp_dir)
21
+ FileUtils.rm_rf(temp_dir)
22
+ FileUtils.mkdir_p(temp_dir)
20
23
  end
21
24
  end
@@ -3,7 +3,7 @@
3
3
  RSpec.configure do |config|
4
4
  config.before do
5
5
  @old_home = ENV['HOME']
6
- ENV['HOME'] = File.join(__dir__, '../tmp')
6
+ ENV['HOME'] = temp_dir
7
7
  end
8
8
  config.after do
9
9
  ENV['HOME'] = @old_home
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+ require 'thegarage/gitx/cli/base_command'
3
+
4
+ describe Thegarage::Gitx::Cli::BaseCommand do
5
+ let(:args) { [] }
6
+ let(:options) { {} }
7
+ let(:config) do
8
+ {
9
+ pretend: true
10
+ }
11
+ end
12
+ let(:cli) { described_class.new(args, options, config) }
13
+ let(:repo) { cli.send(:repo) }
14
+
15
+ describe 'without custom .gitx.yml config file' do
16
+ it 'provides default options' do
17
+ expect(cli.send(:config).config).to eq Thegarage::Gitx::Configuration::DEFAULT_CONFIG
18
+ end
19
+ end
20
+
21
+ describe 'with custom .gitx.yml config file' do
22
+ let(:config) do
23
+ {
24
+ 'aggregate_branches' => %w( foo bar ),
25
+ 'reserved_branches' => %w( baz qux ),
26
+ 'taggable_branches' => %w( quux corge )
27
+ }
28
+ end
29
+ before do
30
+ expect(repo).to receive(:workdir).and_return(temp_dir)
31
+ File.open(File.join(temp_dir, '.gitx.yml'), 'w') do |f|
32
+ f.puts config.to_yaml
33
+ end
34
+ end
35
+ it 'overrides default options' do
36
+ expect(cli.send(:config).aggregate_branches).to eq(%w( foo bar ))
37
+ expect(cli.send(:config).reserved_branches).to eq(%w( baz qux ))
38
+ expect(cli.send(:config).taggable_branches).to eq(%w( quux corge ))
39
+ end
40
+ end
41
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thegarage-gitx
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.11.0
4
+ version: 2.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Sonnek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-30 00:00:00.000000000 Z
11
+ date: 2015-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rugged
@@ -271,6 +271,7 @@ files:
271
271
  - lib/thegarage/gitx/cli/start_command.rb
272
272
  - lib/thegarage/gitx/cli/track_command.rb
273
273
  - lib/thegarage/gitx/cli/update_command.rb
274
+ - lib/thegarage/gitx/configuration.rb
274
275
  - lib/thegarage/gitx/extensions/string.rb
275
276
  - lib/thegarage/gitx/extensions/thor.rb
276
277
  - lib/thegarage/gitx/github.rb
@@ -287,6 +288,7 @@ files:
287
288
  - spec/support/timecop.rb
288
289
  - spec/support/vcr.rb
289
290
  - spec/support/webmock.rb
291
+ - spec/thegarage/gitx/cli/base_command_spec.rb
290
292
  - spec/thegarage/gitx/cli/buildtag_command_spec.rb
291
293
  - spec/thegarage/gitx/cli/cleanup_command_spec.rb
292
294
  - spec/thegarage/gitx/cli/integrate_command_spec.rb
@@ -335,6 +337,7 @@ test_files:
335
337
  - spec/support/timecop.rb
336
338
  - spec/support/vcr.rb
337
339
  - spec/support/webmock.rb
340
+ - spec/thegarage/gitx/cli/base_command_spec.rb
338
341
  - spec/thegarage/gitx/cli/buildtag_command_spec.rb
339
342
  - spec/thegarage/gitx/cli/cleanup_command_spec.rb
340
343
  - spec/thegarage/gitx/cli/integrate_command_spec.rb