txgh 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 602ce638efdadb764883e26d1c3636e84bdd5ede
4
- data.tar.gz: 11f75ef7992aad2dc8e08a5c63e49f5faf0b140d
3
+ metadata.gz: fa8e34cc2f842b5e1d9d6998b6ddbf0ce72dfab8
4
+ data.tar.gz: 8d5dc86a7c315128114d6ff1e25b977ab908ee2a
5
5
  SHA512:
6
- metadata.gz: 4ffa50d6b1b08c2b754983f4b899ae9f4e25ae224c239efffda00ea3115a94b8873bd1c8a4583cc360036fcc548a7bbd7850d74df3f3299ab17a45325e7f24e3
7
- data.tar.gz: 58f00d04c536bb5f66a7cb4762bee31bbbf1a59a226f24d62ddc4deb9c53baf0648a89925b995a44308ce68d525f8c03f5b13d700c2d2273f91321933efc97a8
6
+ metadata.gz: 759259034ab336dcaeae29ecc692bfa45590a9f7bd11392162bb594a067acaf5bd152f6d248c5b27bd2af153950227a722f4364ac3b93db9aeb3e1258cc21a5b
7
+ data.tar.gz: 198311603b7035fa0129cfb20e288eb5444842fd319a65d88c6bbcfb2b390829ae0819f935b91d177f145846992f1a0031a94cd78b768d48a18229af7f7e5318
@@ -33,7 +33,7 @@ module Txgh
33
33
  client.create_ref(repo, branch, sha) rescue false
34
34
  end
35
35
 
36
- def commit(repo, branch, content_map, allow_empty = false)
36
+ def commit(repo, branch, content_map, message, allow_empty = false)
37
37
  parent = client.ref(repo, branch)
38
38
  base_commit = get_commit(repo, parent[:object][:sha])
39
39
 
@@ -46,8 +46,7 @@ module Txgh
46
46
 
47
47
  tree = client.create_tree(repo, tree_data, tree_options)
48
48
  commit = client.create_commit(
49
- repo, "Updating translations for #{content_map.keys.join(", ")}",
50
- tree[:sha], parent[:object][:sha]
49
+ repo, message, tree[:sha], parent[:object][:sha]
51
50
  )
52
51
 
53
52
  # don't update the ref if the commit introduced no new changes
@@ -71,6 +71,10 @@ module Txgh
71
71
  !(webhook_secret || '').empty?
72
72
  end
73
73
 
74
+ def commit_message
75
+ config['commit_message']
76
+ end
77
+
74
78
  private
75
79
 
76
80
  def should_process_branch?(candidate)
@@ -10,7 +10,7 @@ module Txgh
10
10
  logger.info("request github branch: #{branch}")
11
11
  logger.info("config github branch: #{repo.github_config_branch}")
12
12
 
13
- if repo.should_process_ref?(branch)
13
+ if should_process?
14
14
  logger.info('found branch in github request')
15
15
 
16
16
  tx_resources = tx_resources_for(branch)
