semmy 0.3.0 → 0.4.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: 5bc7f29004979528fcaddf47d8f0538d6b3e7176
4
- data.tar.gz: c176ee31e95d87d6e6c097db4861fcc5d9ce9dfb
3
+ metadata.gz: e37930e9fb640ca1d09d44ad75a455267528fdcb
4
+ data.tar.gz: d9b8a83c5b32ed68a8409b40107709676ec24aef
5
5
  SHA512:
6
- metadata.gz: ae0601113bb307b34a638267abc40487a37d1abd53704c3c7cd3649689d758fb0d17d658f1a51109bd571ccb271fb5d2e71e1b62b4ecb64f056264eb0893b3b5
7
- data.tar.gz: 64fc0cae3c667e031da0198b82982b542152e5f33873453e345a9e1fd8dbdbd832a33f3ba031e0d30e1df8438ba7b4619b757313ba49403ad7d56cc7e18c7af8
6
+ metadata.gz: 97963c7d57e85aa7f04d94f0fbb9c3def74e5a387163f390e0764b8cff55ed2762693d3bafded2206f2fa5a5666c58b0a9a73eae1b27f3492e62a0adeb09c0ce
7
+ data.tar.gz: bf42378f8c9817d88923613b9daab2c37fb96fae91ca1a262cc3f39fb9e3b2c58be477d6e758b04ddd4288e87ca26a761088431837422b015d467cca5fb17c5f
@@ -1,5 +1,15 @@
1
1
  # CHANGELOG
2
2
 
3
+ ### Version 0.4.0
4
+
5
+ 2017-07-13
6
+
7
+ [Compare changes](https://github.com/tf/semmy/compare/0-3-stable...v0.4.0)
8
+
9
+ - Only keep sections for current minor version in changelog and link
10
+ to previous stable branch.
11
+ - Compare minor versions to previous stable branch.
12
+
3
13
  ### Version 0.3.0
4
14
 
5
15
  2016-09-09
@@ -42,7 +42,7 @@ module Semmy
42
42
 
43
43
  def version_heading
44
44
  config.changelog_version_section_heading % {
45
- version: options[:new_version]
45
+ version: version
46
46
  }
47
47
  end
48
48
 
@@ -53,48 +53,63 @@ module Semmy
53
53
  def compare_link_for_versions
54
54
  Changelog.compare_link(config,
55
55
  homepage: options[:homepage],
56
- old_version_tag: old_version_tag,
57
- new_version_tag: new_version_tag)
56
+ old_version_tag: old_ref,
57
+ new_version_tag: Changelog.version_tag(version))
58
58
  end
59
59
 
60
- def old_version_tag
61
- Changelog.version_tag(options[:old_version])
60
+ def old_ref
61
+ if VersionString.patch_level?(version)
62
+ Changelog.version_tag(VersionString.previous_version(version))
63
+ else
64
+ VersionString.previous_stable_branch_name(version, config.stable_branch_name)
65
+ end
62
66
  end
63
67
 
64
- def new_version_tag
65
- Changelog.version_tag(options[:new_version])
68
+ def version
69
+ options[:version]
66
70
  end
67
71
  end
68
72
 
69
- InsertUnreleasedSection = Struct.new(:config, :options) do
73
+ UpdateForMinor = Struct.new(:config, :options) do
70
74
  def call(contents)
71
- insert_before(version_line_matcher,
72
- contents,
73
- unreleased_section(contents))
75
+ replace_starting_at(version_line_matcher,
76
+ contents,
77
+ unreleased_section)
74
78
  end
75
79
 
76
80
  private
77
81
 
78
- def unreleased_section(contents)
82
+ def unreleased_section
79
83
  <<-END.unindent
80
84
  #{config.changelog_unrelased_section_heading}
81
85
 
82
- #{compare_link_for_master(contents)}
86
+ #{compare_link_for_master}
83
87
 
84
88
  #{config.changelog_unrelased_section_blank_slate}
89
+
90
+ #{link_to_changelog_on_previous_minor_stable_branch}
85
91
  END
86
92
  end
87
93
 
