semmy 0.3.0 → 0.4.0

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 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