gitx 2.23.0 → 2.23.1.ci.174.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/.rubocop.yml +32 -0
- data/Rakefile +4 -0
- data/lib/gitx/cli/base_command.rb +2 -2
- data/lib/gitx/cli/buildtag_command.rb +1 -1
- data/lib/gitx/cli/cleanup_command.rb +28 -19
- data/lib/gitx/cli/nuke_command.rb +2 -2
- data/lib/gitx/cli/review_command.rb +4 -4
- data/lib/gitx/cli/start_command.rb +1 -1
- data/lib/gitx/configuration.rb +1 -1
- data/lib/gitx/executor.rb +5 -3
- data/lib/gitx/extensions/string.rb +1 -1
- data/lib/gitx/extensions/thor.rb +7 -7
- data/lib/gitx/github.rb +8 -8
- data/lib/gitx/version.rb +1 -1
- data/spec/gitx/cli/cleanup_command_spec.rb +22 -19
- data/spec/gitx/cli/integrate_command_spec.rb +3 -2
- data/spec/gitx/cli/release_command_spec.rb +1 -1
- data/spec/gitx/cli/review_command_spec.rb +3 -3
- data/spec/support/stub_execution.rb +2 -2
- metadata +44 -45
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MWQ4YTgwMmJmNWVkZjIxNDUzN2NjY2RkNTQ5N2FjOWRhN2E5NzYxYg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NDhmNzlmYTA2OGIyOTIzMDNiZGVkZjg5YzQwMWE5ZGM1NTMzZWQwYQ==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
Zjk0ZGNkMjVjNTBiMTQzYjNhZDE1NmVjYmRhM2VlZjQwMzFlYzA0MmM1YTk3
|
10
|
+
NjdlMzkxYTJmMTA0NTdkYWNmMGM5MzlmZTNhM2Q0YjQ0OGZlOGFlNDkxMDQ2
|
11
|
+
ZWZjMDMzMDlhZTc0ZjA0NzZhYTYzMGExN2MyZTQ4ZGQyMzYxM2M=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
Njk2YzRkMjhjMDJlYmVhODdhYjY2ZTdjMTI0N2QyYWQ5MDM4Y2M4NjhiZTdh
|
14
|
+
MzljZWVmN2U2YWZhNjg2ZjZjYWY4YjE1OThkYjJiZmVkMTgxNGZhMzJkNjBl
|
15
|
+
ZjllODIzYzNkYWJkZmNmZGVkMzFmODg0ZTNiN2QyNTQzYTJmNGM=
|
data/.rubocop.yml
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
# This configuration was generated by
|
2
|
+
# `rubocop --auto-gen-config`
|
3
|
+
# on 2016-04-18 08:55:15 -0700 using RuboCop version 0.33.0.
|
4
|
+
# The point is for the user to remove these configuration records
|
5
|
+
# one by one as the offenses are removed from the code base.
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
8
|
+
|
1
9
|
LineLength:
|
2
10
|
Max: 200
|
3
11
|
|
@@ -7,6 +15,30 @@ Documentation:
|
|
7
15
|
StringLiterals:
|
8
16
|
EnforcedStyle: single_quotes
|
9
17
|
|
18
|
+
# Offense count: 7
|
19
|
+
Metrics/AbcSize:
|
20
|
+
Max: 25
|
21
|
+
|
22
|
+
# Offense count: 2
|
23
|
+
Metrics/CyclomaticComplexity:
|
24
|
+
Max: 7
|
25
|
+
|
26
|
+
# Offense count: 5
|
27
|
+
# Configuration parameters: CountComments.
|
28
|
+
Metrics/MethodLength:
|
29
|
+
Max: 19
|
30
|
+
|
31
|
+
# Offense count: 1
|
32
|
+
# Configuration parameters: CountComments.
|
33
|
+
Metrics/ModuleLength:
|
34
|
+
Max: 123
|
35
|
+
|
36
|
+
# Offense count: 3
|
37
|
+
Style/RescueModifier:
|
38
|
+
Exclude:
|
39
|
+
- 'lib/gitx/cli/integrate_command.rb'
|
40
|
+
- 'lib/gitx/cli/nuke_command.rb'
|
41
|
+
|
10
42
|
FileName:
|
11
43
|
Exclude:
|
12
44
|
- bin/*
|
data/Rakefile
CHANGED
@@ -42,11 +42,11 @@ module Gitx
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def assert_aggregate_branch!(target_branch)
|
45
|
-
|
45
|
+
raise "Invalid aggregate branch: #{target_branch} must be one of supported aggregate branches #{config.aggregate_branches}" unless config.aggregate_branch?(target_branch)
|
46
46
|
end
|
47
47
|
|
48
48
|
def assert_not_protected_branch!(branch, action)
|
49
|
-
|
49
|
+
raise "Cannot #{action} reserved branch" if config.reserved_branch?(branch) || config.aggregate_branch?(branch)
|
50
50
|
end
|
51
51
|
|
52
52
|
def config
|
@@ -9,7 +9,7 @@ module Gitx
|
|
9
9
|
method_option :branch, type: :string, aliases: '-b', desc: 'branch name for build tag'
|
10
10
|
method_option :message, type: :string, aliases: '-m', desc: 'message to attach to the buildtag'
|
11
11
|
def buildtag
|
12
|
-
|
12
|
+
raise "Branch must be one of the supported taggable branches: #{config.taggable_branches}" unless config.taggable_branch?(branch_name)
|
13
13
|
run_git_cmd 'tag', git_tag, '--annotate', '--message', label
|
14
14
|
run_git_cmd 'push', 'origin', git_tag
|
15
15
|
end
|
@@ -7,38 +7,47 @@ module Gitx
|
|
7
7
|
class CleanupCommand < BaseCommand
|
8
8
|
desc 'cleanup', 'Cleanup branches that have been merged into master from the repo'
|
9
9
|
def cleanup
|
10
|
-
|
11
|
-
run_git_cmd 'pull'
|
12
|
-
run_git_cmd 'remote', 'prune', 'origin'
|
13
|
-
|
10
|
+
update_base_branch
|
14
11
|
say 'Deleting local and remote branches that have been merged into '
|
15
12
|
say config.base_branch, :green
|
16
|
-
|
13
|
+
filtered_merged_branches(:remote).each do |branch|
|
17
14
|
run_git_cmd 'push', 'origin', '--delete', branch
|
18
15
|
end
|
19
|
-
|
16
|
+
filtered_merged_branches(:local).each do |branch|
|
20
17
|
run_git_cmd 'branch', '--delete', branch
|
21
18
|
end
|
22
19
|
end
|
23
20
|
|
24
21
|
private
|
25
22
|
|
23
|
+
def update_base_branch
|
24
|
+
checkout_branch config.base_branch
|
25
|
+
run_git_cmd 'pull'
|
26
|
+
run_git_cmd 'remote', 'prune', 'origin'
|
27
|
+
end
|
28
|
+
|
26
29
|
# @return list of branches that have been merged
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
output = run_git_cmd('branch', *args).split("\n")
|
32
|
-
branches = output.map do |branch|
|
33
|
-
branch = branch.gsub(/\*/, '').strip.split(' ').first
|
34
|
-
branch = branch.gsub('origin/', '') if options[:remote]
|
35
|
-
branch
|
30
|
+
# filter out reserved and aggregate branches
|
31
|
+
def filtered_merged_branches(source)
|
32
|
+
merged_branches(source).reject do |branch|
|
33
|
+
config.reserved_branches.include?(branch) || config.aggregate_branch?(branch)
|
36
34
|
end
|
37
|
-
|
38
|
-
|
39
|
-
|
35
|
+
end
|
36
|
+
|
37
|
+
# @return list of branches that have been merged
|
38
|
+
# see http://stackoverflow.com/questions/26804024/git-branch-merged-sha-via-rugged-libgit2-bindings
|
39
|
+
def merged_branches(source)
|
40
|
+
merged_branches = repo.branches.each(source).select do |branch|
|
41
|
+
target = branch.resolve.target
|
42
|
+
repo.merge_base(base_branch_merge_target, target) == target.oid
|
43
|
+
end
|
44
|
+
merged_branches.map do |branch|
|
45
|
+
branch.name.gsub('origin/', '')
|
46
|
+
end
|
47
|
+
end
|
40
48
|
|
41
|
-
|
49
|
+
def base_branch_merge_target
|
50
|
+
repo.head.target
|
42
51
|
end
|
43
52
|
end
|
44
53
|
end
|
@@ -9,7 +9,7 @@ module Gitx
|
|
9
9
|
method_option :destination, type: :string, aliases: '-d', desc: 'destination branch to reset to'
|
10
10
|
def nuke(bad_branch)
|
11
11
|
good_branch = options[:destination] || ask("What branch do you want to reset #{bad_branch} to? (default: #{bad_branch})")
|
12
|
-
good_branch = bad_branch if good_branch.
|
12
|
+
good_branch = bad_branch if good_branch.empty?
|
13
13
|
|
14
14
|
last_known_good_tag = current_build_tag(good_branch)
|
15
15
|
return unless yes?("Reset #{bad_branch} to #{last_known_good_tag}? (y/n)", :green)
|
@@ -47,7 +47,7 @@ module Gitx
|
|
47
47
|
|
48
48
|
def current_build_tag(branch)
|
49
49
|
last_build_tag = build_tags_for_branch(branch).last
|
50
|
-
|
50
|
+
raise "No known good tag found for branch: #{branch}. Verify tag exists via `git tag -l 'build-#{branch}-*'`" unless last_build_tag
|
51
51
|
last_build_tag
|
52
52
|
end
|
53
53
|
|
@@ -8,14 +8,14 @@ module Gitx
|
|
8
8
|
class ReviewCommand < BaseCommand
|
9
9
|
include Gitx::Github
|
10
10
|
|
11
|
-
BUMP_COMMENT_PREFIX = '[gitx] review bump :tada:'
|
11
|
+
BUMP_COMMENT_PREFIX = '[gitx] review bump :tada:'.freeze
|
12
12
|
BUMP_COMMENT_FOOTER = <<-EOS.dedent
|
13
13
|
# Bump comments should include:
|
14
14
|
# * Summary of what changed
|
15
15
|
#
|
16
16
|
# This footer will automatically be stripped from the created comment
|
17
17
|
EOS
|
18
|
-
APPROVAL_COMMENT_PREFIX
|
18
|
+
APPROVAL_COMMENT_PREFIX = '[gitx] review approved :shipit:'.freeze
|
19
19
|
APPROVAL_COMMENT_FOOTER = <<-EOS.dedent
|
20
20
|
# Approval comments can include:
|
21
21
|
# * Feedback
|
@@ -23,7 +23,7 @@ module Gitx
|
|
23
23
|
#
|
24
24
|
# This footer will automatically be stripped from the created comment
|
25
25
|
EOS
|
26
|
-
REJECTION_COMMENT_PREFIX = '[gitx] review rejected'
|
26
|
+
REJECTION_COMMENT_PREFIX = '[gitx] review rejected'.freeze
|
27
27
|
REJECTION_COMMENT_FOOTER = <<-EOS.dedent
|
28
28
|
# Rejection comments should include:
|
29
29
|
# * Feedback
|
@@ -42,7 +42,7 @@ module Gitx
|
|
42
42
|
method_option :reject, type: :boolean, desc: 'reject the pull request an post comment on pull request'
|
43
43
|
# @see http://developer.github.com/v3/pulls/
|
44
44
|
def review(branch = nil)
|
45
|
-
|
45
|
+
raise 'Github authorization token not found' unless authorization_token
|
46
46
|
|
47
47
|
branch ||= current_branch.name
|
48
48
|
pull_request = find_or_create_pull_request(branch)
|
@@ -5,7 +5,7 @@ require 'gitx/cli/base_command'
|
|
5
5
|
module Gitx
|
6
6
|
module Cli
|
7
7
|
class StartCommand < BaseCommand
|
8
|
-
EXAMPLE_BRANCH_NAMES = %w( api-fix-invalid-auth desktop-cleanup-avatar-markup share-form-add-edit-link )
|
8
|
+
EXAMPLE_BRANCH_NAMES = %w( api-fix-invalid-auth desktop-cleanup-avatar-markup share-form-add-edit-link ).freeze
|
9
9
|
VALID_BRANCH_NAME_REGEX = /^[A-Za-z0-9\-_]+$/
|
10
10
|
|
11
11
|
desc 'start', 'start a new git branch with latest changes from master'
|
data/lib/gitx/configuration.rb
CHANGED
data/lib/gitx/executor.rb
CHANGED
@@ -11,14 +11,16 @@ module Gitx
|
|
11
11
|
yield "$ #{cmd.join(' ')}" if block_given?
|
12
12
|
output = ''
|
13
13
|
|
14
|
-
Open3.popen2e(*cmd) do |
|
15
|
-
|
14
|
+
Open3.popen2e(*cmd) do |_stdin, stdout_err, wait_thread|
|
15
|
+
loop do
|
16
|
+
line = stdout_err.gets
|
17
|
+
break unless line
|
16
18
|
output << line
|
17
19
|
yield line if block_given?
|
18
20
|
end
|
19
21
|
|
20
22
|
exit_status = wait_thread.value
|
21
|
-
|
23
|
+
raise ExecutionError, "#{cmd.join(' ')} failed" unless exit_status.success?
|
22
24
|
end
|
23
25
|
output
|
24
26
|
end
|
data/lib/gitx/extensions/thor.rb
CHANGED
@@ -12,13 +12,13 @@ class Thor
|
|
12
12
|
f.flush
|
13
13
|
|
14
14
|
flags = case editor
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
15
|
+
when 'mate', 'emacs', 'subl'
|
16
|
+
'-w'
|
17
|
+
when 'mvim'
|
18
|
+
'-f'
|
19
|
+
else
|
20
|
+
''
|
21
|
+
end
|
22
22
|
pid = fork { exec([editor, flags, f.path].join(' ')) }
|
23
23
|
Process.waitpid(pid)
|
24
24
|
File.read(f.path)
|
data/lib/gitx/github.rb
CHANGED
@@ -4,9 +4,9 @@ require 'yaml'
|
|
4
4
|
|
5
5
|
module Gitx
|
6
6
|
module Github
|
7
|
-
GLOBAL_CONFIG_FILE = '~/.config/gitx/github.yml'
|
8
|
-
REVIEW_CONTEXT = 'peer_review'
|
9
|
-
CLIENT_URL = 'https://github.com/wireframe/gitx'
|
7
|
+
GLOBAL_CONFIG_FILE = '~/.config/gitx/github.yml'.freeze
|
8
|
+
REVIEW_CONTEXT = 'peer_review'.freeze
|
9
|
+
CLIENT_URL = 'https://github.com/wireframe/gitx'.freeze
|
10
10
|
PULL_REQUEST_FOOTER = <<-EOS.dedent
|
11
11
|
# Pull Request Protips(tm):
|
12
12
|
# * Describe how this change accomplishes the task at hand
|
@@ -72,14 +72,14 @@ module Gitx
|
|
72
72
|
end
|
73
73
|
|
74
74
|
def pull_request_body(branch)
|
75
|
-
changelog = run_git_cmd('log', "origin/#{config.base_branch}...#{branch}", '--reverse', '--no-merges',
|
75
|
+
changelog = run_git_cmd('log', "origin/#{config.base_branch}...#{branch}", '--reverse', '--no-merges', '--pretty=format:* %B')
|
76
76
|
description = options[:description]
|
77
77
|
|
78
78
|
description_template = []
|
79
79
|
description_template << "#{description}\n" if description
|
80
80
|
description_template << changelog
|
81
81
|
|
82
|
-
|
82
|
+
ask_editor(description_template.join("\n"), editor: repo.config['core.editor'], footer: PULL_REQUEST_FOOTER)
|
83
83
|
end
|
84
84
|
|
85
85
|
def pull_request_title(branch)
|
@@ -120,7 +120,7 @@ module Gitx
|
|
120
120
|
|
121
121
|
def github_client_name
|
122
122
|
timestamp = Time.now.utc.strftime('%FT%R:%S%z')
|
123
|
-
|
123
|
+
"Git eXtensions #{timestamp}"
|
124
124
|
end
|
125
125
|
|
126
126
|
def github_client
|
@@ -131,7 +131,7 @@ module Gitx
|
|
131
131
|
# @raise error if github.user is not configured
|
132
132
|
def username
|
133
133
|
username = repo.config['github.user']
|
134
|
-
|
134
|
+
raise "Github user not configured. Run: `git config --global github.user 'me@email.com'`" unless username
|
135
135
|
username
|
136
136
|
end
|
137
137
|
|
@@ -142,7 +142,7 @@ module Gitx
|
|
142
142
|
# https://github.com/wireframe/gitx.git #=> wireframe/gitx
|
143
143
|
def github_slug
|
144
144
|
remote = repo.config['remote.origin.url']
|
145
|
-
remote.to_s.gsub(/\.git$/, '').split(
|
145
|
+
remote.to_s.gsub(/\.git$/, '').split(%r{[:\/]}).last(2).join('/')
|
146
146
|
end
|
147
147
|
|
148
148
|
def github_organization
|
data/lib/gitx/version.rb
CHANGED
@@ -11,20 +11,29 @@ describe Gitx::Cli::CleanupCommand do
|
|
11
11
|
end
|
12
12
|
let(:cli) { described_class.new(args, options, config) }
|
13
13
|
let(:executor) { cli.send(:executor) }
|
14
|
-
let(:
|
15
|
-
let(:
|
16
|
-
let(:
|
14
|
+
let(:remote_branches) { [] }
|
15
|
+
let(:local_branches) { [] }
|
16
|
+
let(:workdir) { '.' }
|
17
|
+
let(:oid) { '123123' }
|
18
|
+
let(:target) { double(:target, oid: oid) }
|
19
|
+
let(:reference) { double(:ref, target: target) }
|
20
|
+
let(:repo) { double(:repo, workdir: workdir, head: reference) }
|
21
|
+
let(:branches) { double(:branches) }
|
17
22
|
|
18
23
|
before do
|
19
|
-
allow(cli).to receive(:
|
24
|
+
allow(cli).to receive(:repo).and_return(repo)
|
25
|
+
allow(repo).to receive(:branches).and_return(branches)
|
26
|
+
allow(repo).to receive(:merge_base).with(target, target).and_return(oid)
|
27
|
+
allow(branches).to receive(:each).with(:local).and_return(local_branches)
|
28
|
+
allow(branches).to receive(:each).with(:remote).and_return(remote_branches)
|
20
29
|
end
|
21
30
|
|
22
31
|
describe '#cleanup' do
|
23
32
|
context 'when merged local branches exist' do
|
24
33
|
let(:local_branches) do
|
25
|
-
|
26
|
-
|
27
|
-
|
34
|
+
[
|
35
|
+
double(:branch, name: 'merged-local-feature', resolve: reference)
|
36
|
+
]
|
28
37
|
end
|
29
38
|
before do
|
30
39
|
allow(cli).to receive(:say)
|
@@ -32,8 +41,6 @@ describe Gitx::Cli::CleanupCommand do
|
|
32
41
|
expect(executor).to receive(:execute).with('git', 'checkout', 'master').ordered
|
33
42
|
expect(executor).to receive(:execute).with('git', 'pull').ordered
|
34
43
|
expect(executor).to receive(:execute).with('git', 'remote', 'prune', 'origin').ordered
|
35
|
-
expect(executor).to receive(:execute).with('git', 'branch', '--remote', '--merged').and_return(remote_branches).ordered
|
36
|
-
expect(executor).to receive(:execute).with('git', 'branch', '--merged').and_return(local_branches).ordered
|
37
44
|
expect(executor).to receive(:execute).with('git', 'branch', '--delete', 'merged-local-feature').ordered
|
38
45
|
|
39
46
|
cli.cleanup
|
@@ -44,9 +51,9 @@ describe Gitx::Cli::CleanupCommand do
|
|
44
51
|
end
|
45
52
|
context 'when merged remote branches exist' do
|
46
53
|
let(:remote_branches) do
|
47
|
-
|
48
|
-
|
49
|
-
|
54
|
+
[
|
55
|
+
double(:branch, name: 'origin/merged-remote-feature', resolve: reference)
|
56
|
+
]
|
50
57
|
end
|
51
58
|
before do
|
52
59
|
allow(cli).to receive(:say)
|
@@ -54,9 +61,7 @@ describe Gitx::Cli::CleanupCommand do
|
|
54
61
|
expect(executor).to receive(:execute).with('git', 'checkout', 'master').ordered
|
55
62
|
expect(executor).to receive(:execute).with('git', 'pull').ordered
|
56
63
|
expect(executor).to receive(:execute).with('git', 'remote', 'prune', 'origin').ordered
|
57
|
-
expect(executor).to receive(:execute).with('git', 'branch', '--remote', '--merged').and_return(remote_branches).ordered
|
58
64
|
expect(executor).to receive(:execute).with('git', 'push', 'origin', '--delete', 'merged-remote-feature').ordered
|
59
|
-
expect(executor).to receive(:execute).with('git', 'branch', '--merged').and_return(local_branches).ordered
|
60
65
|
|
61
66
|
cli.cleanup
|
62
67
|
end
|
@@ -66,9 +71,9 @@ describe Gitx::Cli::CleanupCommand do
|
|
66
71
|
end
|
67
72
|
context 'when mreged remote branches with slash exist' do
|
68
73
|
let(:remote_branches) do
|
69
|
-
|
70
|
-
|
71
|
-
|
74
|
+
[
|
75
|
+
double(:branch, name: 'origin/merged-remote-feature/review', resolve: reference)
|
76
|
+
]
|
72
77
|
end
|
73
78
|
before do
|
74
79
|
allow(cli).to receive(:say)
|
@@ -76,9 +81,7 @@ describe Gitx::Cli::CleanupCommand do
|
|
76
81
|
expect(executor).to receive(:execute).with('git', 'checkout', 'master').ordered
|
77
82
|
expect(executor).to receive(:execute).with('git', 'pull').ordered
|
78
83
|
expect(executor).to receive(:execute).with('git', 'remote', 'prune', 'origin').ordered
|
79
|
-
expect(executor).to receive(:execute).with('git', 'branch', '--remote', '--merged').and_return(remote_branches).ordered
|
80
84
|
expect(executor).to receive(:execute).with('git', 'push', 'origin', '--delete', 'merged-remote-feature/review').ordered
|
81
|
-
expect(executor).to receive(:execute).with('git', 'branch', '--merged').and_return(local_branches).ordered
|
82
85
|
|
83
86
|
cli.cleanup
|
84
87
|
end
|
@@ -84,7 +84,7 @@ describe Gitx::Cli::IntegrateCommand do
|
|
84
84
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
85
85
|
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
86
86
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
87
|
-
expect(executor).to receive(:execute).with('git', 'log', 'origin/master...feature-branch', '--reverse', '--no-merges',
|
87
|
+
expect(executor).to receive(:execute).with('git', 'log', 'origin/master...feature-branch', '--reverse', '--no-merges', '--pretty=format:* %B').and_return(changelog).ordered
|
88
88
|
expect(executor).to receive(:execute).with('git', 'fetch', 'origin').ordered
|
89
89
|
expect(executor).to receive(:execute).with('git', 'branch', '--delete', '--force', 'staging').ordered
|
90
90
|
expect(executor).to receive(:execute).with('git', 'checkout', 'staging').ordered
|
@@ -158,7 +158,8 @@ describe Gitx::Cli::IntegrateCommand do
|
|
158
158
|
expect(executor).to receive(:execute).with('git', 'fetch', 'origin').ordered
|
159
159
|
expect(executor).to receive(:execute).with('git', 'branch', '--delete', '--force', 'staging').ordered
|
160
160
|
expect(executor).to receive(:execute).with('git', 'checkout', 'staging').ordered
|
161
|
-
expect(executor).to receive(:execute).with('git', 'merge', '--no-ff', '--message', '[gitx] Integrating feature-branch into staging (Pull request #10)', 'feature-branch')
|
161
|
+
expect(executor).to receive(:execute).with('git', 'merge', '--no-ff', '--message', '[gitx] Integrating feature-branch into staging (Pull request #10)', 'feature-branch')
|
162
|
+
.and_raise('git merge feature-branch failed').ordered
|
162
163
|
|
163
164
|
VCR.use_cassette('pull_request_does_exist_with_success_status') do
|
164
165
|
expect { cli.integrate }.to raise_error(/Merge conflict occurred. Please fix merge conflict and rerun command with --resume feature-branch flag/)
|
@@ -152,7 +152,7 @@ describe Gitx::Cli::ReleaseCommand do
|
|
152
152
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
153
153
|
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
154
154
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
155
|
-
expect(executor).to receive(:execute).with('git', 'log', 'origin/master...feature-branch', '--reverse', '--no-merges',
|
155
|
+
expect(executor).to receive(:execute).with('git', 'log', 'origin/master...feature-branch', '--reverse', '--no-merges', '--pretty=format:* %B').and_return('2013-01-01 did some stuff').ordered
|
156
156
|
expect(executor).to receive(:execute).with('git', 'checkout', 'master').ordered
|
157
157
|
expect(executor).to receive(:execute).with('git', 'pull', 'origin', 'master').ordered
|
158
158
|
expect(executor).to receive(:execute).with('git', 'merge', '--no-ff', '--message', '[gitx] Releasing feature-branch to master (Pull request #10)', 'feature-branch').ordered
|
@@ -46,7 +46,7 @@ describe Gitx::Cli::ReviewCommand do
|
|
46
46
|
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
47
47
|
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
48
48
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
49
|
-
expect(executor).to receive(:execute).with('git', 'log', 'origin/master...feature-branch', '--reverse', '--no-merges',
|
49
|
+
expect(executor).to receive(:execute).with('git', 'log', 'origin/master...feature-branch', '--reverse', '--no-merges', '--pretty=format:* %B').and_return(changelog).ordered
|
50
50
|
expect(cli).to receive(:ask_editor).with(changelog, hash_including(footer: Gitx::Github::PULL_REQUEST_FOOTER)).and_return('description')
|
51
51
|
|
52
52
|
stub_request(:post, 'https://api.github.com/repos/wireframe/gitx/pulls').to_return(status: 201, body: new_pull_request.to_json, headers: { 'Content-Type' => 'application/json' })
|
@@ -82,11 +82,11 @@ describe Gitx::Cli::ReviewCommand do
|
|
82
82
|
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
83
83
|
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
84
84
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
85
|
-
expect(executor).to receive(:execute).with('git', 'log', 'origin/master...feature-branch', '--reverse', '--no-merges',
|
85
|
+
expect(executor).to receive(:execute).with('git', 'log', 'origin/master...feature-branch', '--reverse', '--no-merges', '--pretty=format:* %B').and_return(changelog).ordered
|
86
86
|
expect(cli).to receive(:ask_editor).with(changelog, hash_including(footer: Gitx::Github::PULL_REQUEST_FOOTER)).and_return(pull_request_description)
|
87
87
|
|
88
88
|
stub_request(:post, 'https://api.github.com/repos/wireframe/gitx/pulls')
|
89
|
-
.with(body: {base: 'master', head: 'feature-branch', title: 'feature branch', body: pull_request_description}.to_json)
|
89
|
+
.with(body: { base: 'master', head: 'feature-branch', title: 'feature branch', body: pull_request_description }.to_json)
|
90
90
|
.to_return(status: 201, body: new_pull_request.to_json, headers: { 'Content-Type' => 'application/json' })
|
91
91
|
|
92
92
|
VCR.use_cassette('pull_request_does_not_exist') do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.23.
|
4
|
+
version: 2.23.1.ci.174.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Sonnek
|
@@ -14,224 +14,224 @@ dependencies:
|
|
14
14
|
name: rugged
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 0.24.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.24.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: thor
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ! '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ! '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: octokit
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ! '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ! '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: bundler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ! '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rake
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ! '>='
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ! '>='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ! '>='
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '3.0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ! '>='
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '3.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: pry
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ! '>='
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ! '>='
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: webmock
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ! '>='
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ! '>='
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: timecop
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - ! '>='
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- -
|
136
|
+
- - ! '>='
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: vcr
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- -
|
143
|
+
- - ! '>='
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: '0'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- -
|
150
|
+
- - ! '>='
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: guard
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
|
-
- -
|
157
|
+
- - ! '>='
|
158
158
|
- !ruby/object:Gem::Version
|
159
159
|
version: '0'
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
|
-
- -
|
164
|
+
- - ! '>='
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
168
|
name: guard-rspec
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
|
-
- -
|
171
|
+
- - ! '>='
|
172
172
|
- !ruby/object:Gem::Version
|
173
173
|
version: '0'
|
174
174
|
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
|
-
- -
|
178
|
+
- - ! '>='
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0'
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
182
|
name: coveralls
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
184
184
|
requirements:
|
185
|
-
- -
|
185
|
+
- - ! '>='
|
186
186
|
- !ruby/object:Gem::Version
|
187
187
|
version: '0'
|
188
188
|
type: :development
|
189
189
|
prerelease: false
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
192
|
-
- -
|
192
|
+
- - ! '>='
|
193
193
|
- !ruby/object:Gem::Version
|
194
194
|
version: '0'
|
195
195
|
- !ruby/object:Gem::Dependency
|
196
196
|
name: terminal-notifier
|
197
197
|
requirement: !ruby/object:Gem::Requirement
|
198
198
|
requirements:
|
199
|
-
- -
|
199
|
+
- - ! '>='
|
200
200
|
- !ruby/object:Gem::Version
|
201
201
|
version: '0'
|
202
202
|
type: :development
|
203
203
|
prerelease: false
|
204
204
|
version_requirements: !ruby/object:Gem::Requirement
|
205
205
|
requirements:
|
206
|
-
- -
|
206
|
+
- - ! '>='
|
207
207
|
- !ruby/object:Gem::Version
|
208
208
|
version: '0'
|
209
209
|
- !ruby/object:Gem::Dependency
|
210
210
|
name: terminal-notifier-guard
|
211
211
|
requirement: !ruby/object:Gem::Requirement
|
212
212
|
requirements:
|
213
|
-
- -
|
213
|
+
- - ! '>='
|
214
214
|
- !ruby/object:Gem::Version
|
215
215
|
version: '0'
|
216
216
|
type: :development
|
217
217
|
prerelease: false
|
218
218
|
version_requirements: !ruby/object:Gem::Requirement
|
219
219
|
requirements:
|
220
|
-
- -
|
220
|
+
- - ! '>='
|
221
221
|
- !ruby/object:Gem::Version
|
222
222
|
version: '0'
|
223
223
|
- !ruby/object:Gem::Dependency
|
224
224
|
name: rubocop
|
225
225
|
requirement: !ruby/object:Gem::Requirement
|
226
226
|
requirements:
|
227
|
-
- -
|
227
|
+
- - ! '>='
|
228
228
|
- !ruby/object:Gem::Version
|
229
229
|
version: '0'
|
230
230
|
type: :development
|
231
231
|
prerelease: false
|
232
232
|
version_requirements: !ruby/object:Gem::Requirement
|
233
233
|
requirements:
|
234
|
-
- -
|
234
|
+
- - ! '>='
|
235
235
|
- !ruby/object:Gem::Version
|
236
236
|
version: '0'
|
237
237
|
description: Git eXtensions for improved development workflows
|
@@ -251,13 +251,13 @@ executables:
|
|
251
251
|
extensions: []
|
252
252
|
extra_rdoc_files: []
|
253
253
|
files:
|
254
|
-
-
|
255
|
-
-
|
256
|
-
-
|
257
|
-
-
|
258
|
-
-
|
259
|
-
-
|
260
|
-
-
|
254
|
+
- .gitignore
|
255
|
+
- .gitx.yml
|
256
|
+
- .hound.yml
|
257
|
+
- .rspec
|
258
|
+
- .rubocop.yml
|
259
|
+
- .ruby-version
|
260
|
+
- .travis.yml
|
261
261
|
- CONTRIBUTING.md
|
262
262
|
- Gemfile
|
263
263
|
- Guardfile
|
@@ -328,17 +328,17 @@ require_paths:
|
|
328
328
|
- lib
|
329
329
|
required_ruby_version: !ruby/object:Gem::Requirement
|
330
330
|
requirements:
|
331
|
-
- -
|
331
|
+
- - ! '>='
|
332
332
|
- !ruby/object:Gem::Version
|
333
333
|
version: '0'
|
334
334
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
335
335
|
requirements:
|
336
|
-
- -
|
336
|
+
- - ! '>'
|
337
337
|
- !ruby/object:Gem::Version
|
338
|
-
version:
|
338
|
+
version: 1.3.1
|
339
339
|
requirements: []
|
340
340
|
rubyforge_project:
|
341
|
-
rubygems_version: 2.4.
|
341
|
+
rubygems_version: 2.4.5
|
342
342
|
signing_key:
|
343
343
|
specification_version: 4
|
344
344
|
summary: Utility scripts for Git to increase productivity for common operations
|
@@ -367,4 +367,3 @@ test_files:
|
|
367
367
|
- spec/support/timecop.rb
|
368
368
|
- spec/support/vcr.rb
|
369
369
|
- spec/support/webmock.rb
|
370
|
-
has_rdoc:
|