88
- def compare_link_for_master(contents)
94
+ def compare_link_for_master
89
95
  Changelog.compare_link(config,
90
96
  homepage: options[:homepage],
91
- old_version_tag: last_version_tag(contents),
97
+ old_version_tag: previous_stable_branch_name,
92
98
  new_version_tag: 'master')
93
99
  end
94
100
 
95
- def last_version_tag(contents)
96
- match = contents.match(version_line_matcher)
97
- match && Changelog.version_tag(match[1])
101
+ def link_to_changelog_on_previous_minor_stable_branch
102
+ config.changelog_previous_changes_link % {
103
+ branch: previous_stable_branch_name,
104
+ url: Changelog.file_url(config,
105
+ homepage: options[:homepage],
106
+ branch: previous_stable_branch_name)
107
+ }
108
+ end
109
+
110
+ def previous_stable_branch_name
111
+ VersionString.previous_stable_branch_name(options[:version],
112
+ config.stable_branch_name)
98
113
  end
99
114
 
100
115
  def version_line_matcher
@@ -103,13 +118,12 @@ module Semmy
103
118
  })
104
119
  end
105
120
 
106
- def insert_before(line_matcher, text, inserted_text)
107
- text.dup.tap do |result|
108
- unless (result.sub!(line_matcher, inserted_text + "\n\\0"))
109
- fail(InsertPointNotFound,
110
- "Insert point not found.")
111
- end
121
+ def replace_starting_at(line_matcher, text, inserted_text)
122
+ unless text =~ line_matcher
123
+ fail(InsertPointNotFound, 'Insert point not found.')
112
124
  end
125
+
126
+ [text.split(line_matcher).first, inserted_text].join
113
127
  end
114
128
  end
115
129
 
@@ -122,13 +136,21 @@ module Semmy
122
136
  end
123
137
 
124
138
  def compare_url(config, interpolations)
125
- config.changelog_compare_url % interpolations
126
- .merge(repository: repository_url(config,
127
- interpolations[:homepage]))
139
+ config.compare_url % url_interpolations(config, interpolations)
140
+ end
141
+
142
+ def file_url(config, interpolations)
143
+ config.file_url % url_interpolations(config, interpolations)
144
+ .merge(path: config.changelog_path)
128
145
  end
129
146
 
130
147
  private
131
148
 
149
+ def url_interpolations(config, interpolations)
150
+ interpolations.merge(repository: repository_url(config,
151
+ interpolations[:homepage]))
152
+ end
153
+
132
154
  def repository_url(config, homepage)
133
155
  if config.github_repository
134
156
  "https://github.com/#{config.github_repository}"
@@ -9,11 +9,14 @@ module Semmy
9
9
 
10
10
  attr_accessor :github_repository
11
11
 
12
+ attr_accessor :compare_url
13
+ attr_accessor :file_url
14
+
12
15
  attr_accessor :changelog_path
13
16
  attr_accessor :changelog_version_section_heading
14
- attr_accessor :changelog_compare_url
15
17
  attr_accessor :changelog_unrelased_section_heading
16
18
  attr_accessor :changelog_unrelased_section_blank_slate
19
+ attr_accessor :changelog_previous_changes_link
17
20
 
18
21
  attr_accessor :source_files_with_docs_tags
19
22
  attr_accessor :rewritten_since_doc_tag
@@ -26,11 +29,14 @@ module Semmy
26
29
  @prepare_commit_message = 'Prepare %{version} release'
27
30
  @bump_commit_message = 'Bump version to %{version}'
28
31
 
32
+ @compare_url = '%{repository}/compare/%{old_version_tag}...%{new_version_tag}'
33
+ @file_url = '%{repository}/blob/%{branch}/%{path}'
34
+
29
35
  @changelog_path = 'CHANGELOG.md'
30
36
  @changelog_version_section_heading = '### Version %{version}'
31
- @changelog_compare_url = '%{repository}/compare/%{old_version_tag}...%{new_version_tag}'
32
37
  @changelog_unrelased_section_heading = '### Changes on `master`'
33
38
  @changelog_unrelased_section_blank_slate = 'None so far.'
