changelogerator 0.0.2 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/changelogerator.rb +56 -24
  3. metadata +19 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: abb70fa6b03f1b32056fe0c98ca923521c1a1f34799ce26d620a691386645b99
4
- data.tar.gz: f1f9879fee9e9e105ef470d7f1c62240f9bf1270918cdfd0c5dbabbe4f8c6b28
3
+ metadata.gz: 5d7e604fe48a69c44b84032971ca11723132e4570f558fb501205947f31e5b26
4
+ data.tar.gz: fd9f8601e21a0d927e00cb4887656664b40f2d7b22ef48af9e93bbcada39d29e
5
5
  SHA512:
6
- metadata.gz: 4986ec720e213717191e03077ce3aae3bea1e43b50d0411fdc0d7c4e3fedaf47f10cb0ec89a4372c1540f185b7ad3d3c7acdd216aaacbc456bbb5698d1a22396
7
- data.tar.gz: c462ba5d117b9f37659407473b78f1a91b2a8aba54dc89ff2b7d33d3de0a9aa6d32d606fd1d7001dcb328906f7c19d8b7aaf30e159e3c3ed21a5c55abbb8f489
6
+ metadata.gz: dcf89c2dbf2dc1ad2d43664a97b54a802f65b92056643f2ae6fb4ae5c5224470783faf26b268acc2d3db748691d241ca7ac46a8c35c6d69933645a33c8765a41
7
+ data.tar.gz: d9d256e73a61f8de59d077f390715522ea4a944f97f595b24a30be713aca77278a3c298f86dbfe5a6dd7bd01f99a4291fbe78b46551dfa83a87eec604d77f773
@@ -7,7 +7,8 @@
7
7
  # on how we classify the importance of PRs in the paritytech/polkadot project.
8
8
  # Probably not tremendously useful to other projects.
9
9
  class Changelog
10
- require 'github_api'
10
+ require 'octokit'
11
+ require 'git_diff_parser'
11
12
 
12
13
  attr_accessor :changes
13
14
  attr_reader :priority
@@ -51,10 +52,19 @@ class Changelog
51
52
 
52
53
  def self.changes_with_label(changes, label)
53
54
  changes.select do |change|
54
- change.labels.any? { |c| c[:name] == label } == true
55
+ change[:labels].any? { |c| c[:name] == label } == true
55
56
  end
56
57
  end
57
58
 
59
+ def self.changes_files_in_paths?(change, paths)
60
+ changed_files = GitDiffParser.parse(Octokit.get(change.diff_url)).files
61
+ paths = [paths] unless paths.is_a? Array
62
+ paths.each do |path|
63
+ return true if changed_files.find { |l| l.match path }
64
+ end
65
+ nil
66
+ end
67
+
58
68
  ## End of class methods
59
69
 
60
70
  # github_repo: 'paritytech/polkadot'
@@ -65,15 +75,13 @@ class Changelog
65
75
  # token: a Github personal access token
66
76
  # prefix: whether or not to prefix PR numbers with their repo in the changelog
67
77
  def initialize(github_repo, from, to, token: '', prefix: nil)
68
- org, repo = github_repo.split('/')
69
- @ghr = github_repo
78
+ @repo = github_repo
70
79
  @priorities = self.class.priorities
71
- @gh = Github.new do |c|
72
- c.oauth_token = token
73
- c.org = org
74
- c.repo = repo
75
- end
76
- @changes = prs_from_ids(pr_ids_from_git_diff(from, to), prefix)
80
+ @gh = Octokit::Client.new(
81
+ access_token: token
82
+ )
83
+ @prefix = prefix
84
+ @changes = prs_from_ids(pr_ids_from_git_diff(from, to)).map(&:to_hash)
77
85
  # add priority to each change
78
86
  @changes.map { |c| apply_priority_to_change(c) }
79
87
  end
@@ -82,35 +90,59 @@ class Changelog
82
90
  self.class.changes_with_label(@changes, label)
83
91
  end
84
92
 
93
+ def runtime_changes?
94
+ nil
95
+ end
96
+
97
+ def add(change)
98
+ changes.prepend(apply_priority_to_change(change))
99
+ end
100
+
101
+ def add_from_id(id)
102
+ pull = @gh.pull_request(@repo, id)
103
+ add(prettify_title(pull))
104
+ end
105
+
85
106
  private
86
107
 
87
108
  def apply_priority_to_change(change)
88
109
  @priorities.each do |p|
89
- change[:priority] = p if change.labels.any? { |l| l[:name] == p[:label] }
110
+ change[:priority] = p if change[:labels].any? { |l| l[:name] == p[:label] }
90
111
  end
91
112
  change
92
113
  end
93
114
 
115
+ def prettify_title(pull)
116
+ pull[:pretty_title] = if @prefix
117
+ "#{pull[:title]} (#{@repo}##{pull[:number]})"
118
+ else
119
+ "#{pull[:title]} (##{pull[:number]})"
120
+ end
121
+ pull
122
+ end
123
+
94
124
  def pr_ids_from_git_diff(from, to)
95
- @gh.repos.commits.compare(@gh.org, @gh.repo, from, to).body.commits.map do |l|
96
- title = l.commit.message.split("\n\n").first
125
+ @gh.compare(@repo, from, to).commits.map do |c|
126
+ title = c.commit.message.split("\n\n").first
97
127
  next unless title =~ /\(#[0-9]+\)$/
98
128
 
99
129
  title.gsub(/.*#([0-9]+)\)$/, '\1')
100
- end.compact
130
+ end.compact.map(&:to_i)
101
131
  end
102
132
 
103
- def prs_from_ids(ids, prefix)
133
+ def prs_from_ids(ids)
134
+ batch_size = 100
104
135
  prs = []
105
- ids.each do |pr|
106
- pull = @gh.pull_requests.get(@gh.org, @gh.repo, pr).body
107
- pull[:pretty_title] = if prefix
108
- "#{pull[:title]} (#{@ghr}##{pull[:number]})"
109
- else
110
- "#{pull[:title]} (##{pull[:number]})"
111
- end
112
- prs.push pull
136
+ @gh.pulls(@repo, state: 'closed', per_page: batch_size)
137
+ cur_batch = @gh.last_response
138
+ until ids.empty?
139
+ prs += cur_batch.data.select { |pr| ids.include? pr.number }
140
+ ids -= cur_batch.data.map(&:number)
141
+ break if cur_batch.rels[:last].nil?
142
+
143
+ cur_batch = cur_batch.rels[:next].get
113
144
  end
114
- prs
145
+ prs.flatten
146
+ prs.map { |pr| prettify_title(pr) }
115
147
  end
116
148
  end
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: changelogerator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Pugh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-28 00:00:00.000000000 Z
11
+ date: 2020-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: github_api
14
+ name: git_diff_parser
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.19'
19
+ version: '3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.19'
26
+ version: '3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: octokit
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '4'
27
41
  description: Simple helper class for paritytech/polkadot changelogs
28
42
  email:
29
43
  executables: []