gistory 0.1.8 → 0.2.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
- SHA1:
3
- metadata.gz: 2d3139f7b6f07fd2b6de135eb63c8ada4baaa1c4
4
- data.tar.gz: 95de85e6a6f1b4809295db975d33449d12dd23cd
2
+ SHA256:
3
+ metadata.gz: '09f3c9251a676aa3fe78d5487e7cb60ee6c8348de21ae7ad4d91ee7a16623f69'
4
+ data.tar.gz: bb6b913eb6a330dea5db7e8f8bdd4e1db87324ff72abdeb48c835c00c87ab0a3
5
5
  SHA512:
6
- metadata.gz: f8eae6a6a4b52a452b45f837594646b8a57c6aa4f101c86612b56462a1234025355861c8a6fe0bb22de55c54908c9d422c15634c92c0c22b5ed52b6c5f6ebb21
7
- data.tar.gz: cb9c8bd90a5f722217a792b4b3890394894ed23a242d95e1453470ab408f86ba83c145364a8c2f47367552900635ad56d9299809ee64ff76f179ea35f29538b6
6
+ metadata.gz: 5f0931cb9e7673d6e7d88e1eb80e892ae3f482b1c3c8e4feae59b1b28f20b45a37bb6c08d51e4d15ec0d7115b780c0cc2f4dc4c530739197c4e9c48975ef19db
7
+ data.tar.gz: 137c0bb24fa19cea60221ab8a57994bc7a4e46c99aa4666c6b3d35b133aeb0559541b26090c9d3f92f71d87daacc471b5fe283e0824433d98d1b8af30c3b3223
@@ -1,5 +1,4 @@
1
- Documentation:
2
- Enabled: false
1
+ require: rubocop-rspec
3
2
 
4
3
  Metrics/AbcSize:
5
4
  Max: 25
@@ -13,18 +12,73 @@ Metrics/BlockLength:
13
12
  Metrics/MethodLength:
14
13
  Max: 20
15
14
 
16
- Metrics/LineLength:
17
- Max: 120
18
-
19
15
  Layout/EmptyLineAfterGuardClause:
20
16
  Enabled: false
21
17
 
18
+ Layout/LineLength:
19
+ Max: 120
20
+
22
21
  Style/BlockDelimiters:
23
22
  Exclude:
24
23
  - 'spec/**/*_spec.rb'
25
24
 
25
+ Style/Documentation:
26
+ Enabled: false
27
+
26
28
  Style/IfUnlessModifier:
27
29
  Enabled: false
28
30
 
29
31
  Style/FrozenStringLiteralComment:
30
32
  EnforcedStyle: always
33
+
34
+ # rubocop-rspec
35
+
36
+ RSpec/MultipleExpectations:
37
+ Max: 15
38
+
39
+ RSpec/ExampleLength:
40
+ Max: 15
41
+
42
+ # starting rubocop 0.80 newly added cops need to be explicitly enabled:
43
+
44
+ Lint/DeprecatedOpenSSLConstant:
45
+ Enabled: true
46
+
47
+ Layout/EmptyLinesAroundAttributeAccessor:
48
+ Enabled: true
49
+
50
+ Lint/MixedRegexpCaptureTypes:
51
+ Enabled: true
52
+
53
+ Lint/RaiseException:
54
+ Enabled: true
55
+
56
+ Layout/SpaceAroundMethodCallOperator:
57
+ Enabled: true
58
+
59
+ Lint/StructNewOverride:
60
+ Enabled: true
61
+
62
+ Style/ExponentialNotation:
63
+ Enabled: true
64
+
65
+ Style/HashEachMethods:
66
+ Enabled: true
67
+
68
+ Style/HashTransformKeys:
69
+ Enabled: true
70
+
71
+ Style/HashTransformValues:
72
+ Enabled: true
73
+
74
+ Style/RedundantFetchBlock:
75
+ Enabled: true
76
+
77
+ Style/RedundantRegexpCharacterClass:
78
+ Enabled: true
79
+
80
+ Style/RedundantRegexpEscape:
81
+ Enabled: true
82
+
83
+ Style/SlicingWithRange:
84
+ Enabled: true
@@ -3,7 +3,7 @@ language: ruby
3
3
  script:
4
4
  - bundle exec rspec
5
5
  rvm:
6
- - 2.4.0
7
- - 2.3.3
8
- - 2.2.6
6
+ - 2.6.6
7
+ - 2.5.8
8
+ - 2.4.10
9
9
  before_install: gem install bundler -v 1.17.3
data/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  [![Build Status](https://travis-ci.org/serch/gistory.svg?branch=master)](https://travis-ci.org/serch/gistory)
6
6
  [![Coverage Status](https://coveralls.io/repos/github/serch/gistory/badge.svg?branch=master)](https://coveralls.io/github/serch/gistory?branch=master)
7
7
 
8
- If you use bundler and git, and want to know when a gem you are using was updated, `gistory` comes to your rescue, simply:
8
+ If you use bundler and git and you want to know when a gem was updated, `gistory` comes to the rescue, simply:
9
9
 
10
10
  ```shell
11
11
  gem install gistory
@@ -14,6 +14,7 @@ gistory sidekiq
14
14
  ```
15
15
 
16
16
  and you'll see something like:
17
+
17
18
  ```
18
19
  Gem: sidekiq
19
20
  Current version: 4.2.7
@@ -25,11 +26,17 @@ Change history:
25
26
  4.1.4 on Wed, 9 Nov 2016 14:31 +01:00 (commit 05a3c549)
26
27
  ```
27
28
 
28
- By default `gistory` only looks at the last 100 changes to Gemfile.lock
29
- if you want to see farther in the past run:
29
+ By default `gistory` only looks at the last 100 commits made to the current branch.
30
+ If you want to see farther back in the past run:
31
+
32
+ ```shell
33
+ gistory sidekiq -m1000
34
+ ```
35
+
36
+ If you want to look at all changes to Gemfile.lock in all branches, use the `-a` switch:
30
37
 
31
38
  ```shell
32
- gistory sidekiq -m10000
39
+ gistory sidekiq -a
33
40
  ```
34
41
 
35
42
  Note that if the gem was added, then removed, and then added again, `gistory` will
@@ -44,4 +51,3 @@ only show the latest version changes up until it was removed.
44
51
  - remove bundler dep
45
52
  - add yard doc
46
53
  - do not print the warning text if there were no more changes in the lock file
47
- - find version with the longest length and pad all others to match it (f.i. rails has 4.2.8 and 4.2.7.1)
@@ -8,7 +8,7 @@ require 'pry'
8
8
  root_path = "#{File.dirname(__FILE__)}/.."
9
9
 
10
10
  # require all files in lib for quick access to them in the console
11
- Dir["#{root_path}/lib/**/*.rb"].each { |file| require file }
11
+ Dir["#{root_path}/lib/**/*.rb"].sort.each { |file| require file }
12
12
 
13
13
  def reload!
14
14
  verbosity = $VERBOSE
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.name = 'gistory'
9
9
  spec.version = Gistory::VERSION
10
10
  spec.platform = Gem::Platform::RUBY
11
- spec.required_ruby_version = '>= 2.2'
11
+ spec.required_ruby_version = '>= 2.4'
12
12
  spec.authors = ['Sergio Medina']
13
13
  spec.email = ['medinasergio@gmail.com']
14
14
 
@@ -27,6 +27,10 @@ Gem::Specification.new do |spec|
27
27
  spec.add_dependency 'bundler', '~> 1.0'
28
28
  spec.add_dependency 'colorize'
29
29
 
30
- spec.add_development_dependency 'rake', '~> 10.0'
31
- spec.add_development_dependency 'rspec', '~> 3.8'
30
+ spec.add_development_dependency 'pry'
31
+ spec.add_development_dependency 'pry-byebug'
32
+ spec.add_development_dependency 'rake', '~> 13.0'
33
+ spec.add_development_dependency 'rspec', '~> 3.9'
34
+ spec.add_development_dependency 'rubocop'
35
+ spec.add_development_dependency 'rubocop-rspec'
32
36
  end
@@ -10,17 +10,17 @@ module Gistory
10
10
 
11
11
  def changelog_for_gem(gem_name)
12
12
  version_changes = []
13
- lockfile_changes = @repo.changes_to_file(LOCKFILE)
13
+ commits_with_changes = @repo.changes_to_file(LOCKFILE)
14
14
 
15
15
  # no lockfile found or no changes to the lockfile found
16
- return [] if lockfile_changes.empty?
16
+ return [] if commits_with_changes.empty?
17
17
 
18
- previous_commit = lockfile_changes.shift
18
+ previous_commit = commits_with_changes.shift
19
19
  previous_gem_spec = gem_version_at_commit_hash(previous_commit.short_hash, gem_name)
20
20
  # only one change to the lockfile was found and the gem was not there
21
21
  return [] if previous_gem_spec.nil?
22
22
 
23
- lockfile_changes.each do |current_commit|
23
+ commits_with_changes.each do |current_commit|
24
24
  current_gem_spec = gem_version_at_commit_hash(current_commit.short_hash, gem_name)
25
25
 
26
26
  # we reached the end, the gem didn't exist back then
@@ -38,33 +38,35 @@ module Gistory
38
38
  parser = OptionParser.new
39
39
  parser.banner = 'Usage: gistory <gem_name> [options]'
40
40
 
41
- add_specific_options(parser, config)
42
- add_common_options(parser)
41
+ add_options(parser, config)
43
42
 
44
43
  parser
45
44
  end
46
45
 
47
- def add_specific_options(parser, config)
46
+ def add_options(parser, config)
48
47
  parser.separator ''
49
- parser.separator 'Specific options:'
50
-
51
- add_max_lockfile_changes(parser, config)
52
- end
53
-
54
- def add_common_options(parser)
55
- parser.separator ''
56
- parser.separator 'Common options:'
48
+ parser.separator 'Options:'
57
49
 
50
+ add_max_fetched_commits(parser, config)
51
+ add_use_commits_from_all_branches(parser, config)
58
52
  add_help(parser)
59
53
  add_version(parser)
60
54
  end
61
55
 
62
- def add_max_lockfile_changes(parser, config)
63
- default = config.max_lockfile_changes
64
- description = "max number of changes to the lock file (default #{default})"
65
- parser.on('-m', '--max-lockfile-changes [INTEGER]', Integer, description) do |m|
66
- raise(Gistory::ParserError, 'argument --max-lockfile-changes must be an integer') if m.nil?
67
- config.max_lockfile_changes = m
56
+ def add_max_fetched_commits(parser, config)
57
+ default = config.max_fetched_commits
58
+ description = "max number of commits to be fetched (default #{default})"
59
+ parser.on('-m', '--max-fetched-commits [Integer]', Integer, description) do |m|
60
+ raise(Gistory::ParserError, 'argument --max-fetched-commits must be an integer') if m.nil?
61
+ config.max_fetched_commits = m
62
+ end
63
+ end
64
+
65
+ def add_use_commits_from_all_branches(parser, config)
66
+ description = 'use commits from all branches ' \
67
+ '(by default it uses only commits made to the current branch)'
68
+ parser.on('-a', '--all-branches', description) do |a|
69
+ config.all_branches = a
68
70
  end
69
71
  end
70
72
 
@@ -34,14 +34,32 @@ module Gistory
34
34
  @io.puts "Current version: #{changes.first.version}"
35
35
  @io.puts ''
36
36
 
37
+ print_change_history(changes)
38
+
39
+ @io.puts ''
40
+
41
+ print_configuration_info
42
+ end
43
+
44
+ def print_change_history(changes)
37
45
  @io.puts 'Change history:'
46
+ max_length = changes.map { |c| c.version.length }.max
47
+
38
48
  changes.each do |change|
39
- @io.puts "#{change.version} on #{change.date.strftime('%a, %e %b %Y %H:%M %Z')} (commit #{change.short_hash})"
49
+ @io.puts "#{change.version.ljust(max_length)} on #{change.date.strftime('%a, %e %b %Y %H:%M %Z')} " \
50
+ "(commit #{change.short_hash})"
40
51
  end
52
+ end
41
53
 
42
- @io.puts ''
43
- max = Gistory.config.max_lockfile_changes
44
- @io.puts "The last #{max} changes to the lock file were taken into account, to see farther in the past use the -m switch" # rubocop:disable Metrics/LineLength
54
+ def print_configuration_info
55
+ max = Gistory.config.max_fetched_commits
56
+ if Gistory.config.all_branches?
57
+ @io.puts "The last #{max} changes to the lock file were fetched."
58
+ else
59
+ @io.puts "The last #{max} commits made to the current branch were fetched."
60
+ end
61
+
62
+ @io.puts 'To see farther in the past use the -m switch'
45
63
  end
46
64
  end
47
65
  end
@@ -11,5 +11,9 @@ module Gistory
11
11
  @date = DateTime.parse(date.to_s)
12
12
  freeze
13
13
  end
14
+
15
+ def to_s
16
+ "Commit #{short_hash} on #{date}"
17
+ end
14
18
  end
15
19
  end
@@ -2,10 +2,16 @@
2
2
 
3
3
  module Gistory
4
4
  class Configuration
5
- attr_accessor :gem_name, :max_lockfile_changes
5
+ attr_accessor :gem_name, :max_fetched_commits
6
+ attr_writer :all_branches
6
7
 
7
8
  def initialize
8
- @max_lockfile_changes = 100
9
+ @max_fetched_commits = 100
10
+ @all_branches = false
11
+ end
12
+
13
+ def all_branches?
14
+ @all_branches
9
15
  end
10
16
  end
11
17
  end
@@ -10,8 +10,9 @@ module Gistory
10
10
  end
11
11
 
12
12
  def changes_to_file(filename)
13
- max_count = Gistory.config.max_lockfile_changes
14
- hashes_and_dates = git("log --pretty=format:'%h|%cD' --max-count=#{max_count} --follow #{filename}")
13
+ max_count = Gistory.config.max_fetched_commits
14
+ strategy = git_log_strategy(filename)
15
+ hashes_and_dates = git("log --pretty=format:'%h|%cD' --max-count=#{max_count} #{strategy}")
15
16
  to_commits(hashes_and_dates.split("\n"))
16
17
  end
17
18
 
@@ -21,6 +22,15 @@ module Gistory
21
22
 
22
23
  private
23
24
 
25
+ def git_log_strategy(filename)
26
+ if Gistory.config.all_branches?
27
+ "--follow #{filename}"
28
+ else
29
+ # TODO: filter out commits that did not introduce changes to the lock file
30
+ '--first-parent'
31
+ end
32
+ end
33
+
24
34
  def git_cli_available?
25
35
  system('which git > /dev/null 2>&1')
26
36
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Gistory
4
- VERSION = '0.1.8'
4
+ VERSION = '0.2.0'
5
5
  end
@@ -14,5 +14,9 @@ module Gistory
14
14
  @version = version
15
15
  freeze
16
16
  end
17
+
18
+ def to_s
19
+ "Version #{version} (on #{date} by #{short_hash})"
20
+ end
17
21
  end
18
22
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gistory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergio Medina
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-08-17 00:00:00.000000000 Z
11
+ date: 2020-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,34 +38,90 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry-byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: rake
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
73
  - - "~>"
46
74
  - !ruby/object:Gem::Version
47
- version: '10.0'
75
+ version: '13.0'
48
76
  type: :development
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
80
  - - "~>"
53
81
  - !ruby/object:Gem::Version
54
- version: '10.0'
82
+ version: '13.0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: rspec
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
87
  - - "~>"
60
88
  - !ruby/object:Gem::Version
61
- version: '3.8'
89
+ version: '3.9'
62
90
  type: :development
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
94
  - - "~>"
67
95
  - !ruby/object:Gem::Version
68
- version: '3.8'
96
+ version: '3.9'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop-rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
69
125
  description: 'Gistory: Know exactly when a gem was updated in your Gemfile.lock'
70
126
  email:
71
127
  - medinasergio@gmail.com
@@ -104,7 +160,7 @@ homepage: https://www.github.com/serch/gistory
104
160
  licenses:
105
161
  - MIT
106
162
  metadata: {}
107
- post_install_message:
163
+ post_install_message:
108
164
  rdoc_options: []
109
165
  require_paths:
110
166
  - lib
@@ -112,16 +168,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
112
168
  requirements:
113
169
  - - ">="
114
170
  - !ruby/object:Gem::Version
115
- version: '2.2'
171
+ version: '2.4'
116
172
  required_rubygems_version: !ruby/object:Gem::Requirement
117
173
  requirements:
118
174
  - - ">="
119
175
  - !ruby/object:Gem::Version
120
176
  version: '0'
121
177
  requirements: []
122
- rubyforge_project:
123
- rubygems_version: 2.6.14.1
124
- signing_key:
178
+ rubygems_version: 3.0.3
179
+ signing_key:
125
180
  specification_version: 4
126
181
  summary: 'Gistory: Know exactly when a gem was updated in your Gemfile.lock'
127
182
  test_files: []