39
+ @changelog_previous_changes_link = "See\n[%{branch} branch](%{url})\nfor previous changes."
34
40
 
35
41
  @source_files_with_docs_tags = '{app,lib}/**/*.{js,rb,scss}'
36
42
  @rewritten_since_doc_tag = 'edge'
@@ -4,9 +4,10 @@ module Semmy
4
4
 
5
5
  def rewrite(path, update)
6
6
  content = File.binread(path)
7
+ updated_content = update.call(content)
7
8
 
8
9
  File.open(path, 'wb') do |file|
9
- file.write(update.call(content))
10
+ file.write(updated_content)
10
11
  end
11
12
  end
12
13
 
@@ -52,7 +52,7 @@ module Semmy
52
52
  task 'release:after:master' => [
53
53
  'semmy:branches:create_stable',
54
54
  'semmy:versioning:bump_minor',
55
- 'semmy:changelog:add_unreleased_section',
55
+ 'semmy:changelog:update_for_minor',
56
56
  'semmy:commit:bump'
57
57
  ]
58
58
 
@@ -4,28 +4,27 @@ module Semmy
4
4
  def define
5
5
  namespace 'changelog' do
6
6
  task 'close_section' do
7
- new_version = Project.version
8
- old_version = VersionString.previous_version(new_version)
7
+ version = Project.version
9
8
  homepage = Gemspec.homepage
10
9
 
11
- Shell.info("Inserting #{new_version} section " \
10
+ Shell.info("Inserting #{version} section " \
12
11
  "in #{config.changelog_path}.")
13
12
 
14
13
  Files.rewrite(config.changelog_path,
15
14
  Changelog::CloseSection.new(config,
16
- new_version: new_version,
17
- old_version: old_version,
15
+ version: version,
18
16
  homepage: homepage,
19
17
  date: Date.today))
20
18
  end
21
19
 
22
- task 'add_unreleased_section' do
23
- Shell.info('Inserting unreleased section ' \
20
+ task 'update_for_minor' do
21
+ Shell.info('Updating changelog ' \
24
22
  "in #{config.changelog_path}.")
25
23
 
26
24
  Files.rewrite(config.changelog_path,
27
- Changelog::InsertUnreleasedSection.new(config,
28
- homepage: Gemspec.homepage))
25
+ Changelog::UpdateForMinor.new(config,
26
+ version: Project.version,
27
+ homepage: Gemspec.homepage))
29
28
  end
30
29
  end
31
30
  end
@@ -1,3 +1,3 @@
1
1
  module Semmy
2
- VERSION = '0.3.0'
2
+ VERSION = '0.4.0'
3
3
  end
@@ -36,6 +36,10 @@ module Semmy
36
36
  version.split('.')[0..1].join('.')
37
37
  end
38
38
 
39
+ def patch_level?(version)
40
+ components(version)[:patch].to_i > 0
41
+ end
42
+
39
43
  def components(version)
40
44
  components = version.split('.')
41
45
 
@@ -59,5 +63,24 @@ module Semmy
59
63
 
60
64
  components.join('.')
61
65
  end
66
+
67
+ def previous_stable_branch_name(version, stable_branch_name_pattern)
68
+ stable_branch_name_pattern % previous_minor_version_components(version)
69
+ end
70
+
71
+ private
72
+
73
+ def previous_minor_version_components(version)
74
+ components = version.split('.').map(&:to_i)
75
+
76
+ if components[1].zero?
77
+ fail(NoPreviousMinor, "Cannot get previous minor version of #{version}.")
78
+ end
79
+
80
+ {
81
+ major: components[0],
82
+ minor: components[1] - 1
83
+ }
84
+ end
62
85
  end
63
86
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: semmy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Fischbach
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-09-09 00:00:00.000000000 Z
11
+ date: 2017-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: git
@@ -173,7 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
173
173
  version: '0'
174
174
  requirements: []
175
175
  rubyforge_project:
176
- rubygems_version: 2.5.1
176
+ rubygems_version: 2.6.8
177
177
  signing_key:
178
178
  specification_version: 4
179
179
  summary: Rake tasks for a semantic versioning of gems