changelogerator 0.0.2 → 0.0.9

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.
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: []