valr 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: fa865dd364c0adf88f274215c451e9555adde10f
4
+ data.tar.gz: ff22dbc0f83d3f67b9c4a5eb9f61d5500c24f0fa
5
+ SHA512:
6
+ metadata.gz: 3d599ef8a64bf0925eab3085a2d93902e856fba959c0738f4bf9db93c07b6c7c6b0961a52b8ee79816140696f2f9d1f3019446701266132169b0b12b3b9968fa
7
+ data.tar.gz: 78eeb823d6fcef9152f8a698d134aaa394998e3a19bf0250ae278b844190aaa05b0573de3b6a91225ca4603e7ee8be143b4e1a031703d1e1d38186a7ff6c1fb1
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'valr'
4
+
5
+ repo_path = ARGV[0] || Dir.pwd
6
+ range = ARGV[1] || nil
7
+
8
+ changelog = Valr::Repo.new(repo_path).full_changelog first_parent: true, range: range
9
+
10
+ puts "Changelog for #{repo_path}"
11
+ puts ""
12
+ puts changelog
File without changes
@@ -0,0 +1 @@
1
+ require 'valr/repo'
@@ -0,0 +1,9 @@
1
+ module Valr
2
+ class EmptyRepositoryError < RuntimeError
3
+ # Error raised when the repository is empty
4
+ # @param [String] repo_path Path in which to search a repository
5
+ def initialize(repo_path)
6
+ super("'#{repo_path}' is empty")
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Valr
2
+ class NotValidRangeError < RuntimeError
3
+ # Error raised when the specified range is not valid
4
+ # @param [String] range Range asked
5
+ def initialize(range)
6
+ super("'#{range}' is not a valid range")
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,114 @@
1
+ require 'rugged'
2
+ require 'valr/repository_error'
3
+ require 'valr/empty_repository_error'
4
+ require 'valr/not_valid_range_error'
5
+
6
+ module Valr
7
+ class Repo
8
+ # Initialize new Valr for a git repository
9
+ # @param [String] repo_path Path of git repository
10
+ def initialize(repo_path)
11
+ @repo_path = repo_path
12
+ begin
13
+ @repo = Rugged::Repository.new @repo_path
14
+ rescue Rugged::RepositoryError => e
15
+ raise Valr::RepositoryError.new @repo_path
16
+ end
17
+ raise Valr::EmptyRepositoryError.new @repo_path if @repo.empty?
18
+ end
19
+
20
+ # Get the changelog based on commit messages.
21
+ # @param [Boolean] first_parent Optional, if true limits to first parent commits
22
+ # @param [String] range Optional, define a specific range of commits
23
+ # @return [String] changelog
24
+ def changelog(first_parent: false, range: nil)
25
+ to_list(first_lines(log_messages first_parent, range))
26
+ end
27
+
28
+ # Get the full changelog including metadata.
29
+ # @param [Boolean] first_parent Optional, if true limits to first parent commits
30
+ # @param [String] range Optional, define a specific range of commits
31
+ # @return [String] changelog
32
+ def full_changelog(first_parent: false, range: nil)
33
+ if range.nil?
34
+ full_changelog_no_range first_parent
35
+ else
36
+ full_changelog_range first_parent, range
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ # Array to markdown list
43
+ # @param [Array<String>] items
44
+ # @return [String] markdown list
45
+ def to_list(items)
46
+ (items.map {|item| "- #{item}"}).join("\n")
47
+ end
48
+
49
+ # Extract only first lines
50
+ # @param [Array<String>] strings
51
+ # @return [Array<String>] Array of first lines
52
+ def first_lines(strings)
53
+ strings.map {|string|
54
+ string.split("\n").first
55
+ }
56
+ end
57
+
58
+ # Get log messages for a repository
59
+ # @param [Boolean] first_parent Optional, if true limit to first parent commits
60
+ # @param [String] range Optional, define a specific range of commits
61
+ # @return [Array<String>] log messages
62
+ def log_messages(first_parent = false, range = nil)
63
+ walker = Rugged::Walker.new @repo
64
+ if range.nil?
65
+ walker.push @repo.head.target_id
66
+ else
67
+ begin
68
+ walker.push_range range
69
+ rescue Rugged::ReferenceError => e
70
+ raise Valr::NotValidRangeError.new range
71
+ end
72
+ end
73
+ walker.simplify_first_parent if first_parent
74
+ messages = walker.inject([]) { |messages, c| messages << c.message }
75
+ walker.reset
76
+ messages
77
+ end
78
+
79
+ # Get the full changelog including metadata.
80
+ # @param [Boolean] first_parent If true limits to first parent commits
81
+ # @return [String] changelog
82
+ def full_changelog_no_range(first_parent)
83
+ %{#{last_sha1}
84
+
85
+ #{changelog(first_parent: first_parent)}}
86
+ end
87
+
88
+ # Get the full changelog including metadata.
89
+ # @param [Boolean] first_parent If true limits to first parent commits
90
+ # @param [String] range Define a specific range of commits
91
+ # @return [String] changelog
92
+ def full_changelog_range(first_parent, range)
93
+ changelog_list = changelog first_parent: first_parent, range: range
94
+ from, to = range.split '..'
95
+ from_commit, to_commit = [from, to].map { |ref| rev_parse ref }
96
+ %{ from: #{from} <#{from_commit.oid}>
97
+ to: #{to} <#{to_commit.oid}>
98
+
99
+ #{changelog_list}}
100
+ end
101
+
102
+ # Get the last sha1 of a git repository
103
+ def last_sha1
104
+ @repo.head.target_id
105
+ end
106
+
107
+ # Get the commit of a reference (tag or other)
108
+ # @param [String] ref Reference to get the commit
109
+ # @return the commit
110
+ def rev_parse(ref)
111
+ Rugged::Object.rev_parse @repo, ref
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,9 @@
1
+ module Valr
2
+ class RepositoryError < RuntimeError
3
+ # Error raised when not in a repository
4
+ # @param [String] repo_path Path in which to search a repository
5
+ def initialize(repo_path)
6
+ super("'#{repo_path}' is not a git repository")
7
+ end
8
+ end
9
+ end
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: valr
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Yves Brissaud
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-10-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.3'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 3.3.0
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '3.3'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 3.3.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: guard
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.13'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 2.13.0
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '2.13'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 2.13.0
53
+ - !ruby/object:Gem::Dependency
54
+ name: guard-rspec
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '4.6'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 4.6.4
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '4.6'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 4.6.4
73
+ - !ruby/object:Gem::Dependency
74
+ name: simplecov
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '0.10'
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 0.10.0
83
+ type: :development
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.10'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 0.10.0
93
+ - !ruby/object:Gem::Dependency
94
+ name: rugged
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: 0.23.2
100
+ type: :runtime
101
+ prerelease: false
102
+ version_requirements: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - "~>"
105
+ - !ruby/object:Gem::Version
106
+ version: 0.23.2
107
+ description: A markdown powered CHANGELOG generator using git commit messages.
108
+ email: yves.brissaud@gmail.com
109
+ executables:
110
+ - valr
111
+ extensions: []
112
+ extra_rdoc_files: []
113
+ files:
114
+ - bin/valr
115
+ - lib/.gitignore
116
+ - lib/valr.rb
117
+ - lib/valr/empty_repository_error.rb
118
+ - lib/valr/not_valid_range_error.rb
119
+ - lib/valr/repo.rb
120
+ - lib/valr/repository_error.rb
121
+ homepage: https://github.com/eunomie/valr
122
+ licenses:
123
+ - MIT
124
+ metadata: {}
125
+ post_install_message:
126
+ rdoc_options: []
127
+ require_paths:
128
+ - lib
129
+ required_ruby_version: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ required_rubygems_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ requirements: []
140
+ rubyforge_project:
141
+ rubygems_version: 2.4.8
142
+ signing_key:
143
+ specification_version: 4
144
+ summary: Changelog generator
145
+ test_files: []