gitx 3.1.1 → 4.0.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 +4 -4
- data/.rubocop.yml +5 -2
- data/.ruby-version +1 -1
- data/CONTRIBUTING.md +1 -1
- data/README.md +5 -5
- data/gitx.gemspec +13 -12
- data/lib/gitx/cli/cleanup_command.rb +1 -1
- data/lib/gitx/cli/release_command.rb +9 -5
- data/lib/gitx/cli/start_command.rb +1 -1
- data/lib/gitx/cli/update_command.rb +1 -1
- data/lib/gitx/configuration.rb +4 -0
- data/lib/gitx/defaults.yml +7 -3
- data/lib/gitx/github.rb +6 -4
- data/lib/gitx/version.rb +1 -1
- data/spec/fixtures/vcr_cassettes/pull_request_does_exist_with_success_status.yml +2 -1
- data/spec/fixtures/vcr_cassettes/pull_request_does_exist_with_success_status_and_then_add_label.yml +228 -0
- 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 +8 -7
- data/spec/gitx/cli/nuke_command_spec.rb +26 -26
- data/spec/gitx/cli/release_command_spec.rb +56 -21
- data/spec/gitx/cli/review_command_spec.rb +3 -3
- data/spec/gitx/cli/start_command_spec.rb +16 -16
- data/spec/gitx/cli/update_command_spec.rb +4 -4
- data/spec/spec_helper.rb +1 -1
- metadata +11 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f363b92a7270ced1b7e223e2bed065c03a57fdd71c039345d582b87cca05ed05
|
4
|
+
data.tar.gz: 6df469f9e3875c42ce1e6b9267fee73606cbc0ad17caa51a856dbbbe2b18847d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99b0b5cbdc523dc710533a84f921868e0db1067fab2500e9314030e0332a636f00ee8ca63f71fe8b147ea48ac3d43653590d7fdc906bb7aff21a9a9134d91d0a
|
7
|
+
data.tar.gz: a7aacec3a63f9cbbab844663cd4ad5cab48ba6745278790bffb156ef87667b35c23889c250acf71bbe382140583025757a73fd501f04c6de0dedc421fc40b4da
|
data/.rubocop.yml
CHANGED
@@ -6,6 +6,9 @@
|
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
8
8
|
|
9
|
+
AllCops:
|
10
|
+
TargetRubyVersion: '2.6'
|
11
|
+
|
9
12
|
FileName:
|
10
13
|
Exclude:
|
11
14
|
- bin/*
|
@@ -25,7 +28,7 @@ Metrics/AbcSize:
|
|
25
28
|
|
26
29
|
# Offense count: 2
|
27
30
|
Metrics/CyclomaticComplexity:
|
28
|
-
Max:
|
31
|
+
Max: 8
|
29
32
|
|
30
33
|
# Offense count: 5
|
31
34
|
# Configuration parameters: CountComments.
|
@@ -35,7 +38,7 @@ Metrics/MethodLength:
|
|
35
38
|
# Offense count: 1
|
36
39
|
# Configuration parameters: CountComments.
|
37
40
|
Metrics/ModuleLength:
|
38
|
-
Max:
|
41
|
+
Max: 150
|
39
42
|
|
40
43
|
# Offense count: 3
|
41
44
|
Style/RescueModifier:
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.7.3
|
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,13 +47,13 @@ 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
|
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
|
-
* pull latest code from
|
53
|
+
* pull latest code from the base branch
|
54
54
|
* prompt user to confirm they actually want to perform the release
|
55
55
|
* check if pull request commit status is currently successful
|
56
|
-
* merge current branch into
|
56
|
+
* merge current branch into the base branch (or add release label if configured)
|
57
57
|
* (optional) cleanup merged branches from remote server
|
58
58
|
|
59
59
|
options:
|
@@ -63,7 +63,7 @@ options:
|
|
63
63
|
|
64
64
|
## git cleanup
|
65
65
|
|
66
|
-
delete released branches after they have been merged into
|
66
|
+
delete released branches after they have been merged into the base branch.
|
67
67
|
|
68
68
|
## git nuke <aggregate_branch_name>
|
69
69
|
|
data/gitx.gemspec
CHANGED
@@ -3,21 +3,22 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
3
|
require 'gitx/version'
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
|
-
spec.name
|
7
|
-
spec.authors
|
8
|
-
spec.email
|
9
|
-
spec.description
|
10
|
-
spec.summary
|
11
|
-
spec.homepage
|
12
|
-
spec.license
|
6
|
+
spec.name = 'gitx'
|
7
|
+
spec.authors = ['Ryan Sonnek']
|
8
|
+
spec.email = ['ryan.sonnek@gmail.com']
|
9
|
+
spec.description = 'Git eXtensions for improved development workflows'
|
10
|
+
spec.summary = 'Utility scripts for Git to increase productivity for common operations'
|
11
|
+
spec.homepage = ''
|
12
|
+
spec.license = 'MIT'
|
13
|
+
spec.required_ruby_version = '>= 2.6.7'
|
13
14
|
|
14
|
-
spec.files
|
15
|
-
spec.executables
|
16
|
-
spec.test_files
|
17
|
-
spec.require_paths
|
15
|
+
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
16
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
|
+
spec.require_paths = ['lib']
|
18
19
|
|
19
20
|
spec.add_runtime_dependency 'octokit'
|
20
|
-
spec.add_runtime_dependency 'rugged', '~> 0.
|
21
|
+
spec.add_runtime_dependency 'rugged', '~> 0.27.10'
|
21
22
|
spec.add_runtime_dependency 'thor'
|
22
23
|
|
23
24
|
spec.add_development_dependency 'bundler'
|
@@ -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 '
|
@@ -12,7 +12,7 @@ module Gitx
|
|
12
12
|
method_option :cleanup, type: :boolean, desc: 'cleanup merged branches after release'
|
13
13
|
def release(branch = nil)
|
14
14
|
branch ||= current_branch.name
|
15
|
-
|
15
|
+
|
16
16
|
return unless yes?("Release #{branch} to #{config.base_branch}? (y/n)", :green)
|
17
17
|
|
18
18
|
assert_not_protected_branch!(branch, 'release')
|
@@ -22,10 +22,14 @@ module Gitx
|
|
22
22
|
pull_request = find_or_create_pull_request(branch)
|
23
23
|
return unless confirm_branch_status?(branch)
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
25
|
+
if (label = config.release_label)
|
26
|
+
label_pull_request pull_request, label
|
27
|
+
else
|
28
|
+
checkout_branch config.base_branch
|
29
|
+
run_git_cmd 'pull', 'origin', config.base_branch
|
30
|
+
run_git_cmd 'merge', '--no-ff', '--message', commit_message(branch, pull_request), branch
|
31
|
+
run_git_cmd 'push', 'origin', 'HEAD'
|
32
|
+
end
|
29
33
|
|
30
34
|
after_release
|
31
35
|
end
|
@@ -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,7 +5,7 @@ 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
|
data/lib/gitx/configuration.rb
CHANGED
data/lib/gitx/defaults.yml
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
---
|
2
2
|
# default base branch
|
3
|
-
base_branch:
|
3
|
+
base_branch: main
|
4
|
+
|
5
|
+
# Label to use for releasing a pull request, if this is set a label will be
|
6
|
+
# added to the PR rather than merging to the base branch
|
7
|
+
release_label:
|
4
8
|
|
5
9
|
# list of branches eligable for integration
|
6
10
|
aggregate_branches:
|
@@ -10,14 +14,14 @@ aggregate_branches:
|
|
10
14
|
# list of branches that should not be deleted when cleaning up
|
11
15
|
reserved_branches:
|
12
16
|
- HEAD
|
13
|
-
-
|
17
|
+
- main
|
14
18
|
- next_release
|
15
19
|
- staging
|
16
20
|
- prototype
|
17
21
|
|
18
22
|
# list of supported branches for generating buildtags
|
19
23
|
taggable_branches:
|
20
|
-
-
|
24
|
+
- main
|
21
25
|
- staging
|
22
26
|
|
23
27
|
# list of commands to execute after releasing feature branch
|
data/lib/gitx/github.rb
CHANGED
@@ -57,6 +57,10 @@ module Gitx
|
|
57
57
|
github_client.create_status(github_slug, commit_sha, state, context: REVIEW_CONTEXT, description: description)
|
58
58
|
end
|
59
59
|
|
60
|
+
def label_pull_request(pull_request, label)
|
61
|
+
github_client.add_labels_to_an_issue(github_slug, pull_request.number, [label])
|
62
|
+
end
|
63
|
+
|
60
64
|
# @see http://developer.github.com/v3/pulls/
|
61
65
|
def create_pull_request(branch)
|
62
66
|
say 'Creating pull request for '
|
@@ -143,7 +147,7 @@ module Gitx
|
|
143
147
|
# https://github.com/wireframe/gitx.git #=> wireframe/gitx
|
144
148
|
def github_slug
|
145
149
|
remote = repo.config['remote.origin.url']
|
146
|
-
remote.to_s.gsub(/\.git$/, '').split(%r{[
|
150
|
+
remote.to_s.gsub(/\.git$/, '').split(%r{[:/]}).last(2).join('/')
|
147
151
|
end
|
148
152
|
|
149
153
|
def github_organization
|
@@ -155,9 +159,7 @@ module Gitx
|
|
155
159
|
end
|
156
160
|
|
157
161
|
def global_config
|
158
|
-
@global_config ||=
|
159
|
-
File.exist?(global_config_file) ? YAML.load_file(global_config_file) : {}
|
160
|
-
end
|
162
|
+
@global_config ||= File.exist?(global_config_file) ? YAML.load_file(global_config_file) : {}
|
161
163
|
end
|
162
164
|
|
163
165
|
def save_global_config(options)
|
data/lib/gitx/version.rb
CHANGED
data/spec/fixtures/vcr_cassettes/pull_request_does_exist_with_success_status_and_then_add_label.yml
ADDED
@@ -0,0 +1,228 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://api.github.com/repos/wireframe/gitx/pulls?head=wireframe:feature-branch&state=open
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- application/vnd.github.v3+json
|
12
|
+
User-Agent:
|
13
|
+
- Octokit Ruby Gem 3.2.0
|
14
|
+
Authorization:
|
15
|
+
- token 123123
|
16
|
+
Accept-Encoding:
|
17
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Server:
|
24
|
+
- GitHub.com
|
25
|
+
Date:
|
26
|
+
- Tue, 05 Aug 2014 16:36:03 GMT
|
27
|
+
Content-Type:
|
28
|
+
- application/json; charset=utf-8
|
29
|
+
Status:
|
30
|
+
- 200 OK
|
31
|
+
X-Ratelimit-Limit:
|
32
|
+
- '5000'
|
33
|
+
X-Ratelimit-Remaining:
|
34
|
+
- '4991'
|
35
|
+
X-Ratelimit-Reset:
|
36
|
+
- '1407257585'
|
37
|
+
Cache-Control:
|
38
|
+
- private, max-age=60, s-maxage=60
|
39
|
+
Etag:
|
40
|
+
- '"6d00d48abf2adf1877c8244700cd4c6f"'
|
41
|
+
X-Oauth-Scopes:
|
42
|
+
- repo
|
43
|
+
X-Accepted-Oauth-Scopes:
|
44
|
+
- ''
|
45
|
+
Vary:
|
46
|
+
- Accept, Authorization, Cookie, X-GitHub-OTP
|
47
|
+
- Accept-Encoding
|
48
|
+
X-Github-Media-Type:
|
49
|
+
- github.v3; format=json
|
50
|
+
Link:
|
51
|
+
- <https://api.github.com/repositories/17608725/pulls?head=wireframe%3Afeature-branch&state=open&page=0>;
|
52
|
+
rel="last"
|
53
|
+
X-Xss-Protection:
|
54
|
+
- 1; mode=block
|
55
|
+
X-Frame-Options:
|
56
|
+
- deny
|
57
|
+
Content-Security-Policy:
|
58
|
+
- default-src 'none'
|
59
|
+
Content-Length:
|
60
|
+
- '2'
|
61
|
+
Access-Control-Allow-Credentials:
|
62
|
+
- 'true'
|
63
|
+
Access-Control-Expose-Headers:
|
64
|
+
- ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset,
|
65
|
+
X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
|
66
|
+
Access-Control-Allow-Origin:
|
67
|
+
- "*"
|
68
|
+
X-Github-Request-Id:
|
69
|
+
- 46C5E25C:1E4F:1642AD9:53E107F3
|
70
|
+
Strict-Transport-Security:
|
71
|
+
- max-age=31536000; includeSubdomains
|
72
|
+
X-Content-Type-Options:
|
73
|
+
- nosniff
|
74
|
+
X-Served-By:
|
75
|
+
- d818ddef80f4c7d10683dd483558952a
|
76
|
+
body:
|
77
|
+
encoding: UTF-8
|
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
|
+
http_version:
|
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
|
+
- request:
|
150
|
+
method: post
|
151
|
+
uri: https://api.github.com/repos/wireframe/gitx/issues/10/labels
|
152
|
+
body:
|
153
|
+
encoding: US-ASCII
|
154
|
+
string: ''
|
155
|
+
headers:
|
156
|
+
Accept:
|
157
|
+
- application/vnd.github.v3+json
|
158
|
+
User-Agent:
|
159
|
+
- Octokit Ruby Gem 3.2.0
|
160
|
+
Authorization:
|
161
|
+
- token 123123
|
162
|
+
Accept-Encoding:
|
163
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
164
|
+
response:
|
165
|
+
status:
|
166
|
+
code: 200
|
167
|
+
message: OK
|
168
|
+
headers:
|
169
|
+
Server:
|
170
|
+
- GitHub.com
|
171
|
+
Date:
|
172
|
+
- Tue, 05 Aug 2014 16:36:03 GMT
|
173
|
+
Content-Type:
|
174
|
+
- application/json; charset=utf-8
|
175
|
+
Status:
|
176
|
+
- 200 OK
|
177
|
+
X-Ratelimit-Limit:
|
178
|
+
- '5000'
|
179
|
+
X-Ratelimit-Remaining:
|
180
|
+
- '4991'
|
181
|
+
X-Ratelimit-Reset:
|
182
|
+
- '1407257585'
|
183
|
+
Cache-Control:
|
184
|
+
- private, max-age=60, s-maxage=60
|
185
|
+
Etag:
|
186
|
+
- '"6d00d48abf2adf1877c8244700cd4c6f"'
|
187
|
+
X-Oauth-Scopes:
|
188
|
+
- repo
|
189
|
+
X-Accepted-Oauth-Scopes:
|
190
|
+
- ''
|
191
|
+
Vary:
|
192
|
+
- Accept, Authorization, Cookie, X-GitHub-OTP
|
193
|
+
- Accept-Encoding
|
194
|
+
X-Github-Media-Type:
|
195
|
+
- github.v3; format=json
|
196
|
+
Link:
|
197
|
+
- <https://api.github.com/repositories/17608725/pulls?head=wireframe%3Afeature-branch&state=open&page=0>;
|
198
|
+
rel="last"
|
199
|
+
X-Xss-Protection:
|
200
|
+
- 1; mode=block
|
201
|
+
X-Frame-Options:
|
202
|
+
- deny
|
203
|
+
Content-Security-Policy:
|
204
|
+
- default-src 'none'
|
205
|
+
Content-Length:
|
206
|
+
- '2'
|
207
|
+
Access-Control-Allow-Credentials:
|
208
|
+
- 'true'
|
209
|
+
Access-Control-Expose-Headers:
|
210
|
+
- ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset,
|
211
|
+
X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
|
212
|
+
Access-Control-Allow-Origin:
|
213
|
+
- "*"
|
214
|
+
X-Github-Request-Id:
|
215
|
+
- 46C5E25C:1E4F:1642AD9:53E107F3
|
216
|
+
Strict-Transport-Security:
|
217
|
+
- max-age=31536000; includeSubdomains
|
218
|
+
X-Content-Type-Options:
|
219
|
+
- nosniff
|
220
|
+
X-Served-By:
|
221
|
+
- d818ddef80f4c7d10683dd483558952a
|
222
|
+
body:
|
223
|
+
encoding: UTF-8
|
224
|
+
string: '[{"id":1,"name":"release-me"}]'
|
225
|
+
http_version:
|
226
|
+
recorded_at: Tue, 05 Aug 2014 16:36:03 GMT
|
227
|
+
recorded_with: VCR 2.9.2
|
228
|
+
|
@@ -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
|
@@ -19,6 +19,7 @@ describe Gitx::Cli::IntegrateCommand do
|
|
19
19
|
|
20
20
|
before do
|
21
21
|
allow(cli).to receive(:current_branch).and_return(current_branch)
|
22
|
+
allow(cli).to receive(:github_slug).and_return('wireframe/gitx')
|
22
23
|
branches = double('fake branches')
|
23
24
|
allow(branches).to receive(:each_name).with(:local).and_return(local_branch_names)
|
24
25
|
allow(branches).to receive(:each_name).with(:remote).and_return(remote_branch_names)
|
@@ -46,18 +47,18 @@ describe Gitx::Cli::IntegrateCommand do
|
|
46
47
|
should meet_expectations
|
47
48
|
end
|
48
49
|
end
|
49
|
-
context 'when current_branch ==
|
50
|
-
let(:current_branch) { double('fake branch', name: '
|
51
|
-
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'] }
|
52
53
|
let(:remote_branch_names) { ['origin/staging'] }
|
53
54
|
before do
|
54
55
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
55
56
|
expect(executor).to receive(:execute).with('git', 'fetch', 'origin').ordered
|
56
57
|
expect(executor).to receive(:execute).with('git', 'branch', '--delete', '--force', 'staging').ordered
|
57
58
|
expect(executor).to receive(:execute).with('git', 'checkout', 'staging').ordered
|
58
|
-
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
|
59
60
|
expect(executor).to receive(:execute).with('git', 'push', 'origin', 'HEAD').ordered
|
60
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '
|
61
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'main').ordered
|
61
62
|
|
62
63
|
cli.integrate
|
63
64
|
end
|
@@ -84,7 +85,7 @@ describe Gitx::Cli::IntegrateCommand do
|
|
84
85
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
85
86
|
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
86
87
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
87
|
-
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
|
88
89
|
expect(executor).to receive(:execute).with('git', 'fetch', 'origin').ordered
|
89
90
|
expect(executor).to receive(:execute).with('git', 'branch', '--delete', '--force', 'staging').ordered
|
90
91
|
expect(executor).to receive(:execute).with('git', 'checkout', 'staging').ordered
|
@@ -108,7 +109,7 @@ describe Gitx::Cli::IntegrateCommand do
|
|
108
109
|
context 'when staging branch does not exist remotely' do
|
109
110
|
let(:remote_branch_names) { [] }
|
110
111
|
before do
|
111
|
-
expect(repo).to receive(:create_branch).with('staging', '
|
112
|
+
expect(repo).to receive(:create_branch).with('staging', 'main')
|
112
113
|
|
113
114
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
114
115
|
expect(executor).to receive(:execute).with('git', 'push', 'origin', 'staging:staging').ordered
|
@@ -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
|
@@ -17,6 +17,7 @@ describe Gitx::Cli::ReleaseCommand do
|
|
17
17
|
|
18
18
|
before do
|
19
19
|
allow(cli).to receive(:current_branch).and_return(branch)
|
20
|
+
allow(cli).to receive(:github_slug).and_return('wireframe/gitx')
|
20
21
|
end
|
21
22
|
|
22
23
|
describe '#release' do
|
@@ -35,14 +36,14 @@ describe Gitx::Cli::ReleaseCommand do
|
|
35
36
|
before do
|
36
37
|
expect(repo).to receive(:workdir).and_return(temp_dir)
|
37
38
|
|
38
|
-
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)
|
39
40
|
expect(cli).to receive(:yes?).with('Branch status is currently: failure. Proceed with release? (y/n)', :red).and_return(false)
|
40
41
|
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
41
42
|
|
42
43
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
43
|
-
expect(executor).to_not receive(:execute).with('git', 'checkout', '
|
44
|
-
expect(executor).to_not receive(:execute).with('git', 'pull', 'origin', '
|
45
|
-
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')
|
46
47
|
expect(executor).to_not receive(:execute).with('git', 'push', 'origin', 'HEAD')
|
47
48
|
|
48
49
|
VCR.use_cassette('pull_request_does_exist_with_failure_status') do
|
@@ -58,13 +59,14 @@ describe Gitx::Cli::ReleaseCommand do
|
|
58
59
|
expect(repo).to receive(:workdir).and_return(temp_dir)
|
59
60
|
|
60
61
|
expect(cli).to receive(:yes?).and_return(true)
|
62
|
+
expect(cli).to_not receive(:label_pull_request)
|
61
63
|
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
62
64
|
|
63
65
|
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
64
66
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
65
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '
|
66
|
-
expect(executor).to receive(:execute).with('git', 'pull', 'origin', '
|
67
|
-
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
|
68
70
|
expect(executor).to receive(:execute).with('git', 'push', 'origin', 'HEAD').ordered
|
69
71
|
expect(executor).to receive(:execute).with('git integrate').ordered
|
70
72
|
|
@@ -92,9 +94,9 @@ describe Gitx::Cli::ReleaseCommand do
|
|
92
94
|
|
93
95
|
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
94
96
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
95
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '
|
96
|
-
expect(executor).to receive(:execute).with('git', 'pull', 'origin', '
|
97
|
-
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
|
98
100
|
expect(executor).to receive(:execute).with('git', 'push', 'origin', 'HEAD').ordered
|
99
101
|
expect(executor).to receive(:execute).with('echo hello').ordered
|
100
102
|
|
@@ -115,9 +117,9 @@ describe Gitx::Cli::ReleaseCommand do
|
|
115
117
|
|
116
118
|
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
117
119
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
118
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '
|
119
|
-
expect(executor).to receive(:execute).with('git', 'pull', 'origin', '
|
120
|
-
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
|
121
123
|
expect(executor).to receive(:execute).with('git', 'push', 'origin', 'HEAD').ordered
|
122
124
|
expect(executor).to receive(:execute).with('git integrate').ordered
|
123
125
|
|
@@ -145,17 +147,17 @@ describe Gitx::Cli::ReleaseCommand do
|
|
145
147
|
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
146
148
|
allow(cli).to receive(:ask_editor).and_return('description')
|
147
149
|
|
148
|
-
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)
|
149
151
|
expect(cli).to receive(:yes?).with('Branch status is currently: pending. Proceed with release? (y/n)', :red).and_return(true)
|
150
152
|
|
151
153
|
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
152
154
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
153
155
|
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
154
156
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
155
|
-
expect(executor).to receive(:execute).with('git', 'log', 'origin/
|
156
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '
|
157
|
-
expect(executor).to receive(:execute).with('git', 'pull', 'origin', '
|
158
|
-
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
|
159
161
|
expect(executor).to receive(:execute).with('git', 'push', 'origin', 'HEAD').ordered
|
160
162
|
expect(executor).to receive(:execute).with('git integrate').ordered
|
161
163
|
|
@@ -185,9 +187,9 @@ describe Gitx::Cli::ReleaseCommand do
|
|
185
187
|
|
186
188
|
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
187
189
|
expect(executor).to receive(:execute).with('git', 'update').ordered
|
188
|
-
expect(executor).to receive(:execute).with('git', 'checkout', '
|
189
|
-
expect(executor).to receive(:execute).with('git', 'pull', 'origin', '
|
190
|
-
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
|
191
193
|
expect(executor).to receive(:execute).with('git', 'push', 'origin', 'HEAD').ordered
|
192
194
|
expect(executor).to receive(:execute).with('git integrate').ordered
|
193
195
|
expect(executor).to receive(:execute).with('git cleanup').ordered
|
@@ -200,5 +202,38 @@ describe Gitx::Cli::ReleaseCommand do
|
|
200
202
|
should meet_expectations
|
201
203
|
end
|
202
204
|
end
|
205
|
+
context 'when user confirms release and pull request exists with success status with release_label config' do
|
206
|
+
let(:gitx_config) do
|
207
|
+
{
|
208
|
+
'release_label' => 'release-me'
|
209
|
+
}
|
210
|
+
end
|
211
|
+
before do
|
212
|
+
expect(repo).to receive(:workdir).and_return(temp_dir)
|
213
|
+
File.open(File.join(temp_dir, '.gitx.yml'), 'w') do |f|
|
214
|
+
f.puts gitx_config.to_yaml
|
215
|
+
end
|
216
|
+
|
217
|
+
expect(cli).to receive(:yes?).and_return(true)
|
218
|
+
expect(cli).to receive(:label_pull_request).with(having_attributes(number: 10), 'release-me').and_call_original
|
219
|
+
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
220
|
+
|
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
|
+
expect(executor).to_not receive(:execute).with('git', 'push', 'origin', 'HEAD')
|
225
|
+
|
226
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
227
|
+
expect(executor).to receive(:execute).with('git', 'update').ordered
|
228
|
+
expect(executor).to receive(:execute).with('git integrate').ordered
|
229
|
+
|
230
|
+
VCR.use_cassette('pull_request_does_exist_with_success_status_and_then_add_label') do
|
231
|
+
cli.release
|
232
|
+
end
|
233
|
+
end
|
234
|
+
it 'runs expected commands' do
|
235
|
+
should meet_expectations
|
236
|
+
end
|
237
|
+
end
|
203
238
|
end
|
204
239
|
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' })
|
@@ -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/
|
85
|
+
expect(executor).to receive(:execute).with('git', 'log', 'origin/main...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: '
|
89
|
+
.with(body: { base: 'main', 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
|
@@ -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
|
|
@@ -28,7 +28,7 @@ describe Gitx::Cli::UpdateCommand do
|
|
28
28
|
allow(cli).to receive(:say)
|
29
29
|
|
30
30
|
expect(executor).to receive(:execute).with('git', 'pull', 'origin', 'feature-branch').ordered
|
31
|
-
expect(executor).to receive(:execute).with('git', 'pull', 'origin', '
|
31
|
+
expect(executor).to receive(:execute).with('git', 'pull', 'origin', 'main').ordered
|
32
32
|
expect(executor).to receive(:execute).with('git', 'share').ordered
|
33
33
|
|
34
34
|
cli.update
|
@@ -49,12 +49,12 @@ describe Gitx::Cli::UpdateCommand do
|
|
49
49
|
should meet_expectations
|
50
50
|
end
|
51
51
|
end
|
52
|
-
context 'when merge conflicts occur when pulling remote
|
52
|
+
context 'when merge conflicts occur when pulling remote main branch' do
|
53
53
|
before do
|
54
54
|
allow(cli).to receive(:say)
|
55
55
|
|
56
56
|
expect(executor).to receive(:execute).with('git', 'pull', 'origin', 'feature-branch').ordered
|
57
|
-
expect(executor).to receive(:execute).with('git', 'pull', 'origin', '
|
57
|
+
expect(executor).to receive(:execute).with('git', 'pull', 'origin', 'main').and_raise(Gitx::Executor::ExecutionError).ordered
|
58
58
|
|
59
59
|
expect { cli.update }.to raise_error(Gitx::Cli::BaseCommand::MergeError, 'Merge conflict occurred. Please fix merge conflict and rerun the command')
|
60
60
|
end
|
@@ -68,7 +68,7 @@ describe Gitx::Cli::UpdateCommand do
|
|
68
68
|
allow(cli).to receive(:say)
|
69
69
|
|
70
70
|
expect(executor).not_to receive(:execute).with('git', 'pull', 'origin', 'feature-branch')
|
71
|
-
expect(executor).to receive(:execute).with('git', 'pull', 'origin', '
|
71
|
+
expect(executor).to receive(:execute).with('git', 'pull', 'origin', 'main').ordered
|
72
72
|
|
73
73
|
cli.update
|
74
74
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -8,7 +8,7 @@ require 'bundler/setup'
|
|
8
8
|
|
9
9
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
10
10
|
# in spec/support/ and its subdirectories.
|
11
|
-
Dir[File.join(__dir__, 'support/**/*.rb')].each { |f| require f }
|
11
|
+
Dir[File.join(__dir__, 'support/**/*.rb')].sort.each { |f| require f }
|
12
12
|
|
13
13
|
# This file was generated by the `rspec --init` command. Conventionally, all
|
14
14
|
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
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.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Sonnek
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: octokit
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.27.10
|
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
|
-
version: 0.
|
40
|
+
version: 0.27.10
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: thor
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -240,6 +240,7 @@ files:
|
|
240
240
|
- lib/gitx/version.rb
|
241
241
|
- spec/fixtures/vcr_cassettes/pull_request_does_exist_with_failure_status.yml
|
242
242
|
- 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
|
243
244
|
- spec/fixtures/vcr_cassettes/pull_request_does_not_exist.yml
|
244
245
|
- spec/gitx/cli/base_command_spec.rb
|
245
246
|
- spec/gitx/cli/buildtag_command_spec.rb
|
@@ -266,7 +267,7 @@ homepage: ''
|
|
266
267
|
licenses:
|
267
268
|
- MIT
|
268
269
|
metadata: {}
|
269
|
-
post_install_message:
|
270
|
+
post_install_message:
|
270
271
|
rdoc_options: []
|
271
272
|
require_paths:
|
272
273
|
- lib
|
@@ -274,20 +275,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
274
275
|
requirements:
|
275
276
|
- - ">="
|
276
277
|
- !ruby/object:Gem::Version
|
277
|
-
version:
|
278
|
+
version: 2.6.7
|
278
279
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
279
280
|
requirements:
|
280
281
|
- - ">="
|
281
282
|
- !ruby/object:Gem::Version
|
282
283
|
version: '0'
|
283
284
|
requirements: []
|
284
|
-
rubygems_version: 3.
|
285
|
-
signing_key:
|
285
|
+
rubygems_version: 3.1.6
|
286
|
+
signing_key:
|
286
287
|
specification_version: 4
|
287
288
|
summary: Utility scripts for Git to increase productivity for common operations
|
288
289
|
test_files:
|
289
290
|
- spec/fixtures/vcr_cassettes/pull_request_does_exist_with_failure_status.yml
|
290
291
|
- 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
|
291
293
|
- spec/fixtures/vcr_cassettes/pull_request_does_not_exist.yml
|
292
294
|
- spec/gitx/cli/base_command_spec.rb
|
293
295
|
- spec/gitx/cli/buildtag_command_spec.rb
|