@@ -102,6 +102,20 @@ module Txgh
102
102
  @ref ||= payload['ref'].sub(/^refs\//, '')
103
103
  end
104
104
 
105
+ def should_process?
106
+ should_process_branch? && should_process_commit?
107
+ end
108
+
109
+ def should_process_branch?
110
+ repo.should_process_ref?(branch)
111
+ end
112
+
113
+ def should_process_commit?
114
+ # return false if 'after' commit sha is all zeroes (indicates branch
115
+ # has been deleted)
116
+ !(payload.fetch('after', '') =~ /\A0+\z/)
117
+ end
118
+
105
119
  end
106
120
  end
107
121
  end
@@ -1,5 +1,7 @@
1
1
  module Txgh
2
2
  class ResourceCommitter
3
+ DEFAULT_COMMIT_MESSAGE = "Updating %{language} translations in %{file_name}"
4
+
3
5
  attr_reader :project, :repo, :logger
4
6
 
5
7
  def initialize(project, repo, logger = nil)
@@ -13,9 +15,10 @@ module Txgh
13
15
 
14
16
  unless language == tx_resource.source_lang
15
17
  file_name, translations = download(tx_resource, branch, language)
18
+ message = commit_message_for(language, file_name)
16
19
 
17
20
  if translations
18
- repo.api.commit(repo.name, branch, { file_name => translations })
21
+ repo.api.commit(repo.name, branch, { file_name => translations }, message)
19
22
  fire_event_for(tx_resource, branch, language)
20
23
  end
21
24
  end
@@ -45,6 +48,16 @@ module Txgh
45
48
  downloader.first
46
49
  end
47
50
 
51
+ def commit_message_for(language, file_name)
52
+ commit_message_template % {
53
+ language: language, file_name: file_name
54
+ }
55
+ end
56
+
57
+ def commit_message_template
58
+ repo.commit_message || DEFAULT_COMMIT_MESSAGE
59
+ end
60
+
48
61
  def prevent_commit_on?(branch)
49
62
  project.protected_branches.include?(branch)
50
63
  end
data/lib/txgh/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Txgh
2
- VERSION = '2.1.0'
2
+ VERSION = '2.2.0'
3
3
  end
data/lib/txgh.rb CHANGED
@@ -30,6 +30,8 @@ module Txgh
30
30
  autoload :TxResource, 'txgh/tx_resource'
31
31
  autoload :Utils, 'txgh/utils'
32
32
 
33
+ DEFAULT_ENV = 'development'
34
+
33
35
  class << self
34
36
  def tx_manager
35
37
  Txgh::Config::TxManager
@@ -54,6 +56,10 @@ module Txgh
54
56
 
55
57
  GithubStatus.new(project, repo, resource).update(options.fetch(:sha))
56
58
  end
59
+
60
+ def env
61
+ ENV.fetch('TXGH_ENV', DEFAULT_ENV)
62
+ end
57
63
  end
58
64
 
59
65
  # default set of tx config providers
@@ -49,12 +49,12 @@ describe GithubApi do
49
49
  it 'creates a new commit and updates the branch' do
50
50
  expect(client).to(
51
51
  receive(:create_commit)
52
- .with(repo, "Updating translations for #{path}", :new_tree_sha, :branch_sha)
52
+ .with(repo, 'message', :new_tree_sha, :branch_sha)
53
53
  .and_return(sha: :new_commit_sha)
54
54
  )
55
55
 
56
56
  expect(client).to receive(:update_ref).with(repo, branch, :new_commit_sha, false)
57
- api.commit(repo, branch, { path => :new_content }, true)
57
+ api.commit(repo, branch, { path => :new_content }, 'message', true)
58
58
  end
59
59
 
60
60
  it 'updates multiple files at a time' do
@@ -62,13 +62,13 @@ describe GithubApi do
62
62
 
63
63
  expect(client).to(
64
64
  receive(:create_commit)
65
- .with(repo, "Updating translations for #{path}, #{other_path}", :new_tree_sha, :branch_sha)
65
+ .with(repo, 'message', :new_tree_sha, :branch_sha)
66
66
  .and_return(sha: :new_commit_sha)
67
67
  )
68
68
 
69
69
  expect(client).to receive(:update_ref).with(repo, branch, :new_commit_sha, false)
70
70
  content_map = { path => :new_content, other_path => :other_content }
71
- api.commit(repo, branch, content_map, true)
71
+ api.commit(repo, branch, content_map, 'message', true)
72
72
  end
73
73
 
74
74
  context 'with an empty commit' do
@@ -81,14 +81,14 @@ describe GithubApi do
81
81
 
82
82
  expect(client).to(
83
83
  receive(:create_commit)
84
- .with(repo, "Updating translations for #{path}", :new_tree_sha, :branch_sha)
84
+ .with(repo, 'message', :new_tree_sha, :branch_sha)
85
85
  .and_return(sha: :new_commit_sha)
86
86
  )
87
87
  end
88
88
 
89
89
  it 'does not allow empty commits by default' do
90
90
  expect(client).to_not receive(:update_ref)
91
- api.commit(repo, branch, { path => :new_content })
91
+ api.commit(repo, branch, { path => :new_content }, 'message')
92
92
  end
93
93
  end
94
94
 
@@ -102,14 +102,14 @@ describe GithubApi do
102
102
 
103
103
  expect(client).to(
104
104
  receive(:create_commit)
105
- .with(repo, "Updating translations for #{path}", :new_tree_sha, :branch_sha)
105
+ .with(repo, 'message', :new_tree_sha, :branch_sha)
106
106
  .and_return(sha: :new_commit_sha)
107
107
  )
108
108
  end
109
109
 
110
110
  it 'updates the ref as expected' do
111
111
  expect(client).to receive(:update_ref).with(repo, branch, :new_commit_sha, false)
112
- api.commit(repo, branch, { path => :new_content })
112
+ api.commit(repo, branch, { path => :new_content }, 'message')
113
113
  end
114
114
  end
115
115
  end
@@ -35,7 +35,7 @@ describe PushHandler do
35
35
  modified: modified_files.map { |f| f['path'] }
36
36
  )
