txgh 7.0.0 → 7.0.3.beta3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 58660adf06989ee42433b8f854a4fc7025e78e605fd622f53b43f1029431017e
4
- data.tar.gz: ddbf9fb3ce19ea72dcd88e3536a888dab21d5f2470017b38a87f061191e7c34d
3
+ metadata.gz: ddb70a73202419003bba2aeda693a5a704be5b88980c29da7a082cb1f3263162
4
+ data.tar.gz: 302e2a9608de1fb9f09ca065cdf15aa84c49319c6ac0c9660cf05a0491479e85
5
5
  SHA512:
6
- metadata.gz: 336679c86da9f06925633874c3937a3cc629f752586179bc5807838da453bfe6fb2ddb527fcf9beda5e99c62ea605d24a5fdf540fe1a7a0b66595bc45b1bcaa2
7
- data.tar.gz: c97b87817b63ad658bb66b8b47927737dfaa5c61c7bce2c440ce75cbbcf0f78aa3e3a49e76968fa72e3cfa3c8fb93686e9c05bde1399e8ea2ef2230adb3d0ca0
6
+ metadata.gz: 1d9fd68fe5103f5ff3b6e7754bfd175b593878dfcfe72a785e059bb38a8254bc2402d8f08db6743a7992c06890d55cdcb6f3728d7fbdce3ec4b7ecf9b06d87ce
7
+ data.tar.gz: f22f1e1c1ec3ce35737f96b17b0b77cf488be246f255c26a6377352e5c8138bcf92cb45d07ceb7d559d0462206ae70a87c0d4203a41b93cd012804ab62e4b479
@@ -33,14 +33,10 @@ module Txgh
33
33
 
34
34
  private
35
35
 
36
- def download
37
- raise NotImplementedError
38
- end
39
-
40
36
  def ref
41
37
  unless @ref
42
38
  raise TxghError,
43
- "TX_CONFIG specified a file from git but did not provide a ref."
39
+ 'TX_CONFIG specified a file from git but did not provide a ref.'
44
40
  end
45
41
 
46
42
  @ref
@@ -49,7 +45,7 @@ module Txgh
49
45
  def git_repo
50
46
  unless @git_repo
51
47
  raise TxghError,
52
- "TX_CONFIG specified a file from git but did not provide a repo."
48
+ 'TX_CONFIG specified a file from git but did not provide a repo.'
53
49
  end
54
50
 
55
51
  @git_repo
@@ -1,3 +1,5 @@
1
+ require 'octokit'
2
+
1
3
  module Txgh
2
4
  module Config
3
5
  module Providers
@@ -1,3 +1,5 @@
1
+ require 'gitlab'
2
+
1
3
  module Txgh
2
4
  module Config
3
5
  module Providers
@@ -1,4 +1,4 @@
1
- require 'celluloid/current'
1
+ require 'celluloid/autostart'
2
2
 
3
3
  module Txgh
4
4
  class GitStatus
@@ -16,7 +16,7 @@ module Txgh
16
16
  content_list.each do |file_params|
17
17
  path = file_params.fetch(:path)
18
18
  new_contents = file_params.fetch(:contents)
19
- branch = Utils.relative_branch(branch)
19
+ branch = Utils.url_safe_relative_branch(branch)
20
20
 
21
21
  file_sha = file_params.fetch(:sha) do
22
22
  begin
@@ -42,13 +42,13 @@ module Txgh
42
42
  # mock github response
43
43
  {
44
44
  object: {
45
- sha: client.commit(repo_name, ref.gsub('heads/', '')).short_id
45
+ sha: client.commit(repo_name, Utils.url_safe_relative_branch(ref)).short_id
46
46
  }
47
47
  }
48
48
  end
49
49
 
50
50
  def download(path, branch)
51
- file = client.get_file(repo_name, path, branch.gsub('heads/', ''))
51
+ file = client.get_file(repo_name, path, Utils.url_safe_relative_branch(branch))
52
52
 
53
53
  # mock github response
