txgh 2.1.0 → 2.2.0

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
  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