changelogerator 0.0.3 → 0.0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/changelogerator.rb +51 -14
- metadata +19 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6061881a5234a97b447b594f942e78a3bd4fcad68ed910265d12ed711eda8b64
|
4
|
+
data.tar.gz: f575aa00e5d4abbab3adaf529e309889f5261ced0e40da74186ab144563dcbe6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d3f92505939fb6858ad0ce76f1e037973c07f7177034b3fc96c0189c55fcc4a109c34427306fffb7d8ebcb816551517065c0e3bc12651dc990aafacd0280b579
|
7
|
+
data.tar.gz: 6fae7c8942409d782ff606d67b3963a7869513529fd7f61caea8f7198f0c416b02196e0d08865b602e8d9c3c2ed8a35eb3d1cfe57359d147d7a147f318446efc
|
data/lib/changelogerator.rb
CHANGED
@@ -8,6 +8,7 @@
|
|
8
8
|
# Probably not tremendously useful to other projects.
|
9
9
|
class Changelog
|
10
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
|
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'
|
@@ -70,7 +80,8 @@ class Changelog
|
|
70
80
|
@gh = Octokit::Client.new(
|
71
81
|
access_token: token
|
72
82
|
)
|
73
|
-
@
|
83
|
+
@prefix = prefix
|
84
|
+
@changes = prs_from_ids(pr_ids_from_git_diff(from, to)).map(&:to_hash)
|
74
85
|
# add priority to each change
|
75
86
|
@changes.map { |c| apply_priority_to_change(c) }
|
76
87
|
end
|
@@ -79,35 +90,61 @@ class Changelog
|
|
79
90
|
self.class.changes_with_label(@changes, label)
|
80
91
|
end
|
81
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
|
+
|
82
106
|
private
|
83
107
|
|
84
108
|
def apply_priority_to_change(change)
|
85
109
|
@priorities.each do |p|
|
86
|
-
change[:priority] = p if change
|
110
|
+
change[:priority] = p if change[:labels].any? { |l| l[:name] == p[:label] }
|
87
111
|
end
|
112
|
+
# Failsafe: add lowest priority if none detected
|
113
|
+
change[:priority] ||= @priorities[0]
|
88
114
|
change
|
89
115
|
end
|
90
116
|
|
117
|
+
def prettify_title(pull)
|
118
|
+
pull[:pretty_title] = if @prefix
|
119
|
+
"#{pull[:title]} (#{@repo}##{pull[:number]})"
|
120
|
+
else
|
121
|
+
"#{pull[:title]} (##{pull[:number]})"
|
122
|
+
end
|
123
|
+
pull
|
124
|
+
end
|
125
|
+
|
91
126
|
def pr_ids_from_git_diff(from, to)
|
92
127
|
@gh.compare(@repo, from, to).commits.map do |c|
|
93
128
|
title = c.commit.message.split("\n\n").first
|
94
129
|
next unless title =~ /\(#[0-9]+\)$/
|
95
130
|
|
96
131
|
title.gsub(/.*#([0-9]+)\)$/, '\1')
|
97
|
-
end.compact
|
132
|
+
end.compact.map(&:to_i)
|
98
133
|
end
|
99
134
|
|
100
|
-
def prs_from_ids(ids
|
135
|
+
def prs_from_ids(ids)
|
136
|
+
batch_size = 100
|
101
137
|
prs = []
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
138
|
+
@gh.pulls(@repo, state: 'closed', per_page: batch_size)
|
139
|
+
cur_batch = @gh.last_response
|
140
|
+
until ids.empty?
|
141
|
+
prs += cur_batch.data.select { |pr| ids.include? pr.number }
|
142
|
+
ids -= cur_batch.data.map(&:number)
|
143
|
+
break if cur_batch.rels[:last].nil?
|
144
|
+
|
145
|
+
cur_batch = cur_batch.rels[:next].get
|
110
146
|
end
|
111
|
-
prs
|
147
|
+
prs.flatten
|
148
|
+
prs.map { |pr| prettify_title(pr) }
|
112
149
|
end
|
113
150
|
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.
|
4
|
+
version: 0.0.10
|
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-
|
11
|
+
date: 2020-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
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: '
|
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: '
|
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: []
|