54
54
  {
@@ -58,7 +58,10 @@ module Txgh
58
58
  end
59
59
 
60
60
  def create_status(sha, state, options = {})
61
- client.update_commit_status(repo_name, sha, state, options)
61
+ client.update_commit_status(repo_name, Utils.url_safe_relative_branch(sha), state, options)
62
+ rescue ::Gitlab::Error::BadRequest => error
63
+ # Gitlab pipeline may have several jobs and txgh should not override commit statuses set by others
64
+ raise error unless error.message.include?('Cannot transition status')
62
65
  end
63
66
  end
64
67
  end
@@ -24,6 +24,10 @@ module Txgh
24
24
  branch.strip.sub(/\A(heads|tags)\//, '')
25
25
  end
26
26
 
27
+ def url_safe_relative_branch(branch)
28
+ CGI.escape(relative_branch(branch))
29
+ end
30
+
27
31
  def branches_equal?(first, second)
28
32
  absolute_branch(first) == absolute_branch(second)
29
33
  end
@@ -1,3 +1,3 @@
1
1
  module Txgh
2
- VERSION = '7.0.0'
2
+ VERSION = '7.0.3.beta3'
3
3
  end
@@ -5,7 +5,6 @@ describe Txgh::GitlabApi do
5
5
  let(:client) { double(:client) }
6
6
  let(:api) { described_class.create_from_client(client, repo) }
7
7
  let(:repo) { 'my_org/my_repo' }
8
- let(:branch) { 'master' }
9
8
  let(:sha) { 'abc123' }
10
9
  let(:gitlab_response) do
11
10
  OpenStruct.new({
@@ -18,23 +17,19 @@ describe Txgh::GitlabApi do
18
17
  })
19
18
  end
20
19
 
21
- describe '#update_contents' do
22
- let(:path) { 'path/to/file.txt' }
23
- let(:old_contents) { 'abc123' }
24
- let(:old_sha) { Txgh::Utils.git_hash_blob(old_contents) }
25
-
20
+ shared_examples 'an update_contents flow' do
26
21
  it 'updates the given file contents' do
27
22
  new_contents = 'def456'
28
23
 
29
24
  expect(client).to(
30
25
  receive(:get_file)
31
- .with(repo, path, branch)
26
+ .with(repo, path, url_safe_branch)
32
27
  .and_return(double(blob_id: old_sha))
33
28
  )
34
29
 
35
30
  expect(client).to(
36
31
  receive(:edit_file)
37
- .with(repo, path, branch, new_contents, 'message')
32
+ .with(repo, path, url_safe_branch, new_contents, 'message')
38
33
  )
39
34
 
40
35
  api.update_contents(branch, [{ path: path, contents: new_contents }], 'message')
@@ -43,7 +38,7 @@ describe Txgh::GitlabApi do
43
38
  it "doesn't update the file contents if the file hasn't changed" do
44
39
  expect(client).to(
45
40
  receive(:get_file)
46
- .with(repo, path, branch)
41
+ .with(repo, path, url_safe_branch)
47
42
  .and_return(double(blob_id: old_sha))
48
43
  )
49
44
 
@@ -58,27 +53,18 @@ describe Txgh::GitlabApi do
58
53
 
59
54
  expect(client).to(
60
55
  receive(:edit_file)
61
- .with(repo, path, branch, new_contents, 'message')
56
+ .with(repo, path, url_safe_branch, new_contents, 'message')
62
57
  )
63
58
 
64
59
  api.update_contents(branch, [{ path: path, contents: new_contents }], 'message')
65
60
  end
66
61
  end
67
62
 
68
- describe '#get_ref' do
69
- it 'retrieves the given ref (i.e. branch) using the client' do
70
- expect(client).to receive(:commit).with(repo, sha) { double(short_id: '0') }
71
- api.get_ref(sha)
72
- end
73
- end
74
-
75
- describe '#download' do
76
- let(:path) { 'path/to/file.xyz' }
77
-
63
+ shared_examples 'a download flow' do
78
64
  it 'downloads the file from the given branch' do
79
65
  expect(client).to(
80
66
  receive(:get_file)
81
- .with(repo, path, branch)
67
+ .with(repo, path, url_safe_branch)
82
68
  .and_return(double(content: 'content', encoding: 'utf-8'))
83
69
  )
84
70
 
@@ -90,7 +76,7 @@ describe Txgh::GitlabApi do
90
76
 
91
77
  expect(client).to(
92
78
  receive(:get_file)
93
- .with(repo, path, branch)
79
+ .with(repo, path, url_safe_branch)
94
80
  .and_return(double(content: content, encoding: 'utf-16'))
95
81
  )
96
82
 
@@ -102,11 +88,96 @@ describe Txgh::GitlabApi do
102
88
  it 'automatically decodes base64-encoded content' do
103
89
  expect(client).to(
104
90
  receive(:get_file)
105
- .with(repo, path, branch)
91
+ .with(repo, path, url_safe_branch)
106
92
  .and_return(double(content: Base64.encode64('content'), encoding: 'base64'))
107
93
  )
108
94
 
109
95
  expect(api.download(path, branch)).to eq({ content: 'content', path: path })
110
96
  end
111
97
  end
98
+
99
+ describe '#update_contents' do
100
+ let(:path) { 'path/to/file.txt' }
101
+ let(:old_contents) { 'abc123' }
102
+ let(:old_sha) { Txgh::Utils.git_hash_blob(old_contents) }
103
+
104
+ context 'when master branch' do
105
+ let(:branch) { 'master' }
106
+ let(:url_safe_branch) { 'master' }
107
+
108
+ it_behaves_like 'an update_contents flow'
109
+ end
110
+
111
+ context 'when feature branch' do
112
+ let(:branch) { 'feature/foo-ticket' }
113
+ let(:url_safe_branch) { 'feature%2Ffoo-ticket' }
114
+
115
+ it_behaves_like 'an update_contents flow'
116
+ end
117
+ end
118
+
119
+ describe '#get_ref' do
120
+ context 'when ref is a sha' do
121
+ it 'retrieves the given ref (i.e. branch) using the client' do
122
+ expect(client).to receive(:commit).with(repo, sha) { double(short_id: '0') }
123
+ api.get_ref(sha)
124
+ end
125
+ end
126
+
127
+ context 'when ref is a master branch' do
128
+ let(:sha) { 'master' }
129
+
130
+ it 'retrieves the given ref (i.e. branch) using the client' do
131
+ expect(client).to receive(:commit).with(repo, sha) { double(short_id: '0') }
132
+ api.get_ref(sha)
133
+ end
134
+ end
135
+
136
+ context 'when ref is a feature branch' do
137
+ let(:sha) { 'feature/foo-ticket' }
138
+ let(:url_safe_sha) { 'feature%2Ffoo-ticket' }
139
+
140
+ it 'retrieves the given ref (i.e. branch) using the client' do
141
+ expect(client).to receive(:commit).with(repo, url_safe_sha) { double(short_id: '0') }
142
+ api.get_ref(sha)
143
+ end
144
+ end
145
+ end
146
+
147
+ describe '#download' do
148
+ let(:path) { 'path/to/file.xyz' }
149
+
150
+ context 'when master branch' do
151
+ let(:branch) { 'master' }
152
+ let(:url_safe_branch) { 'master' }
153
+
154
+ it_behaves_like 'a download flow'
155
+ end
156
+
157
+ context 'when feature branch' do
158
+ let(:branch) { 'feature/foo-ticket' }
159
+ let(:url_safe_branch) { 'feature%2Ffoo-ticket' }
160
+
161
+ it_behaves_like 'a download flow'
162
+ end
163
+ end
164
+
165
+ describe '#create_status' do
166
+ let(:gitlab_response) do
167
+ OpenStruct.new({
168
+ code: 404,
169
+ request: double(base_uri: 'https://gitlab.com/api/v3', path: '/foo'),
170
+ parsed_response: Gitlab::ObjectifiedHash.new(
171
+ error_description: 'Cannot transition status via :enqueue from :pending',
172
+ error: 'also will not be displayed'
173
+ )
174
+ })
175
+ end
176
+
177
+ it 'does not raise error if cannot change status' do
178
+ expect(client).to receive(:update_commit_status).and_raise(::Gitlab::Error::BadRequest.new(gitlab_response))
179
+
180
+ api.create_status('sha', 'state', {})
181
+ end
182
+ end
112
183
  end
@@ -47,6 +47,20 @@ describe Txgh::Utils do
47
47
  end
48
48
  end
49
49
 
50
+ describe '.url_safe_relative_branch' do
51
+ it 'removes tags/ if present' do
52
+ expect(described_class.url_safe_relative_branch('tags/feature/foobar')).to eq('feature%2Ffoobar')
53
+ end
54
+
55
+ it 'removes heads/ if present' do
56
+ expect(described_class.url_safe_relative_branch('heads/foobar')).to eq('foobar')
57
+ end
58
+
59
+ it 'does nothing if no prefix can be removed' do
60
+ expect(described_class.url_safe_relative_branch('feature/foo-ticket')).to eq('feature%2Ffoo-ticket')
61
+ end
62
+ end
63
+
50
64
  describe '.is_tag?' do
51
65
  it 'returns true if given a tag' do
52
66
  expect(described_class.is_tag?('tags/foo')).to eq(true)
@@ -13,10 +13,10 @@ Gem::Specification.new do |s|
13
13
  s.platform = Gem::Platform::RUBY
14
14
 
15
15
  s.add_dependency 'abroad', '~> 4.6'
16
- s.add_dependency 'celluloid'
16
+ s.add_dependency 'celluloid', '~> 0.18.0'
17
17
  s.add_dependency 'faraday', '0.17.3'
18
18
  s.add_dependency 'faraday_middleware', '0.14.0'
19
- s.add_dependency 'json', '~> 1.8'
19
+ s.add_dependency 'json', '~> 2.3'
20
20
  s.add_dependency 'octokit', '~> 4.2'
21
21
  s.add_dependency 'gitlab', '~> 4.14'
22
22
  s.add_dependency 'parseconfig', '~> 1.0'
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: txgh
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.0.0
4
+ version: 7.0.3.beta3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Jackowski
8
8
  - Cameron Dutro
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-03-30 00:00:00.000000000 Z
12
+ date: 2021-01-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: abroad
@@ -29,16 +29,16 @@ dependencies:
29
29
  name: celluloid
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - ">="
32
+ - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '0'
34
+ version: 0.18.0
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ">="
39
+ - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '0'
41
+ version: 0.18.0
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: faraday
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -73,14 +73,14 @@ dependencies:
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: '1.8'
76
+ version: '2.3'
77
77
  type: :runtime
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - "~>"
82
82
  - !ruby/object:Gem::Version
83
- version: '1.8'
83
+ version: '2.3'
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: octokit
86
86
  requirement: !ruby/object:Gem::Requirement
@@ -213,7 +213,7 @@ files:
213
213
  homepage: https://github.com/lumoslabs/txgh
214
214
  licenses: []
215
215
  metadata: {}
216
- post_install_message:
216
+ post_install_message:
217
217
  rdoc_options: []
218
218
  require_paths:
219
219
  - lib
@@ -224,13 +224,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
224
224
  version: '0'
225
225
  required_rubygems_version: !ruby/object:Gem::Requirement
226
226
  requirements:
227
- - - ">="
227
+ - - ">"
228
228
  - !ruby/object:Gem::Version
229
- version: '0'
229
+ version: 1.3.1
230
230
  requirements: []
231
- rubyforge_project:
231
+ rubyforge_project:
232
232
  rubygems_version: 2.7.6
233
- signing_key:
233
+ signing_key:
234
234
  specification_version: 4
235
235
  summary: A library for syncing translation resources between Github and Transifex.
236
236
  test_files: []