lock_diff 0.3.2 → 0.3.3
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/README.md +30 -0
- data/exe/lock_diff +2 -2
- data/exe/lock_diff_for_tachikoma +2 -2
- data/lib/lock_diff/cli/option_parser.rb +50 -0
- data/lib/lock_diff/diff_info.rb +5 -4
- data/lib/lock_diff/formatter/github_markdown.rb +15 -6
- data/lib/lock_diff/gem/lockfile_comparator.rb +0 -7
- data/lib/lock_diff/gem/package.rb +5 -8
- data/lib/lock_diff/gem/ruby_gem.rb +32 -7
- data/lib/lock_diff/gem/spec.rb +9 -6
- data/lib/lock_diff/gem.rb +5 -7
- data/lib/lock_diff/github/changelog_url_finder.rb +4 -4
- data/lib/lock_diff/github/client.rb +1 -1
- data/lib/lock_diff/github/pull_request.rb +20 -8
- data/lib/lock_diff/github/tag_finder.rb +35 -13
- data/lib/lock_diff/github/{github_url_detector.rb → url_detector.rb} +1 -1
- data/lib/lock_diff/github.rb +1 -2
- data/lib/lock_diff/lockfile_comparator.rb +19 -0
- data/lib/lock_diff/pull_request.rb +18 -19
- data/lib/lock_diff/version.rb +1 -1
- data/lib/lock_diff.rb +27 -24
- metadata +5 -6
- data/lib/lock_diff/gem/ruby_gem_repository.rb +0 -23
- data/lib/lock_diff/github/pr_lockfile.rb +0 -27
- data/lib/lock_diff/option_parser.rb +0 -48
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40bb372ad385170936087d91ee3530cc75afb6c6
|
4
|
+
data.tar.gz: ce08c865a51232770c210585ff789e98e95e843f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 89509ad3d40bc26f45206f999d323ccf20dc76ebbc4dbfdc46a865beb572c8c6c9426f6c954a06fb90e1a60f7ea8e174ca8d960d596f9e3768bb170347eb4098
|
7
|
+
data.tar.gz: 416e18c67a7cf82ea5ea59fae3c3f393461b1fbe0ff3fd3920bb7e9bcffacfaa3aafff3a01819b64ad7d77d19d52e532a6e2e68891483261e31382c7829943bd
|
data/README.md
CHANGED
@@ -114,6 +114,36 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERN
|
|
114
114
|
|
115
115
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
116
116
|
|
117
|
+
### Original
|
118
|
+
|
119
|
+
Most source code in this pepository is by https://github.com/kyanny/compare_linker .
|
120
|
+
|
121
|
+
```
|
122
|
+
Copyright (c) 2014 Kensuke Nagae
|
123
|
+
|
124
|
+
MIT License
|
125
|
+
|
126
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
127
|
+
a copy of this software and associated documentation files (the
|
128
|
+
"Software"), to deal in the Software without restriction, including
|
129
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
130
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
131
|
+
permit persons to whom the Software is furnished to do so, subject to
|
132
|
+
the following conditions:
|
133
|
+
|
134
|
+
The above copyright notice and this permission notice shall be
|
135
|
+
included in all copies or substantial portions of the Software.
|
136
|
+
|
137
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
138
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
139
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
140
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
141
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
142
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
143
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
144
|
+
```
|
145
|
+
|
146
|
+
|
117
147
|
## Code of Conduct
|
118
148
|
|
119
149
|
Everyone interacting in the LockDiff project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/lock_diff/blob/master/CODE_OF_CONDUCT.md).
|
data/exe/lock_diff
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require "lock_diff"
|
4
|
-
require "lock_diff/option_parser"
|
4
|
+
require "lock_diff/cli/option_parser"
|
5
5
|
|
6
|
-
options = LockDiff::OptionParser.parse(ARGV, require_flags: %i(repository number))
|
6
|
+
options = LockDiff::Cli::OptionParser.parse(ARGV, require_flags: %i(repository number))
|
7
7
|
LockDiff.run(options)
|
data/exe/lock_diff_for_tachikoma
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require "lock_diff"
|
4
|
-
require "lock_diff/option_parser"
|
4
|
+
require "lock_diff/cli/option_parser"
|
5
5
|
|
6
|
-
options = LockDiff::OptionParser.parse(ARGV, require_flags: %i(repository))
|
6
|
+
options = LockDiff::Cli::OptionParser.parse(ARGV, require_flags: %i(repository))
|
7
7
|
LockDiff.run_by_latest_tachikoma(options)
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require "optparse"
|
2
|
+
|
3
|
+
module LockDiff
|
4
|
+
module Cli
|
5
|
+
class OptionParser
|
6
|
+
class << self
|
7
|
+
def parse(args, require_flags:)
|
8
|
+
new(require_flags).parse(args)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(require_flags)
|
13
|
+
@require_flags = require_flags
|
14
|
+
end
|
15
|
+
|
16
|
+
def parse(args)
|
17
|
+
options = {
|
18
|
+
post_comment: false
|
19
|
+
}
|
20
|
+
opt = ::OptionParser.new
|
21
|
+
|
22
|
+
opt.separator("Require flags")
|
23
|
+
if @require_flags.include? :repository
|
24
|
+
opt.on('-r', '--repository=REPOSITORY', 'Like as "user/repository"') { |v| options[:repository] = v }
|
25
|
+
end
|
26
|
+
if @require_flags.include? :number
|
27
|
+
opt.on('-n', '--number=PULL_REQUEST_NUMBER') { |v| options[:number] = v }
|
28
|
+
end
|
29
|
+
|
30
|
+
opt.separator("\nOptional flags")
|
31
|
+
opt.on('--post-comment=true or false', 'Print result to stdout when false. (default is false)') { |v| options[:post_comment] = v }
|
32
|
+
opt.on("-v", "--verbose", "Run verbosely") { LockDiff.logger.level = :info }
|
33
|
+
opt.on("--more-verbose", "Run more verbosely") { LockDiff.logger.level = :debug }
|
34
|
+
opt.on_tail("--version", "Show version") do
|
35
|
+
$stdout.puts LockDiff::VERSION
|
36
|
+
exit
|
37
|
+
end
|
38
|
+
opt.parse!(args)
|
39
|
+
|
40
|
+
if @require_flags.all? { |flag| options.has_key?(flag) }
|
41
|
+
options
|
42
|
+
else
|
43
|
+
$stdout.puts opt.help
|
44
|
+
exit
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/lock_diff/diff_info.rb
CHANGED
@@ -8,7 +8,8 @@ module LockDiff
|
|
8
8
|
NEW = 'new'
|
9
9
|
|
10
10
|
attr_reader :old_package, :new_package
|
11
|
-
def_delegators :package, :name, :
|
11
|
+
def_delegators :package, :name, :repository_url
|
12
|
+
def_delegator :package, :url, :package_url
|
12
13
|
|
13
14
|
def initialize(old_package:, new_package:)
|
14
15
|
@old_package = old_package
|
@@ -68,7 +69,7 @@ module LockDiff
|
|
68
69
|
|
69
70
|
Github::ChangelogUrlFinder.new(
|
70
71
|
repository: package.repository,
|
71
|
-
|
72
|
+
repository_url: package.repository_url,
|
72
73
|
ref: ref
|
73
74
|
).call
|
74
75
|
end
|
@@ -79,7 +80,7 @@ module LockDiff
|
|
79
80
|
end
|
80
81
|
|
81
82
|
def commits_url
|
82
|
-
return unless package.
|
83
|
+
return unless package.repository_url
|
83
84
|
old_ref = @old_package.ref
|
84
85
|
new_ref = @new_package.ref
|
85
86
|
commits_url =
|
@@ -94,7 +95,7 @@ module LockDiff
|
|
94
95
|
"commits/#{new_ref}" if new_ref
|
95
96
|
end
|
96
97
|
|
97
|
-
"#{package.
|
98
|
+
"#{package.repository_url}/#{commits_url}" if commits_url
|
98
99
|
end
|
99
100
|
|
100
101
|
def commits_url_text
|
@@ -18,8 +18,8 @@ module LockDiff
|
|
18
18
|
|
19
19
|
def headers
|
20
20
|
[
|
21
|
-
"|
|
22
|
-
"
|
21
|
+
"| package | repo | status | commits | changelog |",
|
22
|
+
"|---------|:----:|:------:|---------|-----------|"
|
23
23
|
]
|
24
24
|
end
|
25
25
|
|
@@ -35,7 +35,8 @@ module LockDiff
|
|
35
35
|
|
36
36
|
def call
|
37
37
|
text = []
|
38
|
-
text <<
|
38
|
+
text << package
|
39
|
+
text << repository
|
39
40
|
text << status
|
40
41
|
text << commits_text
|
41
42
|
text << changelog
|
@@ -50,14 +51,22 @@ module LockDiff
|
|
50
51
|
diff_info.status_emoji
|
51
52
|
end
|
52
53
|
|
53
|
-
def
|
54
|
-
if diff_info.
|
55
|
-
"[#{diff_info.name}](#{diff_info.
|
54
|
+
def package
|
55
|
+
if diff_info.package_url
|
56
|
+
"[#{diff_info.name}](#{diff_info.package_url})"
|
56
57
|
else
|
57
58
|
diff_info.name
|
58
59
|
end
|
59
60
|
end
|
60
61
|
|
62
|
+
def repository
|
63
|
+
if diff_info.repository_url
|
64
|
+
"[:octocat:](#{diff_info.repository_url})"
|
65
|
+
else
|
66
|
+
''
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
61
70
|
def commits_text
|
62
71
|
if diff_info.commits_url
|
63
72
|
"[#{diff_info.commits_url_text}](#{diff_info.commits_url})"
|
@@ -1,13 +1,6 @@
|
|
1
1
|
module LockDiff
|
2
2
|
module Gem
|
3
3
|
class LockfileComparator
|
4
|
-
def self.compare_by(pr_gemfile_lock)
|
5
|
-
new(
|
6
|
-
old_lockfile: pr_gemfile_lock.base_file,
|
7
|
-
new_lockfile: pr_gemfile_lock.head_file
|
8
|
-
).call
|
9
|
-
end
|
10
|
-
|
11
4
|
def initialize(old_lockfile:, new_lockfile:)
|
12
5
|
@old_lockfile = old_lockfile
|
13
6
|
@new_lockfile = new_lockfile
|
@@ -3,7 +3,8 @@ module LockDiff
|
|
3
3
|
class Package
|
4
4
|
extend Forwardable
|
5
5
|
|
6
|
-
def_delegators :@spec, :name, :revision, :version, :
|
6
|
+
def_delegators :@spec, :name, :revision, :version, :repository_url
|
7
|
+
def_delegator :@spec, :ruby_gem_url, :url
|
7
8
|
|
8
9
|
def initialize(spec)
|
9
10
|
@spec = spec
|
@@ -21,23 +22,19 @@ module LockDiff
|
|
21
22
|
revision != other.revision || version != other.version
|
22
23
|
end
|
23
24
|
|
24
|
-
def url
|
25
|
-
@spec.github_url || @spec.homepage_url
|
26
|
-
end
|
27
|
-
|
28
25
|
def repository
|
29
|
-
Github::RepositoryNameDetector.new(@spec.
|
26
|
+
@repository ||= Github::RepositoryNameDetector.new(@spec.repository_url).call
|
30
27
|
end
|
31
28
|
|
32
29
|
private
|
33
30
|
|
34
31
|
def git_tag
|
35
|
-
return unless version
|
32
|
+
return unless version && repository
|
36
33
|
return @git_tag if defined? @git_tag
|
37
34
|
@git_tag = Github::TagFinder.new(
|
38
35
|
repository: repository,
|
39
36
|
package_name: name,
|
40
|
-
|
37
|
+
version: version
|
41
38
|
).call
|
42
39
|
end
|
43
40
|
|
@@ -9,27 +9,49 @@ module LockDiff
|
|
9
9
|
extend Forwardable
|
10
10
|
|
11
11
|
def initialize(name)
|
12
|
-
|
13
|
-
@ruby_gem = OpenStruct.new(JSON.parse(content))
|
14
|
-
rescue => e
|
15
|
-
LockDiff.logger.warn("Could not fetch gem info of #{name} because of #{e.inspect}")
|
16
|
-
@ruby_gem = NullRubyGem.new(name)
|
12
|
+
@ruby_gem = Repository.find(name)
|
17
13
|
end
|
18
14
|
|
19
|
-
def
|
20
|
-
@
|
15
|
+
def repository_url
|
16
|
+
@repository_url ||= Github::UrlDetector.new([source_code_url, homepage_url]).call
|
21
17
|
end
|
22
18
|
|
23
19
|
def homepage_url
|
24
20
|
@ruby_gem.homepage_uri
|
25
21
|
end
|
26
22
|
|
23
|
+
def url
|
24
|
+
@ruby_gem.project_uri
|
25
|
+
end
|
26
|
+
|
27
27
|
private
|
28
28
|
|
29
29
|
def source_code_url
|
30
30
|
@ruby_gem.source_code_uri
|
31
31
|
end
|
32
32
|
|
33
|
+
class Repository
|
34
|
+
class << self
|
35
|
+
def find(name)
|
36
|
+
ruby_gem = repository[name]
|
37
|
+
return ruby_gem if ruby_gem
|
38
|
+
repository[name] = fetch(name)
|
39
|
+
end
|
40
|
+
|
41
|
+
def fetch(name)
|
42
|
+
content = HTTPClient.get_content("https://rubygems.org/api/v1/gems/#{name}.json")
|
43
|
+
OpenStruct.new(JSON.parse(content))
|
44
|
+
rescue => e
|
45
|
+
LockDiff.logger.warn("Could not fetch gem info of #{name} because of #{e.inspect}")
|
46
|
+
NullRubyGem.new(name)
|
47
|
+
end
|
48
|
+
|
49
|
+
def repository
|
50
|
+
@repository ||= {}
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
33
55
|
end
|
34
56
|
|
35
57
|
class NullRubyGem
|
@@ -43,6 +65,9 @@ module LockDiff
|
|
43
65
|
def source_code_uri
|
44
66
|
end
|
45
67
|
|
68
|
+
def project_uri
|
69
|
+
end
|
70
|
+
|
46
71
|
end
|
47
72
|
end
|
48
73
|
end
|
data/lib/lock_diff/gem/spec.rb
CHANGED
@@ -36,23 +36,25 @@ module LockDiff
|
|
36
36
|
Package.new(self)
|
37
37
|
end
|
38
38
|
|
39
|
-
def
|
39
|
+
def repository_url; end
|
40
40
|
def homepage_url; end
|
41
|
+
def ruby_gem_url; end
|
41
42
|
end
|
42
43
|
|
43
44
|
class RubyGemSpec < Base
|
44
|
-
def_delegators :ruby_gem, :
|
45
|
+
def_delegators :ruby_gem, :repository_url, :homepage_url
|
46
|
+
def_delegator :ruby_gem, :url, :ruby_gem_url
|
45
47
|
|
46
48
|
private
|
47
49
|
|
48
50
|
def ruby_gem
|
49
|
-
@ruby_gem ||=
|
51
|
+
@ruby_gem ||= RubyGem.new(@spec.name)
|
50
52
|
end
|
51
53
|
end
|
52
54
|
|
53
55
|
class GitSpec < Base
|
54
|
-
def
|
55
|
-
@
|
56
|
+
def repository_url
|
57
|
+
@repository_url ||= Github::UrlDetector.new(@spec.source.uri).call
|
56
58
|
end
|
57
59
|
end
|
58
60
|
|
@@ -74,8 +76,9 @@ module LockDiff
|
|
74
76
|
nil
|
75
77
|
end
|
76
78
|
|
77
|
-
def
|
79
|
+
def repository_url; end
|
78
80
|
def homepage_url; end
|
81
|
+
def ruby_gem_url; end
|
79
82
|
|
80
83
|
def to_package
|
81
84
|
Package.new(self)
|
data/lib/lock_diff/gem.rb
CHANGED
@@ -2,20 +2,18 @@ require "bundler"
|
|
2
2
|
require_relative "gem/lockfile_comparator"
|
3
3
|
require_relative "gem/package"
|
4
4
|
require_relative "gem/ruby_gem"
|
5
|
-
require_relative "gem/ruby_gem_repository"
|
6
5
|
require_relative "gem/spec"
|
7
6
|
|
8
7
|
module LockDiff
|
9
8
|
module Gem
|
10
9
|
class << self
|
11
|
-
|
12
|
-
|
13
|
-
def lock_file_diffs(pull_request)
|
14
|
-
pr_lockfile = Github::PrLockfile.new(pull_request, 'Gemfile.lock')
|
15
|
-
raise NotChangedLockfile unless pr_lockfile.changed?
|
16
|
-
LockfileComparator.compare_by(pr_lockfile)
|
10
|
+
def lockfile_name
|
11
|
+
'Gemfile.lock'
|
17
12
|
end
|
18
13
|
|
14
|
+
def lockfile_comparator
|
15
|
+
LockfileComparator
|
16
|
+
end
|
19
17
|
end
|
20
18
|
end
|
21
19
|
end
|
@@ -10,9 +10,9 @@ module LockDiff
|
|
10
10
|
news
|
11
11
|
)
|
12
12
|
|
13
|
-
def initialize(repository:,
|
13
|
+
def initialize(repository:, repository_url:, ref:)
|
14
14
|
@repository = repository
|
15
|
-
@
|
15
|
+
@repository_url = repository_url
|
16
16
|
@ref = ref
|
17
17
|
end
|
18
18
|
|
@@ -32,9 +32,9 @@ module LockDiff
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def find_release_url
|
35
|
-
return unless @
|
35
|
+
return unless @repository_url
|
36
36
|
unless Github.client.exist_releases?(@repository)
|
37
|
-
@
|
37
|
+
@repository_url + "/releases"
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
@@ -24,7 +24,7 @@ module LockDiff
|
|
24
24
|
Github::PullRequest.new(@client.pull_request(repository, number))
|
25
25
|
end
|
26
26
|
|
27
|
-
def
|
27
|
+
def newer_pull_requests(repository)
|
28
28
|
@client.pull_requests(repository).
|
29
29
|
map { |pull_request| Github::PullRequest.new(pull_request) }
|
30
30
|
end
|
@@ -6,14 +6,6 @@ module LockDiff
|
|
6
6
|
@pr = pull_request
|
7
7
|
end
|
8
8
|
|
9
|
-
def base_sha
|
10
|
-
@pr.base.sha
|
11
|
-
end
|
12
|
-
|
13
|
-
def head_sha
|
14
|
-
@pr.head.sha
|
15
|
-
end
|
16
|
-
|
17
9
|
def base_ref
|
18
10
|
@pr.base.ref
|
19
11
|
end
|
@@ -25,6 +17,26 @@ module LockDiff
|
|
25
17
|
def number
|
26
18
|
@pr.number
|
27
19
|
end
|
20
|
+
|
21
|
+
def repository
|
22
|
+
@pr.base.repo.full_name
|
23
|
+
end
|
24
|
+
|
25
|
+
def find_content_path(file_name)
|
26
|
+
Github.client.pull_request_content_path(repository, number, file_name)
|
27
|
+
end
|
28
|
+
|
29
|
+
def add_comment(comment)
|
30
|
+
Github.client.add_comment(repository, number, comment)
|
31
|
+
end
|
32
|
+
|
33
|
+
def base_file(path)
|
34
|
+
Github.client.file(repository, path: path, ref: @pr.base.sha)
|
35
|
+
end
|
36
|
+
|
37
|
+
def head_file(path)
|
38
|
+
Github.client.file(repository, path: path, ref: @pr.head.sha)
|
39
|
+
end
|
28
40
|
end
|
29
41
|
end
|
30
42
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module LockDiff
|
2
2
|
module Github
|
3
3
|
class TagFinder
|
4
|
-
def initialize(repository:, package_name:,
|
4
|
+
def initialize(repository:, package_name:, version:)
|
5
5
|
@repository = repository
|
6
6
|
@package_name = package_name
|
7
|
-
@version_str =
|
7
|
+
@version_str = version.to_s
|
8
8
|
end
|
9
9
|
|
10
10
|
def call
|
@@ -16,19 +16,41 @@ module LockDiff
|
|
16
16
|
def find_tag(page: 1, limit:, per_page:)
|
17
17
|
return nil if page > limit
|
18
18
|
|
19
|
-
fetched_tags =
|
20
|
-
tag = fetched_tags.find
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
fetched_tags = TagsRepository.find(@repository, page: page, per_page: per_page)
|
20
|
+
tag = fetched_tags.find { |tag_name| match_rule?(tag_name) }
|
21
|
+
|
22
|
+
return tag if tag
|
23
|
+
|
24
|
+
unless fetched_tags.count < per_page
|
25
|
+
find_tag(page: page + 1, limit: limit, per_page: per_page)
|
24
26
|
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def match_rule?(tag_name)
|
30
|
+
[
|
31
|
+
@version_str,
|
32
|
+
"v#{@version_str}",
|
33
|
+
"#{@package_name}-#{@version_str}",
|
34
|
+
"#{@package_name.downcase}-#{@version_str}"
|
35
|
+
].include?(tag_name)
|
36
|
+
end
|
37
|
+
|
38
|
+
class TagsRepository
|
39
|
+
class << self
|
40
|
+
def find(repo_name, options = {})
|
41
|
+
key = "#{repo_name}-#{options[:page]}"
|
42
|
+
ruby_gem = repository[key]
|
43
|
+
return ruby_gem if repository.has_key?(key)
|
44
|
+
repository[key] = fetch(repo_name, options)
|
45
|
+
end
|
46
|
+
|
47
|
+
def fetch(repo_name, options = {})
|
48
|
+
LockDiff.logger.debug { "Fetch tags #{repo_name}, #{options}"}
|
49
|
+
Github.client.tag_names(repo_name, options)
|
50
|
+
end
|
25
51
|
|
26
|
-
|
27
|
-
|
28
|
-
else
|
29
|
-
LockDiff.logger.debug { "Not found tag of #{@package_name}, #{@version_str} by page: #{page}, per_page: #{per_page}"}
|
30
|
-
unless fetched_tags.count < per_page
|
31
|
-
find_tag(page: page + 1, limit: limit, per_page: per_page)
|
52
|
+
def repository
|
53
|
+
@repository ||= {}
|
32
54
|
end
|
33
55
|
end
|
34
56
|
end
|
data/lib/lock_diff/github.rb
CHANGED
@@ -2,8 +2,7 @@ require_relative "github/access_token"
|
|
2
2
|
require_relative "github/changelog_url_finder"
|
3
3
|
require_relative "github/client"
|
4
4
|
require_relative "github/content"
|
5
|
-
require_relative "github/
|
6
|
-
require_relative "github/pr_lockfile"
|
5
|
+
require_relative "github/url_detector"
|
7
6
|
require_relative "github/pull_request"
|
8
7
|
require_relative "github/repository_name_detector"
|
9
8
|
require_relative "github/tag_finder"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module LockDiff
|
2
|
+
class LockfileComparator
|
3
|
+
class << self
|
4
|
+
def compare_by(pull_request)
|
5
|
+
file_path = pull_request.find_content_path(lockfile_name)
|
6
|
+
raise NotChangedLockfile unless !!file_path
|
7
|
+
|
8
|
+
LockDiff.config.strategy.lockfile_comparator.new(
|
9
|
+
old_lockfile: pull_request.base_file(file_path),
|
10
|
+
new_lockfile: pull_request.head_file(file_path)
|
11
|
+
).call
|
12
|
+
end
|
13
|
+
|
14
|
+
def lockfile_name
|
15
|
+
LockDiff.config.strategy.lockfile_name
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -1,29 +1,28 @@
|
|
1
1
|
module LockDiff
|
2
2
|
class PullRequest
|
3
|
-
|
3
|
+
extend Forwardable
|
4
4
|
|
5
|
-
class
|
5
|
+
class << self
|
6
|
+
class NotChangedLockfile < StandardError; end
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
raise NotFoundPullRequest.new(message)
|
15
|
-
end
|
8
|
+
def find_by(repository:, number:)
|
9
|
+
client.pull_request(repository, number)
|
10
|
+
rescue => e
|
11
|
+
message = "Not found pull request by (repository: #{repository}, number: #{number}, client: #{LockDiff.client.class}). Becase of #{e.inspect}"
|
12
|
+
LockDiff.logger.warn(message)
|
13
|
+
raise NotFoundPullRequest.new(message)
|
14
|
+
end
|
16
15
|
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
def latest_by_tachikoma(repository)
|
17
|
+
client.newer_pull_requests(repository).
|
18
|
+
find { |pull_request| pull_request.head_ref.include?("tachikoma") }
|
19
|
+
end
|
20
20
|
|
21
|
-
|
22
|
-
@pr.head_sha
|
23
|
-
end
|
21
|
+
private
|
24
22
|
|
25
|
-
|
26
|
-
|
23
|
+
def client
|
24
|
+
LockDiff.config.pr_repository_service.client
|
25
|
+
end
|
27
26
|
end
|
28
27
|
|
29
28
|
end
|
data/lib/lock_diff/version.rb
CHANGED
data/lib/lock_diff.rb
CHANGED
@@ -5,6 +5,7 @@ require "lock_diff/diff_info"
|
|
5
5
|
require "lock_diff/formatter/github_markdown"
|
6
6
|
require "lock_diff/gem"
|
7
7
|
require "lock_diff/github"
|
8
|
+
require "lock_diff/lockfile_comparator"
|
8
9
|
require "lock_diff/pull_request"
|
9
10
|
require "lock_diff/version"
|
10
11
|
|
@@ -16,48 +17,50 @@ module LockDiff
|
|
16
17
|
self.config = Config.new
|
17
18
|
end
|
18
19
|
|
19
|
-
def client
|
20
|
-
config.client_class.client
|
21
|
-
end
|
22
|
-
|
23
20
|
def logger
|
24
21
|
config.logger
|
25
22
|
end
|
26
23
|
|
27
24
|
def run(repository:, number:, post_comment: false)
|
28
|
-
pr = PullRequest.
|
29
|
-
|
30
|
-
result = config.formatter.format(lockfile_diff_infos)
|
31
|
-
|
32
|
-
if post_comment
|
33
|
-
client.add_comment(repository, number, result)
|
34
|
-
else
|
35
|
-
$stdout.puts result
|
36
|
-
end
|
25
|
+
pr = PullRequest.find_by(repository: repository, number: number)
|
26
|
+
_run(pull_request: pr, post_comment: post_comment)
|
37
27
|
end
|
38
28
|
|
39
29
|
def run_by_latest_tachikoma(repository:, post_comment: false)
|
40
|
-
pr =
|
41
|
-
find { |pull_request| pull_request.head_ref.include?("tachikoma") }
|
30
|
+
pr = PullRequest.latest_by_tachikoma(repository)
|
42
31
|
if pr
|
43
|
-
|
32
|
+
LockDiff.logger.info { "Running on repository: #{pr.repository}, number: #{pr.number}"}
|
33
|
+
_run(pull_request: pr, post_comment: post_comment)
|
44
34
|
else
|
45
35
|
LockDiff.logger.warn("Not found pull request by tachikoma. (Hint: search pull request by whether branch name includes 'tachikoma'")
|
46
36
|
end
|
47
37
|
end
|
48
38
|
|
49
|
-
|
50
|
-
attr_accessor :client_class, :formatter, :strategy, :logger
|
39
|
+
private
|
51
40
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
41
|
+
def _run(pull_request:, post_comment: false)
|
42
|
+
lockfile_diff_infos = LockfileComparator.compare_by(pull_request)
|
43
|
+
result = config.formatter.format(lockfile_diff_infos)
|
44
|
+
|
45
|
+
if post_comment
|
46
|
+
pull_request.add_comment(result)
|
47
|
+
else
|
48
|
+
$stdout.puts result
|
58
49
|
end
|
59
50
|
end
|
60
51
|
end
|
52
|
+
|
53
|
+
class Config
|
54
|
+
attr_accessor :pr_repository_service, :formatter, :strategy, :logger
|
55
|
+
|
56
|
+
def initialize
|
57
|
+
@pr_repository_service = Github
|
58
|
+
@formatter = Formatter::GithubMarkdown
|
59
|
+
@strategy = Gem
|
60
|
+
@logger = Logger.new($stdout)
|
61
|
+
@logger.level = :warn
|
62
|
+
end
|
63
|
+
end
|
61
64
|
end
|
62
65
|
|
63
66
|
LockDiff.init!
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lock_diff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- vividmuimui
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-07-
|
11
|
+
date: 2017-07-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: octokit
|
@@ -131,25 +131,24 @@ files:
|
|
131
131
|
- exe/lock_diff
|
132
132
|
- exe/lock_diff_for_tachikoma
|
133
133
|
- lib/lock_diff.rb
|
134
|
+
- lib/lock_diff/cli/option_parser.rb
|
134
135
|
- lib/lock_diff/diff_info.rb
|
135
136
|
- lib/lock_diff/formatter/github_markdown.rb
|
136
137
|
- lib/lock_diff/gem.rb
|
137
138
|
- lib/lock_diff/gem/lockfile_comparator.rb
|
138
139
|
- lib/lock_diff/gem/package.rb
|
139
140
|
- lib/lock_diff/gem/ruby_gem.rb
|
140
|
-
- lib/lock_diff/gem/ruby_gem_repository.rb
|
141
141
|
- lib/lock_diff/gem/spec.rb
|
142
142
|
- lib/lock_diff/github.rb
|
143
143
|
- lib/lock_diff/github/access_token.rb
|
144
144
|
- lib/lock_diff/github/changelog_url_finder.rb
|
145
145
|
- lib/lock_diff/github/client.rb
|
146
146
|
- lib/lock_diff/github/content.rb
|
147
|
-
- lib/lock_diff/github/github_url_detector.rb
|
148
|
-
- lib/lock_diff/github/pr_lockfile.rb
|
149
147
|
- lib/lock_diff/github/pull_request.rb
|
150
148
|
- lib/lock_diff/github/repository_name_detector.rb
|
151
149
|
- lib/lock_diff/github/tag_finder.rb
|
152
|
-
- lib/lock_diff/
|
150
|
+
- lib/lock_diff/github/url_detector.rb
|
151
|
+
- lib/lock_diff/lockfile_comparator.rb
|
153
152
|
- lib/lock_diff/pull_request.rb
|
154
153
|
- lib/lock_diff/version.rb
|
155
154
|
- lock_diff.gemspec
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module LockDiff
|
2
|
-
module Gem
|
3
|
-
class RubyGemRepository
|
4
|
-
class << self
|
5
|
-
def find(name)
|
6
|
-
ruby_gem = repository[name]
|
7
|
-
return ruby_gem if ruby_gem
|
8
|
-
repository[name] = RubyGem.new(name)
|
9
|
-
end
|
10
|
-
|
11
|
-
def repository
|
12
|
-
@repository ||= {}
|
13
|
-
end
|
14
|
-
|
15
|
-
def clear
|
16
|
-
@repository = {}
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module LockDiff
|
2
|
-
module Github
|
3
|
-
class PrLockfile
|
4
|
-
def initialize(pull_request, lockfile_name)
|
5
|
-
@pr = pull_request
|
6
|
-
@lockfile_name = lockfile_name
|
7
|
-
end
|
8
|
-
|
9
|
-
def changed?
|
10
|
-
!!path
|
11
|
-
end
|
12
|
-
|
13
|
-
def path
|
14
|
-
@path ||= @pr.find_content_path(@lockfile_name)
|
15
|
-
end
|
16
|
-
|
17
|
-
def base_file
|
18
|
-
@base_file ||= LockDiff.client.file(@pr.repository, path: path, ref: @pr.base_sha)
|
19
|
-
end
|
20
|
-
|
21
|
-
def head_file
|
22
|
-
@head_file ||= LockDiff.client.file(@pr.repository, path: path, ref: @pr.head_sha)
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
require "optparse"
|
2
|
-
|
3
|
-
module LockDiff
|
4
|
-
class OptionParser
|
5
|
-
class << self
|
6
|
-
def parse(args, require_flags:)
|
7
|
-
new(require_flags).parse(args)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
def initialize(require_flags)
|
12
|
-
@require_flags = require_flags
|
13
|
-
end
|
14
|
-
|
15
|
-
def parse(args)
|
16
|
-
options = {
|
17
|
-
post_comment: false
|
18
|
-
}
|
19
|
-
opt = ::OptionParser.new
|
20
|
-
|
21
|
-
opt.separator("Require flags")
|
22
|
-
if @require_flags.include? :repository
|
23
|
-
opt.on('-r', '--repository=REPOSITORY', 'Like as "user/repository"') { |v| options[:repository] = v }
|
24
|
-
end
|
25
|
-
if @require_flags.include? :number
|
26
|
-
opt.on('-n', '--number=PULL_REQUEST_NUMBER') { |v| options[:number] = v }
|
27
|
-
end
|
28
|
-
|
29
|
-
opt.separator("\nOptional flags")
|
30
|
-
opt.on('--post-comment=true or false', 'Print result to stdout when false. (default is false)') { |v| options[:post_comment] = v }
|
31
|
-
opt.on("-v", "--verbose", "Run verbosely") { LockDiff.logger.level = :info }
|
32
|
-
opt.on("--more-verbose", "Run more verbosely") { LockDiff.logger.level = :debug }
|
33
|
-
opt.on_tail("--version", "Show version") do
|
34
|
-
$stdout.puts LockDiff::VERSION
|
35
|
-
exit
|
36
|
-
end
|
37
|
-
opt.parse!(args)
|
38
|
-
|
39
|
-
if @require_flags.all? { |flag| options.has_key?(flag) }
|
40
|
-
options
|
41
|
-
else
|
42
|
-
$stdout.puts opt.help
|
43
|
-
exit
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
48
|
-
end
|