37
37
 
38
- expect(ResourceUpdater).to receive(:new).and_return(updater)
38
+ allow(ResourceUpdater).to receive(:new).and_return(updater)
39
39
  end
40
40
 
41
41
  it 'correctly uploads modified resources to transifex' do
@@ -73,4 +73,22 @@ describe PushHandler do
73
73
  expect(response.body).to eq(true)
74
74
  end
75
75
  end
76
+
77
+ context 'with a deleted branch' do
78
+ let(:before) { nil }
79
+ let(:after) { '0' * 40 }
80
+
81
+ let(:payload) do
82
+ GithubPayloadBuilder.push_payload(repo_name, ref, before, after)
83
+ end
84
+
85
+ it "doesn't upload anything" do
86
+ expect(updater).to_not receive(:update_resource)
87
+ expect(github_api).to_not receive(:create_ref)
88
+
89
+ response = handler.execute
90
+ expect(response.status).to eq(200)
91
+ expect(response.body).to eq(true)
92
+ end
93
+ end
76
94
  end
@@ -26,6 +26,10 @@ describe HookHandler do
26
26
  instance_double(ResourceDownloader)
27
27
  end
28
28
 
29
+ let(:file_name) do
30
+ "translations/#{language}/sample.yml"
31
+ end
32
+
29
33
  before(:each) do
30
34
  allow(ResourceDownloader).to receive(:new).and_return(downloader)
