gitx 3.2.0 → 4.1.1
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 +4 -4
- data/CONTRIBUTING.md +1 -1
- data/README.md +2 -2
- data/lib/gitx/cli/cleanup_command.rb +1 -1
- data/lib/gitx/cli/integrate_command.rb +2 -1
- data/lib/gitx/cli/release_command.rb +1 -1
- data/lib/gitx/cli/start_command.rb +1 -1
- data/lib/gitx/cli/update_command.rb +13 -4
- data/lib/gitx/defaults.yml +4 -4
- data/lib/gitx/github.rb +10 -0
- data/lib/gitx/version.rb +1 -1
- data/spec/fixtures/vcr_cassettes/{pull_request_does_exist_with_success_status_and_then_add_label.yml → pull_request_does_exist_and_then_add_label.yml} +0 -68
- data/spec/gitx/cli/buildtag_command_spec.rb +8 -8
- data/spec/gitx/cli/cleanup_command_spec.rb +3 -3
- data/spec/gitx/cli/integrate_command_spec.rb +31 -7
- data/spec/gitx/cli/nuke_command_spec.rb +26 -26
- data/spec/gitx/cli/release_command_spec.rb +31 -31
- data/spec/gitx/cli/review_command_spec.rb +32 -9
- data/spec/gitx/cli/start_command_spec.rb +16 -16
- data/spec/gitx/cli/update_command_spec.rb +17 -4
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3794617867e08f0a15468dd3291883d22bed44fa9dfde0350cf120e5c5c8890c
|
4
|
+
data.tar.gz: 827802ca75c6a1f4243fa628a12dc3cc1e9b11afef91d587fc9fe4ae4a9b2b6e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ae00b7739d6b3488d0ae4ae588d776c1a004eeb36167587699d2c0dae2ec49902dfc78d122f1edcab7e9ce47a3cecfd36efe59491bce0d663562058e08975f57
|
7
|
+
data.tar.gz: 8727bf623a20f50a6de72088a0e1106e26ccd1ba974d66471e2ed0f8643ffe3c04ec299b6d4343df3816f8c881af3588497e7a2fd9806627c418d461933d24dc
|
data/CONTRIBUTING.md
CHANGED
@@ -25,7 +25,7 @@ Use [Test Driven Development](http://en.wikipedia.org/wiki/Test-driven_developme
|
|
25
25
|
* Follow [best practices](http://robots.thoughtbot.com/post/48933156625/5-useful-tips-for-a-better-commit-message) for git commit messages to communicate your changes.
|
26
26
|
* Add [ticket references to commits to automatically trigger product management workflows](http://help.sprint.ly/knowledgebase/articles/108139-available-scm-vcs-commands)
|
27
27
|
* Only write the **minimal** amount of code necessary to accomplish the given task.
|
28
|
-
* Ensure branch stays up-to-date with latest changes that are merged into
|
28
|
+
* Ensure branch stays up-to-date with latest changes that are merged into main by using: `$ git update`
|
29
29
|
* Changes that are not directly related to the current feature should be cherry-picked into their own branch and merged separately.
|
30
30
|
|
31
31
|
### Testing Protips™
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
[](https://travis-ci.org/wireframe/gitx)
|
2
2
|
[](https://coveralls.io/r/wireframe/gitx)
|
3
3
|
[](https://codeclimate.com/github/wireframe/gitx)
|
4
4
|
|
@@ -47,7 +47,7 @@ This setting is cleared when a reviewer approves or rejects the pull request.
|
|
47
47
|
|
48
48
|
## git release <feature_branch_name (optional, default: current_branch)
|
49
49
|
|
50
|
-
release the feature branch to the base branch (by default,
|
50
|
+
release the feature branch to the base branch (by default, main). This operation will perform the following:
|
51
51
|
|
52
52
|
* pull latest code from remote feature branch
|
53
53
|
* pull latest code from the base branch
|
@@ -5,7 +5,7 @@ require 'gitx/cli/base_command'
|
|
5
5
|
module Gitx
|
6
6
|
module Cli
|
7
7
|
class CleanupCommand < BaseCommand
|
8
|
-
desc 'cleanup', 'Cleanup branches that have been merged into
|
8
|
+
desc 'cleanup', 'Cleanup branches that have been merged into main from the repo'
|
9
9
|
def cleanup
|
10
10
|
update_base_branch
|
11
11
|
say 'Deleting local and remote branches that have been merged into '
|
@@ -9,6 +9,7 @@ module Gitx
|
|
9
9
|
class IntegrateCommand < BaseCommand
|
10
10
|
include Gitx::Github
|
11
11
|
desc 'integrate', 'integrate the current branch into one of the aggregate development branches (default = staging)'
|
12
|
+
method_option :'skip-pull-request', type: :boolean, desc: 'skip pull request reference in merge commit'
|
12
13
|
method_option :resume, type: :string, aliases: '-r', desc: 'resume merging of feature-branch'
|
13
14
|
def integrate(integration_branch = 'staging')
|
14
15
|
assert_aggregate_branch!(integration_branch)
|
@@ -17,7 +18,7 @@ module Gitx
|
|
17
18
|
print_message(branch, integration_branch)
|
18
19
|
|
19
20
|
run_git_cmd 'update'
|
20
|
-
pull_request = pull_request_for_branch(branch)
|
21
|
+
pull_request = pull_request_for_branch(branch) unless options[:'skip-pull-request']
|
21
22
|
integrate_branch(branch, integration_branch, pull_request) unless options[:resume]
|
22
23
|
checkout_branch branch
|
23
24
|
end
|
@@ -20,11 +20,11 @@ module Gitx
|
|
20
20
|
run_git_cmd 'update'
|
21
21
|
|
22
22
|
pull_request = find_or_create_pull_request(branch)
|
23
|
-
return unless confirm_branch_status?(branch)
|
24
23
|
|
25
24
|
if (label = config.release_label)
|
26
25
|
label_pull_request pull_request, label
|
27
26
|
else
|
27
|
+
return unless confirm_branch_status?(branch)
|
28
28
|
checkout_branch config.base_branch
|
29
29
|
run_git_cmd 'pull', 'origin', config.base_branch
|
30
30
|
run_git_cmd 'merge', '--no-ff', '--message', commit_message(branch, pull_request), branch
|
@@ -8,7 +8,7 @@ module Gitx
|
|
8
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\-_]+$/.freeze
|
10
10
|
|
11
|
-
desc 'start', 'start a new git branch with latest changes from
|
11
|
+
desc 'start', 'start a new git branch with latest changes from main'
|
12
12
|
method_option :issue, type: :string, aliases: '-i', desc: 'Issue identifier'
|
13
13
|
def start(branch_name = nil)
|
14
14
|
branch_name = ask("What would you like to name your branch? (ex: #{EXAMPLE_BRANCH_NAMES.sample})") until valid_new_branch_name?(branch_name)
|
@@ -5,22 +5,31 @@ require 'gitx/cli/base_command'
|
|
5
5
|
module Gitx
|
6
6
|
module Cli
|
7
7
|
class UpdateCommand < BaseCommand
|
8
|
-
desc 'update', 'Update the current branch with latest changes from the remote feature branch and
|
8
|
+
desc 'update', 'Update the current branch with latest changes from the remote feature branch and main'
|
9
9
|
def update
|
10
10
|
say 'Updating '
|
11
11
|
say "#{current_branch.name} ", :green
|
12
12
|
say 'with latest changes from '
|
13
13
|
say config.base_branch, :green
|
14
14
|
|
15
|
+
update_base_branch
|
15
16
|
update_branch(current_branch.name) if remote_branch_exists?(current_branch.name)
|
16
|
-
update_branch(config.base_branch)
|
17
|
+
update_branch(config.base_branch, repository: '.')
|
18
|
+
|
17
19
|
run_git_cmd 'share'
|
18
20
|
end
|
19
21
|
|
20
22
|
private
|
21
23
|
|
22
|
-
def
|
23
|
-
|
24
|
+
def update_base_branch
|
25
|
+
branch_name = current_branch.name
|
26
|
+
checkout_branch(config.base_branch)
|
27
|
+
update_branch(config.base_branch)
|
28
|
+
checkout_branch(branch_name)
|
29
|
+
end
|
30
|
+
|
31
|
+
def update_branch(branch, repository: 'origin')
|
32
|
+
run_git_cmd 'pull', repository, branch
|
24
33
|
rescue Gitx::Executor::ExecutionError
|
25
34
|
raise MergeError, 'Merge conflict occurred. Please fix merge conflict and rerun the command'
|
26
35
|
end
|
data/lib/gitx/defaults.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
---
|
2
2
|
# default base branch
|
3
|
-
base_branch:
|
3
|
+
base_branch: main
|
4
4
|
|
5
5
|
# Label to use for releasing a pull request, if this is set a label will be
|
6
6
|
# added to the PR rather than merging to the base branch
|
@@ -14,16 +14,16 @@ aggregate_branches:
|
|
14
14
|
# list of branches that should not be deleted when cleaning up
|
15
15
|
reserved_branches:
|
16
16
|
- HEAD
|
17
|
-
-
|
17
|
+
- main
|
18
18
|
- next_release
|
19
19
|
- staging
|
20
20
|
- prototype
|
21
21
|
|
22
22
|
# list of supported branches for generating buildtags
|
23
23
|
taggable_branches:
|
24
|
-
-
|
24
|
+
- main
|
25
25
|
- staging
|
26
26
|
|
27
27
|
# list of commands to execute after releasing feature branch
|
28
28
|
after_release:
|
29
|
-
- git integrate
|
29
|
+
- git integrate --skip-pull-request
|
data/lib/gitx/github.rb
CHANGED
@@ -17,6 +17,7 @@ module Gitx
|
|
17
17
|
#
|
18
18
|
# This footer will automatically be stripped from the pull request description
|
19
19
|
MESSAGE
|
20
|
+
PULL_REQEST_TEMPLATE_FILE='.github/PULL_REQUEST_TEMPLATE.md'
|
20
21
|
|
21
22
|
def find_or_create_pull_request(branch)
|
22
23
|
pull_request = find_pull_request(branch)
|
@@ -82,6 +83,7 @@ module Gitx
|
|
82
83
|
description_template = []
|
83
84
|
description_template << "#{description}\n" if description
|
84
85
|
description_template << changelog
|
86
|
+
description_template << "#{pull_request_template}\n" if pull_request_template
|
85
87
|
|
86
88
|
ask_editor(description_template.join("\n"), editor: repo.config['core.editor'], footer: PULL_REQUEST_FOOTER)
|
87
89
|
end
|
@@ -90,6 +92,14 @@ module Gitx
|
|
90
92
|
options[:title] || branch.gsub(/[-_]/, ' ')
|
91
93
|
end
|
92
94
|
|
95
|
+
def pull_request_template_file
|
96
|
+
File.expand_path(PULL_REQEST_TEMPLATE_FILE)
|
97
|
+
end
|
98
|
+
|
99
|
+
def pull_request_template
|
100
|
+
@pull_request_template ||= File.exist?(pull_request_template_file) ? File.read(pull_request_template_file) : nil
|
101
|
+
end
|
102
|
+
|
93
103
|
# authorization token used for github API calls
|
94
104
|
# the token is cached on the filesystem for future use
|
95
105
|
# @return [String] auth token stored in git (current repo, user config or installed global settings)
|
data/lib/gitx/version.rb
CHANGED
@@ -78,74 +78,6 @@ http_interactions:
|
|
78
78
|
string: '[{"html_url":"https://path/to/html/pull/request","issue_url":"https://api/path/to/issue/url","number":10,"head":{"ref":"branch_name", "sha": "e12da4"}}]'
|
79
79
|
http_version:
|
80
80
|
recorded_at: Tue, 05 Aug 2014 16:36:03 GMT
|
81
|
-
- request:
|
82
|
-
method: get
|
83
|
-
uri: https://api.github.com/repos/wireframe/gitx/commits/feature-branch/status
|
84
|
-
body:
|
85
|
-
encoding: US-ASCII
|
86
|
-
string: ''
|
87
|
-
headers:
|
88
|
-
Accept:
|
89
|
-
- application/vnd.github.v3+json
|
90
|
-
User-Agent:
|
91
|
-
- Octokit Ruby Gem 3.4.0
|
92
|
-
Content-Type:
|
93
|
-
- application/json
|
94
|
-
Authorization:
|
95
|
-
- token 123123
|
96
|
-
Accept-Encoding:
|
97
|
-
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
98
|
-
response:
|
99
|
-
status:
|
100
|
-
code: 200
|
101
|
-
message: OK
|
102
|
-
headers:
|
103
|
-
Server:
|
104
|
-
- GitHub.com
|
105
|
-
Date:
|
106
|
-
- Wed, 10 Dec 2014 19:01:27 GMT
|
107
|
-
Content-Type:
|
108
|
-
- application/json; charset=utf-8
|
109
|
-
Transfer-Encoding:
|
110
|
-
- chunked
|
111
|
-
Status:
|
112
|
-
- 200 OK
|
113
|
-
X-Ratelimit-Limit:
|
114
|
-
- '5000'
|
115
|
-
X-Ratelimit-Remaining:
|
116
|
-
- '4993'
|
117
|
-
X-Ratelimit-Reset:
|
118
|
-
- '1418241620'
|
119
|
-
X-Oauth-Scopes:
|
120
|
-
- repo
|
121
|
-
X-Accepted-Oauth-Scopes:
|
122
|
-
- repo, repo:status
|
123
|
-
X-Github-Media-Type:
|
124
|
-
- github.v3; format=json
|
125
|
-
X-Xss-Protection:
|
126
|
-
- 1; mode=block
|
127
|
-
X-Frame-Options:
|
128
|
-
- deny
|
129
|
-
Content-Security-Policy:
|
130
|
-
- default-src 'none'
|
131
|
-
Access-Control-Allow-Credentials:
|
132
|
-
- 'true'
|
133
|
-
Access-Control-Expose-Headers:
|
134
|
-
- ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset,
|
135
|
-
X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
|
136
|
-
Access-Control-Allow-Origin:
|
137
|
-
- "*"
|
138
|
-
X-Github-Request-Id:
|
139
|
-
- C6CBAFAF:141D:2F27072:54889887
|
140
|
-
Strict-Transport-Security:
|
141
|
-
- max-age=31536000; includeSubdomains; preload
|
142
|
-
X-Content-Type-Options:
|
143
|
-
- nosniff
|
144
|
-
body:
|
145
|
-
encoding: UTF-8
|
146
|
-
string: '{"state":"success"}'
|
147
|
-
http_version:
|
148
|
-
recorded_at: Tue, 05 Aug 2014 16:36:03 GMT
|
149
81
|
- request:
|
150
82
|
method: post
|
151
83
|
uri: https://api.github.com/repos/wireframe/gitx/issues/10/labels
|
@@ -23,7 +23,7 @@ describe Gitx::Cli::BuildtagCommand do
|
|
23
23
|
expect { cli.buildtag }.to raise_error(/Branch must be one of the supported taggable branches/)
|
24
24
|
end
|
25
25
|
end
|
26
|
-
context 'when options[:branch] is NOT
|
26
|
+
context 'when options[:branch] is NOT main or staging' do
|
27
27
|
let(:options) do
|
28
28
|
{
|
29
29
|
branch: 'feature-branch'
|
@@ -33,16 +33,16 @@ describe Gitx::Cli::BuildtagCommand do
|
|
33
33
|
expect { cli.buildtag }.to raise_error(/Branch must be one of the supported taggable branches/)
|
34
34
|
end
|
35
35
|
end
|
36
|
-
context 'when options[:branch] is
|
36
|
+
context 'when options[:branch] is main' do
|
37
37
|
let(:options) do
|
38
38
|
{
|
39
|
-
branch: '
|
39
|
+
branch: 'main'
|
40
40
|
}
|
41
41
|
end
|
42
42
|
before do
|
43
43
|
Timecop.freeze(Time.utc(2013, 10, 30, 10, 21, 28)) do
|
44
|
-
expect(executor).to receive(:execute).with('git', 'tag', 'builds/
|
45
|
-
expect(executor).to receive(:execute).with('git', 'push', 'origin', 'builds/
|
44
|
+
expect(executor).to receive(:execute).with('git', 'tag', 'builds/main/2013-10-30-10-21-28', '--annotate', '--message', '[gitx] buildtag for main').ordered
|
45
|
+
expect(executor).to receive(:execute).with('git', 'push', 'origin', 'builds/main/2013-10-30-10-21-28').ordered
|
46
46
|
cli.buildtag
|
47
47
|
end
|
48
48
|
end
|
@@ -53,14 +53,14 @@ describe Gitx::Cli::BuildtagCommand do
|
|
53
53
|
context 'when options[:message] is passed' do
|
54
54
|
let(:options) do
|
55
55
|
{
|
56
|
-
branch: '
|
56
|
+
branch: 'main',
|
57
57
|
message: 'custom git commit message'
|
58
58
|
}
|
59
59
|
end
|
60
60
|
before do
|
61
61
|
Timecop.freeze(Time.utc(2013, 10, 30, 10, 21, 28)) do
|
62
|
-
expect(executor).to receive(:execute).with('git', 'tag', 'builds/
|
63
|
-
expect(executor).to receive(:execute).with('git', 'push', 'origin', 'builds/
|
62
|
+
expect(executor).to receive(:execute).with('git', 'tag', 'builds/main/2013-10-30-10-21-28', '--annotate', '--message', 'custom git commit message').ordered
|
63
|
+
expect(executor).to receive(:execute).with('git', 'push', 'origin', 'builds/main/2013-10-30-10-21-28').ordered
|
64
64
|
cli.buildtag
|
65
65
|
end
|
66
66
|
end
|
@@ -38,7 +38,7 @@ describe Gitx::Cli::CleanupCommand do
|
|
38
38
|
before do
|
39
39
|
allow(cli).to receive(:say)
|
40
40
|
|
41
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '
|
41
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'main').ordered
|
42
42
|
expect(executor).to receive(:execute).with('git', 'pull').ordered
|
43
43
|
expect(executor).to receive(:execute).with('git', 'remote', 'prune', 'origin').ordered
|
44
44
|
expect(executor).to receive(:execute).with('git', 'branch', '--delete', 'merged-local-feature').ordered
|
@@ -58,7 +58,7 @@ describe Gitx::Cli::CleanupCommand do
|
|
58
58
|
before do
|
59
59
|
allow(cli).to receive(:say)
|
60
60
|
|
61
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '
|
61
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'main').ordered
|
62
62
|
expect(executor).to receive(:execute).with('git', 'pull').ordered
|
63
63
|
expect(executor).to receive(:execute).with('git', 'remote', 'prune', 'origin').ordered
|
64
64
|
expect(executor).to receive(:execute).with('git', 'push', 'origin', '--delete', 'merged-remote-feature').ordered
|
@@ -78,7 +78,7 @@ describe Gitx::Cli::CleanupCommand do
|
|
78
78
|
before do
|
79
79
|
allow(cli).to receive(:say)
|
80
80
|
|
81
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '
|
81
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'main').ordered
|
82
82
|
expect(executor).to receive(:execute).with('git', 'pull').ordered
|
83
83
|
expect(executor).to receive(:execute).with('git', 'remote', 'prune', 'origin').ordered
|
84
84
|
expect(executor).to receive(:execute).with('git', 'push', 'origin', '--delete', 'merged-remote-feature/review').ordered
|
@@ -47,18 +47,18 @@ describe Gitx::Cli::IntegrateCommand do
|
|
47
47
|
should meet_expectations
|
48
48
|
end
|
49
49
|
end
|
50
|
-
context 'when current_branch ==
|
51
|
-
let(:current_branch) { double('fake branch', name: '
|
52
|
-
let(:local_branch_names) { ['
|
50
|
+
context 'when current_branch == main' do
|
51
|
+
let(:current_branch) { double('fake branch', name: 'main', head?: true) }
|
52
|
+
let(:local_branch_names) { ['main'] }
|
53
53
|
let(:remote_branch_names) { ['origin/staging'] }
|
54
54
|
before do
|
55
55
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
56
56
|
expect(executor).to receive(:execute).with('git', 'fetch', 'origin').ordered
|
57
57
|
expect(executor).to receive(:execute).with('git', 'branch', '--delete', '--force', 'staging').ordered
|
58
58
|
expect(executor).to receive(:execute).with('git', 'checkout', 'staging').ordered
|
59
|
-
expect(executor).to receive(:execute).with('git', 'merge', '--no-ff', '--message', '[gitx] Integrate
|
59
|
+
expect(executor).to receive(:execute).with('git', 'merge', '--no-ff', '--message', '[gitx] Integrate main into staging', 'main').ordered
|
60
60
|
expect(executor).to receive(:execute).with('git', 'push', 'origin', 'HEAD').ordered
|
61
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '
|
61
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'main').ordered
|
62
62
|
|
63
63
|
cli.integrate
|
64
64
|
end
|
@@ -85,7 +85,7 @@ describe Gitx::Cli::IntegrateCommand do
|
|
85
85
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
86
86
|
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
87
87
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
88
|
-
expect(executor).to receive(:execute).with('git', 'log', 'origin/
|
88
|
+
expect(executor).to receive(:execute).with('git', 'log', 'origin/main...feature-branch', '--reverse', '--no-merges', '--pretty=format:* %B').and_return(changelog).ordered
|
89
89
|
expect(executor).to receive(:execute).with('git', 'fetch', 'origin').ordered
|
90
90
|
expect(executor).to receive(:execute).with('git', 'branch', '--delete', '--force', 'staging').ordered
|
91
91
|
expect(executor).to receive(:execute).with('git', 'checkout', 'staging').ordered
|
@@ -109,7 +109,7 @@ describe Gitx::Cli::IntegrateCommand do
|
|
109
109
|
context 'when staging branch does not exist remotely' do
|
110
110
|
let(:remote_branch_names) { [] }
|
111
111
|
before do
|
112
|
-
expect(repo).to receive(:create_branch).with('staging', '
|
112
|
+
expect(repo).to receive(:create_branch).with('staging', 'main')
|
113
113
|
|
114
114
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
115
115
|
expect(executor).to receive(:execute).with('git', 'push', 'origin', 'staging:staging').ordered
|
@@ -214,5 +214,29 @@ describe Gitx::Cli::IntegrateCommand do
|
|
214
214
|
should meet_expectations
|
215
215
|
end
|
216
216
|
end
|
217
|
+
context 'with --skip-pull-request' do
|
218
|
+
let(:changelog) { '* made some fixes' }
|
219
|
+
let(:changelog) { '2013-01-01 did some stuff' }
|
220
|
+
let(:options) { { 'skip-pull-request': true } }
|
221
|
+
before do
|
222
|
+
allow(cli).to receive(:ask_editor).and_return('description')
|
223
|
+
|
224
|
+
expect(executor).to receive(:execute).with('git', 'update').ordered
|
225
|
+
expect(executor).to receive(:execute).with('git', 'fetch', 'origin').ordered
|
226
|
+
expect(executor).to receive(:execute).with('git', 'branch', '--delete', '--force', 'staging').ordered
|
227
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'staging').ordered
|
228
|
+
expect(executor).to receive(:execute).with('git', 'merge', '--no-ff', '--message', '[gitx] Integrate feature-branch into staging', 'feature-branch').ordered
|
229
|
+
expect(executor).to receive(:execute).with('git', 'push', 'origin', 'HEAD').ordered
|
230
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
231
|
+
|
232
|
+
cli.integrate
|
233
|
+
end
|
234
|
+
it 'does not create pull request' do
|
235
|
+
expect(WebMock).to_not have_requested(:post, 'https://api.github.com/repos/wireframe/gitx/pulls')
|
236
|
+
end
|
237
|
+
it 'runs expected commands' do
|
238
|
+
should meet_expectations
|
239
|
+
end
|
240
|
+
end
|
217
241
|
end
|
218
242
|
end
|
@@ -22,26 +22,26 @@ describe Gitx::Cli::NukeCommand do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
describe '#nuke' do
|
25
|
-
context 'when target branch == prototype and --destination ==
|
25
|
+
context 'when target branch == prototype and --destination == main' do
|
26
26
|
let(:options) do
|
27
27
|
{
|
28
28
|
destination: good_branch
|
29
29
|
}
|
30
30
|
end
|
31
|
-
let(:good_branch) { '
|
31
|
+
let(:good_branch) { 'main' }
|
32
32
|
let(:bad_branch) { 'prototype' }
|
33
|
-
let(:buildtag) { double(:tag, name: 'builds/
|
33
|
+
let(:buildtag) { double(:tag, name: 'builds/main/2013-10-01-01') }
|
34
34
|
let(:tags) { [buildtag] }
|
35
35
|
before do
|
36
36
|
expect(cli).to receive(:yes?).and_return(true)
|
37
37
|
|
38
38
|
expect(executor).to receive(:execute).with('git', 'fetch', '--tags').ordered
|
39
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '
|
39
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'main').ordered
|
40
40
|
expect(executor).to receive(:execute).with('git', 'branch', '--delete', '--force', 'prototype').ordered
|
41
41
|
expect(executor).to receive(:execute).with('git', 'push', 'origin', '--delete', 'prototype').ordered
|
42
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '-b', 'prototype', 'builds/
|
42
|
+
expect(executor).to receive(:execute).with('git', 'checkout', '-b', 'prototype', 'builds/main/2013-10-01-01').ordered
|
43
43
|
expect(executor).to receive(:execute).with('git', 'share').ordered
|
44
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '
|
44
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'main').ordered
|
45
45
|
|
46
46
|
cli.nuke bad_branch
|
47
47
|
end
|
@@ -50,21 +50,21 @@ describe Gitx::Cli::NukeCommand do
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
context 'when target branch == prototype and destination prompt == nil' do
|
53
|
-
let(:good_branch) { '
|
53
|
+
let(:good_branch) { 'main' }
|
54
54
|
let(:bad_branch) { 'prototype' }
|
55
|
-
let(:buildtag) { double(:tag, name: 'builds/
|
55
|
+
let(:buildtag) { double(:tag, name: 'builds/main/2013-10-01-01') }
|
56
56
|
let(:tags) { [buildtag] }
|
57
57
|
before do
|
58
58
|
expect(cli).to receive(:ask).and_return(good_branch)
|
59
59
|
expect(cli).to receive(:yes?).and_return(true)
|
60
60
|
|
61
61
|
expect(executor).to receive(:execute).with('git', 'fetch', '--tags').ordered
|
62
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '
|
62
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'main').ordered
|
63
63
|
expect(executor).to receive(:execute).with('git', 'branch', '--delete', '--force', 'prototype').ordered
|
64
64
|
expect(executor).to receive(:execute).with('git', 'push', 'origin', '--delete', 'prototype').ordered
|
65
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '-b', 'prototype', 'builds/
|
65
|
+
expect(executor).to receive(:execute).with('git', 'checkout', '-b', 'prototype', 'builds/main/2013-10-01-01').ordered
|
66
66
|
expect(executor).to receive(:execute).with('git', 'share').ordered
|
67
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '
|
67
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'main').ordered
|
68
68
|
|
69
69
|
cli.nuke 'prototype'
|
70
70
|
end
|
@@ -73,14 +73,14 @@ describe Gitx::Cli::NukeCommand do
|
|
73
73
|
end
|
74
74
|
end
|
75
75
|
context 'when user does not confirm nuking the target branch' do
|
76
|
-
let(:buildtag) { double(:tag, name: 'builds/
|
76
|
+
let(:buildtag) { double(:tag, name: 'builds/main/2013-10-01-01') }
|
77
77
|
let(:tags) { [buildtag] }
|
78
78
|
before do
|
79
|
-
expect(cli).to receive(:ask).and_return('
|
79
|
+
expect(cli).to receive(:ask).and_return('main')
|
80
80
|
expect(cli).to receive(:yes?).and_return(false)
|
81
81
|
|
82
82
|
expect(executor).to receive(:execute).with('git', 'fetch', '--tags').ordered
|
83
|
-
expect(executor).to_not receive(:execute).with('git', 'checkout', '
|
83
|
+
expect(executor).to_not receive(:execute).with('git', 'checkout', 'main').ordered
|
84
84
|
|
85
85
|
cli.nuke 'prototype'
|
86
86
|
end
|
@@ -94,7 +94,7 @@ describe Gitx::Cli::NukeCommand do
|
|
94
94
|
destination: good_branch
|
95
95
|
}
|
96
96
|
end
|
97
|
-
let(:good_branch) { '
|
97
|
+
let(:good_branch) { 'main' }
|
98
98
|
let(:bad_branch) { 'prototype' }
|
99
99
|
let(:buildtags) { '' }
|
100
100
|
it 'raises error' do
|
@@ -103,9 +103,9 @@ describe Gitx::Cli::NukeCommand do
|
|
103
103
|
end
|
104
104
|
end
|
105
105
|
context 'when database migrations exist and user cancels operation' do
|
106
|
-
let(:buildtag) { double(:tag, name: 'builds/
|
106
|
+
let(:buildtag) { double(:tag, name: 'builds/main/2013-10-01-01') }
|
107
107
|
let(:tags) { [buildtag] }
|
108
|
-
let(:good_branch) { '
|
108
|
+
let(:good_branch) { 'main' }
|
109
109
|
let(:bad_branch) { 'prototype' }
|
110
110
|
let(:migrations) do
|
111
111
|
%w[db/migrate/20140715194946_create_users.rb db/migrate/20140730063034_update_user_account.rb].join("\n")
|
@@ -115,8 +115,8 @@ describe Gitx::Cli::NukeCommand do
|
|
115
115
|
|
116
116
|
expect(executor).to receive(:execute).with('git', 'fetch', '--tags').ordered
|
117
117
|
expect(cli).to receive(:ask).and_return(good_branch)
|
118
|
-
expect(cli).to receive(:yes?).with('Reset prototype to builds/
|
119
|
-
expect(executor).to receive(:execute).with('git', 'diff', 'builds/
|
118
|
+
expect(cli).to receive(:yes?).with('Reset prototype to builds/main/2013-10-01-01? (y/n)', :green).and_return(true)
|
119
|
+
expect(executor).to receive(:execute).with('git', 'diff', 'builds/main/2013-10-01-01...prototype', '--name-only', 'db/migrate').and_return(migrations)
|
120
120
|
expect(cli).to receive(:yes?).with('Are you sure you want to nuke prototype? (y/n) ', :green).and_return(false)
|
121
121
|
|
122
122
|
cli.nuke 'prototype'
|
@@ -129,9 +129,9 @@ describe Gitx::Cli::NukeCommand do
|
|
129
129
|
end
|
130
130
|
end
|
131
131
|
context 'when database migrations exist and user approves operation' do
|
132
|
-
let(:buildtag) { double(:tag, name: 'builds/
|
132
|
+
let(:buildtag) { double(:tag, name: 'builds/main/2013-10-01-01') }
|
133
133
|
let(:tags) { [buildtag] }
|
134
|
-
let(:good_branch) { '
|
134
|
+
let(:good_branch) { 'main' }
|
135
135
|
let(:bad_branch) { 'prototype' }
|
136
136
|
let(:migrations) do
|
137
137
|
%w[db/migrate/20140715194946_create_users.rb db/migrate/20140730063034_update_user_account.rb].join("\n")
|
@@ -140,17 +140,17 @@ describe Gitx::Cli::NukeCommand do
|
|
140
140
|
FileUtils.mkdir_p('db/migrate')
|
141
141
|
|
142
142
|
expect(cli).to receive(:ask).and_return(good_branch)
|
143
|
-
expect(cli).to receive(:yes?).with('Reset prototype to builds/
|
144
|
-
expect(executor).to receive(:execute).with('git', 'diff', 'builds/
|
143
|
+
expect(cli).to receive(:yes?).with('Reset prototype to builds/main/2013-10-01-01? (y/n)', :green).and_return(true)
|
144
|
+
expect(executor).to receive(:execute).with('git', 'diff', 'builds/main/2013-10-01-01...prototype', '--name-only', 'db/migrate').and_return(migrations)
|
145
145
|
expect(cli).to receive(:yes?).with('Are you sure you want to nuke prototype? (y/n) ', :green).and_return(true)
|
146
146
|
|
147
147
|
expect(executor).to receive(:execute).with('git', 'fetch', '--tags').ordered
|
148
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '
|
148
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'main').ordered
|
149
149
|
expect(executor).to receive(:execute).with('git', 'branch', '--delete', '--force', 'prototype').ordered
|
150
150
|
expect(executor).to receive(:execute).with('git', 'push', 'origin', '--delete', 'prototype').ordered
|
151
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '-b', 'prototype', 'builds/
|
151
|
+
expect(executor).to receive(:execute).with('git', 'checkout', '-b', 'prototype', 'builds/main/2013-10-01-01').ordered
|
152
152
|
expect(executor).to receive(:execute).with('git', 'share').ordered
|
153
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '
|
153
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'main').ordered
|
154
154
|
|
155
155
|
cli.nuke 'prototype'
|
156
156
|
end
|
@@ -36,14 +36,14 @@ describe Gitx::Cli::ReleaseCommand do
|
|
36
36
|
before do
|
37
37
|
expect(repo).to receive(:workdir).and_return(temp_dir)
|
38
38
|
|
39
|
-
expect(cli).to receive(:yes?).with('Release feature-branch to
|
39
|
+
expect(cli).to receive(:yes?).with('Release feature-branch to main? (y/n)', :green).and_return(true)
|
40
40
|
expect(cli).to receive(:yes?).with('Branch status is currently: failure. Proceed with release? (y/n)', :red).and_return(false)
|
41
41
|
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
42
42
|
|
43
43
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
44
|
-
expect(executor).to_not receive(:execute).with('git', 'checkout', '
|
45
|
-
expect(executor).to_not receive(:execute).with('git', 'pull', 'origin', '
|
46
|
-
expect(executor).to_not receive(:execute).with('git', 'merge', '--no-ff', '--message', "[gitx] Release feature-branch to
|
44
|
+
expect(executor).to_not receive(:execute).with('git', 'checkout', 'main')
|
45
|
+
expect(executor).to_not receive(:execute).with('git', 'pull', 'origin', 'main')
|
46
|
+
expect(executor).to_not receive(:execute).with('git', 'merge', '--no-ff', '--message', "[gitx] Release feature-branch to main\n\nConnected to #10", 'feature-branch')
|
47
47
|
expect(executor).to_not receive(:execute).with('git', 'push', 'origin', 'HEAD')
|
48
48
|
|
49
49
|
VCR.use_cassette('pull_request_does_exist_with_failure_status') do
|
@@ -64,11 +64,11 @@ describe Gitx::Cli::ReleaseCommand do
|
|
64
64
|
|
65
65
|
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
66
66
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
67
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '
|
68
|
-
expect(executor).to receive(:execute).with('git', 'pull', 'origin', '
|
69
|
-
expect(executor).to receive(:execute).with('git', 'merge', '--no-ff', '--message', "[gitx] Release feature-branch to
|
67
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'main').ordered
|
68
|
+
expect(executor).to receive(:execute).with('git', 'pull', 'origin', 'main').ordered
|
69
|
+
expect(executor).to receive(:execute).with('git', 'merge', '--no-ff', '--message', "[gitx] Release feature-branch to main\n\nConnected to #10", 'feature-branch').ordered
|
70
70
|
expect(executor).to receive(:execute).with('git', 'push', 'origin', 'HEAD').ordered
|
71
|
-
expect(executor).to receive(:execute).with('git integrate').ordered
|
71
|
+
expect(executor).to receive(:execute).with('git integrate --skip-pull-request').ordered
|
72
72
|
|
73
73
|
VCR.use_cassette('pull_request_does_exist_with_success_status') do
|
74
74
|
cli.release
|
@@ -94,9 +94,9 @@ describe Gitx::Cli::ReleaseCommand do
|
|
94
94
|
|
95
95
|
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
96
96
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
97
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '
|
98
|
-
expect(executor).to receive(:execute).with('git', 'pull', 'origin', '
|
99
|
-
expect(executor).to receive(:execute).with('git', 'merge', '--no-ff', '--message', "[gitx] Release feature-branch to
|
97
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'main').ordered
|
98
|
+
expect(executor).to receive(:execute).with('git', 'pull', 'origin', 'main').ordered
|
99
|
+
expect(executor).to receive(:execute).with('git', 'merge', '--no-ff', '--message', "[gitx] Release feature-branch to main\n\nConnected to #10", 'feature-branch').ordered
|
100
100
|
expect(executor).to receive(:execute).with('git', 'push', 'origin', 'HEAD').ordered
|
101
101
|
expect(executor).to receive(:execute).with('echo hello').ordered
|
102
102
|
|
@@ -117,11 +117,11 @@ describe Gitx::Cli::ReleaseCommand do
|
|
117
117
|
|
118
118
|
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
119
119
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
120
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '
|
121
|
-
expect(executor).to receive(:execute).with('git', 'pull', 'origin', '
|
122
|
-
expect(executor).to receive(:execute).with('git', 'merge', '--no-ff', '--message', "[gitx] Release feature-branch to
|
120
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'main').ordered
|
121
|
+
expect(executor).to receive(:execute).with('git', 'pull', 'origin', 'main').ordered
|
122
|
+
expect(executor).to receive(:execute).with('git', 'merge', '--no-ff', '--message', "[gitx] Release feature-branch to main\n\nConnected to #10", 'feature-branch').ordered
|
123
123
|
expect(executor).to receive(:execute).with('git', 'push', 'origin', 'HEAD').ordered
|
124
|
-
expect(executor).to receive(:execute).with('git integrate').ordered
|
124
|
+
expect(executor).to receive(:execute).with('git integrate --skip-pull-request').ordered
|
125
125
|
|
126
126
|
VCR.use_cassette('pull_request_does_exist_with_success_status') do
|
127
127
|
cli.release 'feature-branch'
|
@@ -147,19 +147,19 @@ describe Gitx::Cli::ReleaseCommand do
|
|
147
147
|
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
148
148
|
allow(cli).to receive(:ask_editor).and_return('description')
|
149
149
|
|
150
|
-
expect(cli).to receive(:yes?).with('Release feature-branch to
|
150
|
+
expect(cli).to receive(:yes?).with('Release feature-branch to main? (y/n)', :green).and_return(true)
|
151
151
|
expect(cli).to receive(:yes?).with('Branch status is currently: pending. Proceed with release? (y/n)', :red).and_return(true)
|
152
152
|
|
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
155
|
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
156
156
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
157
|
-
expect(executor).to receive(:execute).with('git', 'log', 'origin/
|
158
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '
|
159
|
-
expect(executor).to receive(:execute).with('git', 'pull', 'origin', '
|
160
|
-
expect(executor).to receive(:execute).with('git', 'merge', '--no-ff', '--message', "[gitx] Release feature-branch to
|
157
|
+
expect(executor).to receive(:execute).with('git', 'log', 'origin/main...feature-branch', '--reverse', '--no-merges', '--pretty=format:* %B').and_return('2013-01-01 did some stuff').ordered
|
158
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'main').ordered
|
159
|
+
expect(executor).to receive(:execute).with('git', 'pull', 'origin', 'main').ordered
|
160
|
+
expect(executor).to receive(:execute).with('git', 'merge', '--no-ff', '--message', "[gitx] Release feature-branch to main\n\nConnected to #10", 'feature-branch').ordered
|
161
161
|
expect(executor).to receive(:execute).with('git', 'push', 'origin', 'HEAD').ordered
|
162
|
-
expect(executor).to receive(:execute).with('git integrate').ordered
|
162
|
+
expect(executor).to receive(:execute).with('git integrate --skip-pull-request').ordered
|
163
163
|
|
164
164
|
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' })
|
165
165
|
VCR.use_cassette('pull_request_does_not_exist') do
|
@@ -187,11 +187,11 @@ describe Gitx::Cli::ReleaseCommand do
|
|
187
187
|
|
188
188
|
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
189
189
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
190
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '
|
191
|
-
expect(executor).to receive(:execute).with('git', 'pull', 'origin', '
|
192
|
-
expect(executor).to receive(:execute).with('git', 'merge', '--no-ff', '--message', "[gitx] Release feature-branch to
|
190
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'main').ordered
|
191
|
+
expect(executor).to receive(:execute).with('git', 'pull', 'origin', 'main').ordered
|
192
|
+
expect(executor).to receive(:execute).with('git', 'merge', '--no-ff', '--message', "[gitx] Release feature-branch to main\n\nConnected to #10", 'feature-branch').ordered
|
193
193
|
expect(executor).to receive(:execute).with('git', 'push', 'origin', 'HEAD').ordered
|
194
|
-
expect(executor).to receive(:execute).with('git integrate').ordered
|
194
|
+
expect(executor).to receive(:execute).with('git integrate --skip-pull-request').ordered
|
195
195
|
expect(executor).to receive(:execute).with('git cleanup').ordered
|
196
196
|
|
197
197
|
VCR.use_cassette('pull_request_does_exist_with_success_status') do
|
@@ -202,7 +202,7 @@ describe Gitx::Cli::ReleaseCommand do
|
|
202
202
|
should meet_expectations
|
203
203
|
end
|
204
204
|
end
|
205
|
-
context 'when user confirms release
|
205
|
+
context 'when user confirms release with release_label config' do
|
206
206
|
let(:gitx_config) do
|
207
207
|
{
|
208
208
|
'release_label' => 'release-me'
|
@@ -218,16 +218,16 @@ describe Gitx::Cli::ReleaseCommand do
|
|
218
218
|
expect(cli).to receive(:label_pull_request).with(having_attributes(number: 10), 'release-me').and_call_original
|
219
219
|
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
220
220
|
|
221
|
-
expect(executor).to_not receive(:execute).with('git', 'checkout', '
|
222
|
-
expect(executor).to_not receive(:execute).with('git', 'pull', 'origin', '
|
223
|
-
expect(executor).to_not receive(:execute).with('git', 'merge', '--no-ff', '--message', "[gitx] Release feature-branch to
|
221
|
+
expect(executor).to_not receive(:execute).with('git', 'checkout', 'main')
|
222
|
+
expect(executor).to_not receive(:execute).with('git', 'pull', 'origin', 'main')
|
223
|
+
expect(executor).to_not receive(:execute).with('git', 'merge', '--no-ff', '--message', "[gitx] Release feature-branch to main\n\nConnected to #10", 'feature-branch')
|
224
224
|
expect(executor).to_not receive(:execute).with('git', 'push', 'origin', 'HEAD')
|
225
225
|
|
226
226
|
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
227
227
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
228
|
-
expect(executor).to receive(:execute).with('git integrate').ordered
|
228
|
+
expect(executor).to receive(:execute).with('git integrate --skip-pull-request').ordered
|
229
229
|
|
230
|
-
VCR.use_cassette('
|
230
|
+
VCR.use_cassette('pull_request_does_exist_and_then_add_label') do
|
231
231
|
cli.release
|
232
232
|
end
|
233
233
|
end
|
@@ -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/
|
49
|
+
expect(executor).to receive(:execute).with('git', 'log', 'origin/main...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' })
|
@@ -63,8 +63,12 @@ describe Gitx::Cli::ReviewCommand do
|
|
63
63
|
end
|
64
64
|
end
|
65
65
|
context 'when target branch is not nil and pull request does not exist' do
|
66
|
+
subject(:review) do
|
67
|
+
VCR.use_cassette('pull_request_does_not_exist') do
|
68
|
+
cli.review 'feature-branch'
|
69
|
+
end
|
70
|
+
end
|
66
71
|
let(:authorization_token) { '123123' }
|
67
|
-
let(:changelog) { '* made some fixes' }
|
68
72
|
let(:fake_update_command) { double('fake update command', update: nil) }
|
69
73
|
let(:new_pull_request) do
|
70
74
|
{
|
@@ -77,21 +81,18 @@ describe Gitx::Cli::ReviewCommand do
|
|
77
81
|
}
|
78
82
|
end
|
79
83
|
let(:changelog) { "* old commit\n\n* new commit" }
|
84
|
+
let(:pull_request_body) { changelog }
|
80
85
|
let(:pull_request_description) { 'description' }
|
81
86
|
before do
|
82
87
|
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
83
88
|
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
84
89
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
85
|
-
expect(executor).to receive(:execute).with('git', 'log', 'origin/
|
86
|
-
expect(cli).to receive(:ask_editor).with(
|
90
|
+
expect(executor).to receive(:execute).with('git', 'log', 'origin/main...feature-branch', '--reverse', '--no-merges', '--pretty=format:* %B').and_return(changelog).ordered
|
91
|
+
expect(cli).to receive(:ask_editor).with(pull_request_body, hash_including(footer: Gitx::Github::PULL_REQUEST_FOOTER)).and_return(pull_request_description)
|
87
92
|
|
88
93
|
stub_request(:post, 'https://api.github.com/repos/wireframe/gitx/pulls')
|
89
|
-
.with(body: { base: '
|
94
|
+
.with(body: { base: 'main', head: 'feature-branch', title: 'feature branch', body: pull_request_description }.to_json)
|
90
95
|
.to_return(status: 201, body: new_pull_request.to_json, headers: { 'Content-Type' => 'application/json' })
|
91
|
-
|
92
|
-
VCR.use_cassette('pull_request_does_not_exist') do
|
93
|
-
cli.review 'feature-branch'
|
94
|
-
end
|
95
96
|
end
|
96
97
|
it 'creates github pull request' do
|
97
98
|
should meet_expectations
|
@@ -99,6 +100,28 @@ describe Gitx::Cli::ReviewCommand do
|
|
99
100
|
it 'runs expected commands' do
|
100
101
|
should meet_expectations
|
101
102
|
end
|
103
|
+
context 'when PULL_REQUEST_TEMPLATE file exists' do
|
104
|
+
let(:pull_request_template) do
|
105
|
+
"## Summary\nPut your summary here\n## Artifacts\n- list\n- your\n-artifacts"
|
106
|
+
end
|
107
|
+
let(:pull_request_body) do
|
108
|
+
"#{changelog}\n#{pull_request_template}\n"
|
109
|
+
end
|
110
|
+
before do
|
111
|
+
expect(cli).to receive(:pull_request_template).and_return(pull_request_template).twice
|
112
|
+
|
113
|
+
stub_request(:post, 'https://api.github.com/repos/wireframe/gitx/pulls')
|
114
|
+
.with(body: { base: 'main', head: 'feature-branch', title: 'feature branch', body: pull_request_description }.to_json)
|
115
|
+
.to_return(status: 201, body: new_pull_request.to_json, headers: { 'Content-Type' => 'application/json' })
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'creates github pull request' do
|
119
|
+
should meet_expectations
|
120
|
+
end
|
121
|
+
it 'runs expected commands' do
|
122
|
+
should meet_expectations
|
123
|
+
end
|
124
|
+
end
|
102
125
|
end
|
103
126
|
context 'when authorization_token is missing' do
|
104
127
|
let(:authorization_token) { nil }
|
@@ -16,9 +16,9 @@ describe Gitx::Cli::StartCommand do
|
|
16
16
|
describe '#start' do
|
17
17
|
context 'when user inputs branch that is valid' do
|
18
18
|
before do
|
19
|
-
expect(cli).to receive(:checkout_branch).with('
|
19
|
+
expect(cli).to receive(:checkout_branch).with('main').ordered
|
20
20
|
expect(executor).to receive(:execute).with('git', 'pull').ordered
|
21
|
-
expect(repo).to receive(:create_branch).with('new-branch', '
|
21
|
+
expect(repo).to receive(:create_branch).with('new-branch', 'main').ordered
|
22
22
|
expect(cli).to receive(:checkout_branch).with('new-branch').ordered
|
23
23
|
expect(executor).to receive(:execute).with('git', 'commit', '--allow-empty', '--message', '[gitx] Start work on new-branch').ordered
|
24
24
|
|
@@ -30,9 +30,9 @@ describe Gitx::Cli::StartCommand do
|
|
30
30
|
end
|
31
31
|
context 'when user inputs branch with slash' do
|
32
32
|
before do
|
33
|
-
expect(cli).to receive(:checkout_branch).with('
|
33
|
+
expect(cli).to receive(:checkout_branch).with('main').ordered
|
34
34
|
expect(executor).to receive(:execute).with('git', 'pull').ordered
|
35
|
-
expect(repo).to receive(:create_branch).with('foo/ryan', '
|
35
|
+
expect(repo).to receive(:create_branch).with('foo/ryan', 'main').ordered
|
36
36
|
expect(cli).to receive(:checkout_branch).with('foo/ryan').ordered
|
37
37
|
expect(executor).to receive(:execute).with('git', 'commit', '--allow-empty', '--message', '[gitx] Start work on foo/ryan').ordered
|
38
38
|
|
@@ -46,9 +46,9 @@ describe Gitx::Cli::StartCommand do
|
|
46
46
|
before do
|
47
47
|
expect(cli).to receive(:ask).and_return('new-branch')
|
48
48
|
|
49
|
-
expect(cli).to receive(:checkout_branch).with('
|
49
|
+
expect(cli).to receive(:checkout_branch).with('main').ordered
|
50
50
|
expect(executor).to receive(:execute).with('git', 'pull').ordered
|
51
|
-
expect(repo).to receive(:create_branch).with('new-branch', '
|
51
|
+
expect(repo).to receive(:create_branch).with('new-branch', 'main').ordered
|
52
52
|
expect(cli).to receive(:checkout_branch).with('new-branch').ordered
|
53
53
|
expect(executor).to receive(:execute).with('git', 'commit', '--allow-empty', '--message', '[gitx] Start work on new-branch').ordered
|
54
54
|
|
@@ -62,9 +62,9 @@ describe Gitx::Cli::StartCommand do
|
|
62
62
|
before do
|
63
63
|
expect(cli).to receive(:ask).and_return('new-branch')
|
64
64
|
|
65
|
-
expect(cli).to receive(:checkout_branch).with('
|
65
|
+
expect(cli).to receive(:checkout_branch).with('main').ordered
|
66
66
|
expect(executor).to receive(:execute).with('git', 'pull').ordered
|
67
|
-
expect(repo).to receive(:create_branch).with('new-branch', '
|
67
|
+
expect(repo).to receive(:create_branch).with('new-branch', 'main').ordered
|
68
68
|
expect(cli).to receive(:checkout_branch).with('new-branch').ordered
|
69
69
|
expect(executor).to receive(:execute).with('git', 'commit', '--allow-empty', '--message', '[gitx] Start work on new-branch').ordered
|
70
70
|
|
@@ -81,9 +81,9 @@ describe Gitx::Cli::StartCommand do
|
|
81
81
|
|
82
82
|
expect(cli).to receive(:ask).and_return('new-branch')
|
83
83
|
|
84
|
-
expect(cli).to receive(:checkout_branch).with('
|
84
|
+
expect(cli).to receive(:checkout_branch).with('main').ordered
|
85
85
|
expect(executor).to receive(:execute).with('git', 'pull').ordered
|
86
|
-
expect(repo).to receive(:create_branch).with('new-branch', '
|
86
|
+
expect(repo).to receive(:create_branch).with('new-branch', 'main').ordered
|
87
87
|
expect(cli).to receive(:checkout_branch).with('new-branch').ordered
|
88
88
|
expect(executor).to receive(:execute).with('git', 'commit', '--allow-empty', '--message', '[gitx] Start work on new-branch').ordered
|
89
89
|
|
@@ -100,9 +100,9 @@ describe Gitx::Cli::StartCommand do
|
|
100
100
|
|
101
101
|
expect(cli).to receive(:ask).and_return('new-branch')
|
102
102
|
|
103
|
-
expect(cli).to receive(:checkout_branch).with('
|
103
|
+
expect(cli).to receive(:checkout_branch).with('main').ordered
|
104
104
|
expect(executor).to receive(:execute).with('git', 'pull').ordered
|
105
|
-
expect(repo).to receive(:create_branch).with('new-branch', '
|
105
|
+
expect(repo).to receive(:create_branch).with('new-branch', 'main').ordered
|
106
106
|
expect(cli).to receive(:checkout_branch).with('new-branch').ordered
|
107
107
|
expect(executor).to receive(:execute).with('git', 'commit', '--allow-empty', '--message', '[gitx] Start work on new-branch').ordered
|
108
108
|
|
@@ -119,9 +119,9 @@ describe Gitx::Cli::StartCommand do
|
|
119
119
|
}
|
120
120
|
end
|
121
121
|
before do
|
122
|
-
expect(cli).to receive(:checkout_branch).with('
|
122
|
+
expect(cli).to receive(:checkout_branch).with('main').ordered
|
123
123
|
expect(executor).to receive(:execute).with('git', 'pull').ordered
|
124
|
-
expect(repo).to receive(:create_branch).with('new-branch', '
|
124
|
+
expect(repo).to receive(:create_branch).with('new-branch', 'main').ordered
|
125
125
|
expect(cli).to receive(:checkout_branch).with('new-branch').ordered
|
126
126
|
expect(executor).to receive(:execute).with('git', 'commit', '--allow-empty', '--message', "[gitx] Start work on new-branch\n\nConnected to #10").ordered
|
127
127
|
|
@@ -138,9 +138,9 @@ describe Gitx::Cli::StartCommand do
|
|
138
138
|
}
|
139
139
|
end
|
140
140
|
before do
|
141
|
-
expect(cli).to receive(:checkout_branch).with('
|
141
|
+
expect(cli).to receive(:checkout_branch).with('main').ordered
|
142
142
|
expect(executor).to receive(:execute).with('git', 'pull').ordered
|
143
|
-
expect(repo).to receive(:create_branch).with('new-branch', '
|
143
|
+
expect(repo).to receive(:create_branch).with('new-branch', 'main').ordered
|
144
144
|
expect(cli).to receive(:checkout_branch).with('new-branch').ordered
|
145
145
|
expect(executor).to receive(:execute).with('git', 'commit', '--allow-empty', '--message', "[gitx] Start work on new-branch\n\nConnected to FOO-123").ordered
|
146
146
|
|
@@ -27,8 +27,11 @@ describe Gitx::Cli::UpdateCommand do
|
|
27
27
|
before do
|
28
28
|
allow(cli).to receive(:say)
|
29
29
|
|
30
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'main').ordered
|
31
|
+
expect(executor).to receive(:execute).with('git', 'pull', 'origin', 'main').ordered
|
32
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
30
33
|
expect(executor).to receive(:execute).with('git', 'pull', 'origin', 'feature-branch').ordered
|
31
|
-
expect(executor).to receive(:execute).with('git', 'pull', '
|
34
|
+
expect(executor).to receive(:execute).with('git', 'pull', '.', 'main').ordered
|
32
35
|
expect(executor).to receive(:execute).with('git', 'share').ordered
|
33
36
|
|
34
37
|
cli.update
|
@@ -41,6 +44,9 @@ describe Gitx::Cli::UpdateCommand do
|
|
41
44
|
before do
|
42
45
|
allow(cli).to receive(:say)
|
43
46
|
|
47
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'main').ordered
|
48
|
+
expect(executor).to receive(:execute).with('git', 'pull', 'origin', 'main').ordered
|
49
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
44
50
|
expect(executor).to receive(:execute).with('git', 'pull', 'origin', 'feature-branch').and_raise(Gitx::Executor::ExecutionError).ordered
|
45
51
|
|
46
52
|
expect { cli.update }.to raise_error(Gitx::Cli::BaseCommand::MergeError, 'Merge conflict occurred. Please fix merge conflict and rerun the command')
|
@@ -49,12 +55,15 @@ describe Gitx::Cli::UpdateCommand do
|
|
49
55
|
should meet_expectations
|
50
56
|
end
|
51
57
|
end
|
52
|
-
context 'when merge conflicts occur when pulling remote
|
58
|
+
context 'when merge conflicts occur when pulling remote main branch' do
|
53
59
|
before do
|
54
60
|
allow(cli).to receive(:say)
|
55
61
|
|
62
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'main').ordered
|
63
|
+
expect(executor).to receive(:execute).with('git', 'pull', 'origin', 'main').ordered
|
64
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
56
65
|
expect(executor).to receive(:execute).with('git', 'pull', 'origin', 'feature-branch').ordered
|
57
|
-
expect(executor).to receive(:execute).with('git', 'pull', '
|
66
|
+
expect(executor).to receive(:execute).with('git', 'pull', '.', 'main').and_raise(Gitx::Executor::ExecutionError).ordered
|
58
67
|
|
59
68
|
expect { cli.update }.to raise_error(Gitx::Cli::BaseCommand::MergeError, 'Merge conflict occurred. Please fix merge conflict and rerun the command')
|
60
69
|
end
|
@@ -68,7 +77,11 @@ describe Gitx::Cli::UpdateCommand do
|
|
68
77
|
allow(cli).to receive(:say)
|
69
78
|
|
70
79
|
expect(executor).not_to receive(:execute).with('git', 'pull', 'origin', 'feature-branch')
|
71
|
-
expect(executor).to receive(:execute).with('git', '
|
80
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'main').ordered
|
81
|
+
expect(executor).to receive(:execute).with('git', 'pull', 'origin', 'main').ordered
|
82
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
83
|
+
expect(executor).to receive(:execute).with('git', 'pull', '.', 'main').ordered
|
84
|
+
expect(executor).to receive(:execute).with('git', 'share').ordered
|
72
85
|
|
73
86
|
cli.update
|
74
87
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Sonnek
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-08-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: octokit
|
@@ -238,9 +238,9 @@ files:
|
|
238
238
|
- lib/gitx/extensions/thor.rb
|
239
239
|
- lib/gitx/github.rb
|
240
240
|
- lib/gitx/version.rb
|
241
|
+
- spec/fixtures/vcr_cassettes/pull_request_does_exist_and_then_add_label.yml
|
241
242
|
- spec/fixtures/vcr_cassettes/pull_request_does_exist_with_failure_status.yml
|
242
243
|
- spec/fixtures/vcr_cassettes/pull_request_does_exist_with_success_status.yml
|
243
|
-
- spec/fixtures/vcr_cassettes/pull_request_does_exist_with_success_status_and_then_add_label.yml
|
244
244
|
- spec/fixtures/vcr_cassettes/pull_request_does_not_exist.yml
|
245
245
|
- spec/gitx/cli/base_command_spec.rb
|
246
246
|
- spec/gitx/cli/buildtag_command_spec.rb
|
@@ -287,9 +287,9 @@ signing_key:
|
|
287
287
|
specification_version: 4
|
288
288
|
summary: Utility scripts for Git to increase productivity for common operations
|
289
289
|
test_files:
|
290
|
+
- spec/fixtures/vcr_cassettes/pull_request_does_exist_and_then_add_label.yml
|
290
291
|
- spec/fixtures/vcr_cassettes/pull_request_does_exist_with_failure_status.yml
|
291
292
|
- spec/fixtures/vcr_cassettes/pull_request_does_exist_with_success_status.yml
|
292
|
-
- spec/fixtures/vcr_cassettes/pull_request_does_exist_with_success_status_and_then_add_label.yml
|
293
293
|
- spec/fixtures/vcr_cassettes/pull_request_does_not_exist.yml
|
294
294
|
- spec/gitx/cli/base_command_spec.rb
|
295
295
|
- spec/gitx/cli/buildtag_command_spec.rb
|