31
35
  allow(downloader).to(receive(:first)).and_return([
@@ -40,9 +44,9 @@ describe HookHandler do
40
44
  it 'downloads translations and pushes them to the correct branch (head)' do
41
45
  expect(github_api).to(
42
46
  receive(:commit).with(
43
- repo_name, "heads/#{branch}", {
44
- "translations/#{language}/sample.yml" => translations
45
- }
47
+ repo_name, "heads/#{branch}",
48
+ { "translations/#{language}/sample.yml" => translations },
49
+ "Updating #{language} translations in #{file_name}"
46
50
  )
47
51
  )
48
52
 
@@ -87,9 +91,9 @@ describe HookHandler do
87
91
 
88
92
  expect(github_api).to(
89
93
  receive(:commit).with(
90
- repo_name, ref, {
91
- "translations/#{language}/sample.yml" => translations
92
- }
94
+ repo_name, ref,
95
+ { "translations/#{language}/sample.yml" => translations },
96
+ "Updating #{language} translations in #{file_name}"
93
97
  )
94
98
  )
95
99
 
@@ -105,9 +109,9 @@ describe HookHandler do
105
109
  it 'downloads translations and pushes them to the tag' do
106
110
  expect(github_api).to(
107
111
  receive(:commit).with(
108
- repo_name, "tags/my_tag", {
109
- "translations/#{language}/sample.yml" => translations
110
- }
112
+ repo_name, "tags/my_tag",
113
+ { "translations/#{language}/sample.yml" => translations },
114
+ "Updating #{language} translations in #{file_name}"
111
115
  )
112
116
  )
113
117
 
@@ -19,6 +19,7 @@ module StandardTxghSetup
19
19
  let(:translations) { 'translation file contents' }
20
20
  let(:diff_point) { nil }
21
21
  let(:organization) { 'myorg' }
22
+ let(:commit_message_template) { nil } # i.e. use the default
22
23
 
23
24
  let(:project_config) do
24
25
  {
@@ -43,7 +44,8 @@ module StandardTxghSetup
43
44
  'tag' => tag,
44
45
  'name' => repo_name,
45
46
  'webhook_secret' => 'abc123',
46
- 'diff_point' => diff_point
47
+ 'diff_point' => diff_point,
48
+ 'commit_message' => commit_message_template
47
49
  }
48
50
  end
49
51
 
@@ -14,6 +14,10 @@ describe ResourceCommitter do
14
14
  ResourceCommitter.new(transifex_project, github_repo, logger)
15
15
  end
16
16
 
17
+ let(:commit_message) do
18
+ "Updating #{language} translations in #{file_name}"
19
+ end
20
+
17
21
  before(:each) do
18
22
  allow(github_api).to receive(:get_ref).and_return(
19
23
  object: { sha: 'abc123shashasha' }
@@ -28,7 +32,7 @@ describe ResourceCommitter do
28
32
 
29
33
  expect(github_api).to(
30
34
  receive(:commit).with(
31
- repo_name, branch, { file_name => :translations }
35
+ repo_name, branch, { file_name => :translations }, commit_message
32
36
  )
33
37
  )
34
38
  end
@@ -52,6 +56,15 @@ describe ResourceCommitter do
52
56
  expect(options[:resource].original_resource_slug).to eq(resource_slug)
53
57
  expect(options[:language]).to eq(language)
54
58
  end
59
+
60
+ context 'with a custom commit message' do
61
+ let(:commit_message_template) { "foo %{language}" }
62
+ let(:commit_message) { "foo #{language}" }
63
+
64
+ it 'uses the custom commit message' do
65
+ committer.commit_resource(resource, branch, language)
66
+ end
67
+ end
55
68
  end
56
69
 
57
70
  it "doesn't commit anything if the language is the source language" do
data/spec/txgh_spec.rb ADDED
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe Txgh do
4
+ def with_env(env)
5
+ # ENV can't be duped, so use select instead to make a copy
6
+ old_env = ENV.select { true }
7
+ env.each_pair { |k, v| ENV[k] = v }
8
+ yield
9
+ ensure
10
+ # reset back to old vars
11
+ env.each_pair { |k, _| ENV[k] = old_env[k] }
12
+ end
13
+
14
+ describe '#env' do
15
+ it 'defaults to development' do
16
+ expect(Txgh.env).to eq('development')
17
+ end
18
+
19
+ it 'pulls the env out of ENV if set' do
20
+ with_env('TXGH_ENV' => 'production') do
21
+ expect(Txgh.env).to eq('production')
22
+ end
23
+ end
24
+ end
25
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: txgh
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Jackowski
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-05-04 00:00:00.000000000 Z
12
+ date: 2016-05-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: abroad
@@ -274,6 +274,7 @@ files:
274
274
  - spec/transifex_request_auth_spec.rb
275
275
  - spec/tx_branch_resource_spec.rb
276
276
  - spec/tx_resource_spec.rb
277
+ - spec/txgh_spec.rb
277
278
  - spec/utils_spec.rb
278
279
  - txgh.gemspec
279
280
  homepage: https://github.com/lumoslabs/txgh