git_ls 0.5.0 → 0.5.1

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
  SHA256:
3
- metadata.gz: 7736e59f5f16469e453f3f085e1473cef343eb79e51e75cb94c013de62a311ca
4
- data.tar.gz: c9715b5c0080aea1d487b349d825f113d1ecf7d75a85fe76fb2cd9648f3c16c0
3
+ metadata.gz: 723546fbde74cd69c51631aafbb7fee4b4dbe12915f969855dcc6d1b577834bf
4
+ data.tar.gz: 3b9d5b1c58209e1a799864a71a875b059eef1e315c53e56351c44026f4c07931
5
5
  SHA512:
6
- metadata.gz: ca243045d1d33fbc49532f35c63d8ea2bc924d119934a39407a9bc427e0e9de493997b6e93be6b3d5245c4d3df129b8bb1b696f0df6849bebdd4fc76febb718a
7
- data.tar.gz: 8ebacdfaa8a7723fd87cf650ea72cf70140633b7140403bd0cbc0f320bc1bdfb28bfe8eeeb9fe950d697f2357b4352e5029ac9c749684bca097a2f05b02b4a1a
6
+ metadata.gz: a4d9fb5d7c4f84057007dbc9052c011f165e191c0c7e4bfc533cf9319ce61f8103d65b936abc884e44fd1ecae666d665c160f9ab39a2f35ec1f115a871a8fd9c
7
+ data.tar.gz: 71a87a2b4946e2a499dba2c673507951a95eb4fb8a499f3737d037ed428121314d2c5e7fef0356bc8ea7070f4877e69f6b0ed13bd4cffaecacd8a0b757b26d56
@@ -0,0 +1,82 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ branches:
9
+ - main
10
+
11
+ jobs:
12
+ rspec:
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ ruby: [2.4, 2.5, 2.6, 2.7, '3.0', 3.1, 3.2, 3.3, 3.4, ruby-head, jruby, jruby-head]
17
+ continue-on-error: ${{ endsWith(matrix.ruby, 'head') }}
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - uses: actions/checkout@v4
21
+ - uses: ruby/setup-ruby@v1
22
+ with:
23
+ ruby-version: ${{ matrix.ruby }}
24
+ bundler-cache: true
25
+ - run: bundle exec rspec
26
+
27
+ coverage:
28
+ runs-on: ubuntu-latest
29
+ steps:
30
+ - uses: actions/checkout@v4
31
+ - uses: ruby/setup-ruby@v1
32
+ with:
33
+ ruby-version: 3.4
34
+ bundler-cache: true
35
+ - run: COVERAGE=1 bundle exec rspec
36
+
37
+ - uses: actions/upload-artifact@v4
38
+ with:
39
+ name: coverage-report
40
+ path: 'coverage/*'
41
+ retention-days: 1
42
+ if: ${{ failure() }}
43
+
44
+ rubocop:
45
+ runs-on: ubuntu-latest
46
+ steps:
47
+ - uses: actions/checkout@v4
48
+ - uses: ruby/setup-ruby@v1
49
+ with:
50
+ ruby-version: 3.4
51
+ bundler-cache: true
52
+ - run: bundle exec rubocop
53
+
54
+ spellr:
55
+ runs-on: ubuntu-latest
56
+ steps:
57
+ - uses: actions/checkout@v4
58
+ - uses: ruby/setup-ruby@v1
59
+ with:
60
+ ruby-version: 3.4
61
+ bundler-cache: true
62
+ - run: bundle exec spellr
63
+
64
+ leftovers:
65
+ runs-on: ubuntu-latest
66
+ steps:
67
+ - uses: actions/checkout@v4
68
+ - uses: ruby/setup-ruby@v1
69
+ with:
70
+ ruby-version: 3.4
71
+ bundler-cache: true
72
+ - run: bundle exec leftovers
73
+
74
+ build:
75
+ runs-on: ubuntu-latest
76
+ steps:
77
+ - uses: actions/checkout@v4
78
+ - uses: ruby/setup-ruby@v1
79
+ with:
80
+ ruby-version: 3.4
81
+ bundler-cache: true
82
+ - run: bundle exec rake build
data/.gitignore CHANGED
@@ -11,3 +11,4 @@
11
11
  /.rspec_status
12
12
  /.ruby-version
13
13
  Gemfile.lock
14
+ /sorbet/rbi/hidden-definitions/errors.txt
data/.leftovers.yml CHANGED
@@ -1,2 +1,3 @@
1
1
  exclude_paths:
2
2
  - vendor
3
+ - sorbet
data/.rubocop.yml CHANGED
@@ -1,4 +1,6 @@
1
- require: rubocop-rspec
1
+ require:
2
+ - rubocop-rspec
3
+ - rubocop-rake
2
4
 
3
5
  # Reference:
4
6
  # https://rubocop.readthedocs.io/en/latest/
@@ -113,7 +115,7 @@ Metrics:
113
115
  CountComments: false
114
116
 
115
117
  Metrics/BlockLength:
116
- ExcludedMethods:
118
+ AllowedMethods:
117
119
  - configure
118
120
  - describe
119
121
  - context
@@ -126,6 +128,9 @@ Metrics/CyclomaticComplexity:
126
128
  Metrics/PerceivedComplexity:
127
129
  Enabled: false
128
130
 
131
+ Metrics/ClassLength:
132
+ Enabled: false
133
+
129
134
  RSpec:
130
135
  Enabled: true
131
136
  Include:
@@ -141,7 +146,7 @@ RSpec/ExampleLength:
141
146
  RSpec/ExpectActual:
142
147
  Enabled: false
143
148
 
144
- RSpec/FilePath:
149
+ RSpec/SpecFilePathFormat:
145
150
  Enabled: false
146
151
 
147
152
  # Multiple expectations are useful
data/.simplecov CHANGED
@@ -8,4 +8,8 @@ SimpleCov.start do
8
8
  else
9
9
  minimum_coverage 100
10
10
  end
11
+ self.formatter = SimpleCov::Formatter::MultiFormatter.new([
12
+ SimpleCov::Formatter::HTMLFormatter,
13
+ SimpleCov::Formatter::Console
14
+ ])
11
15
  end
data/.spellr.yml CHANGED
@@ -1,2 +1,3 @@
1
1
  excludes:
2
2
  - vendor
3
+ - sorbet
@@ -1,4 +1,5 @@
1
1
  baz
2
+ bitshift
2
3
  changelog
3
4
  codebase
4
5
  cov
@@ -28,8 +29,10 @@ rvm
28
29
  sharedindex
29
30
  sherson
30
31
  simplecov
32
+ srb
31
33
  sudo
32
34
  tmp
35
+ txt
33
36
  usr
34
37
  utf
35
38
  warmup
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ # 0.5.1
2
+ - Test with new ruby versions, meaningless performance tweak using bitshift instead of exponent in one place.
3
+
1
4
  # 0.5.0
2
5
  - Major Performance Improvements
3
6
 
data/Gemfile CHANGED
@@ -4,3 +4,21 @@ source 'https://rubygems.org'
4
4
 
5
5
  # Specify your gem's dependencies in git_index.gemspec
6
6
  gemspec
7
+
8
+ group(:development) do
9
+ gem 'benchmark', require: false
10
+ gem 'benchmark-ips', require: false
11
+ gem 'bundler', '>= 2', require: false
12
+ gem 'fast_ignore', '>= 0.15.1', require: false
13
+ gem 'leftovers', '>= 0.4.0', require: false
14
+ gem 'pry', require: false
15
+ gem 'rake', '>= 12.3.3', require: false
16
+ gem 'rspec', require: false
17
+ gem 'rubocop', '>= 0.93.1', require: false
18
+ gem 'rubocop-performance', '>= 1.8.1', require: false
19
+ gem 'rubocop-rake', require: false
20
+ gem 'rubocop-rspec', '>= 1.44.1', require: false
21
+ gem 'simplecov', '>= 0.18.5', require: false
22
+ gem 'simplecov-console', require: false
23
+ gem 'spellr', require: false, platforms: :ruby
24
+ end
data/README.md CHANGED
@@ -4,7 +4,7 @@ Parses the .git/index file like `git ls-files` does.
4
4
 
5
5
  - faster than doing the system call to git
6
6
  - doesn't require git to be installed
7
- - tested against ruby 2.4 - 2.7 and jruby
7
+ - tested against ruby 2.4 - 3.4.1 and jruby
8
8
 
9
9
  ## Installation
10
10
 
data/Rakefile CHANGED
@@ -1,18 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'bundler/setup'
3
4
  require 'bundler/gem_tasks'
4
- require 'rspec/core/rake_task'
5
- require 'rubocop/rake_task'
6
- require 'spellr/rake_task'
7
- require 'leftovers/rake_task'
8
5
 
9
- RuboCop::RakeTask.new
6
+ require 'rspec/core/rake_task'
10
7
  RSpec::Core::RakeTask.new(:spec)
11
- Spellr::RakeTask.generate_task
12
- Leftovers::RakeTask.generate_task
8
+ linters = %i{spec}
9
+
10
+ if RUBY_PLATFORM != 'java'
11
+ require 'rubocop/rake_task'
12
+ RuboCop::RakeTask.new
13
+ linters << :rubocop
13
14
 
14
- if RUBY_PLATFORM == 'java'
15
- task default: %i{spec build}
16
- else
17
- task default: %i{spec rubocop spellr leftovers build}
15
+ require 'spellr/rake_task'
16
+ Spellr::RakeTask.generate_task
17
+ linters << :spellr
18
+
19
+ require 'leftovers/rake_task'
20
+ Leftovers::RakeTask.generate_task
21
+ linters << :leftovers
18
22
  end
23
+
24
+ linters << :build
25
+
26
+ desc 'Run all linters'
27
+ task default: linters
data/git_index.gemspec CHANGED
@@ -26,16 +26,5 @@ Gem::Specification.new do |spec|
26
26
  end
27
27
 
28
28
  spec.require_paths = ['lib']
29
-
30
- spec.add_development_dependency 'benchmark-ips'
31
- spec.add_development_dependency 'bundler', '>= 2'
32
- spec.add_development_dependency 'leftovers'
33
- spec.add_development_dependency 'pry', '> 0'
34
- spec.add_development_dependency 'rake', '>= 12.3.3'
35
- spec.add_development_dependency 'rspec'
36
- spec.add_development_dependency 'rubocop'
37
- spec.add_development_dependency 'rubocop-performance'
38
- spec.add_development_dependency 'rubocop-rspec'
39
- spec.add_development_dependency 'simplecov', '~> 0.18.5'
40
- spec.add_development_dependency 'spellr'
29
+ spec.metadata['rubygems_mfa_required'] = 'true'
41
30
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GitLS
4
- VERSION = '0.5.0'
4
+ VERSION = '0.5.1'
5
5
  end
data/lib/git_ls.rb CHANGED
@@ -4,6 +4,7 @@
4
4
  # GitLS.files -> Array of strings as files.
5
5
  # This will be identical output to git ls-files
6
6
  require 'stringio'
7
+ require_relative 'git_ls/version'
7
8
 
8
9
  module GitLS # rubocop:disable Metrics/ModuleLength
9
10
  class Error < StandardError; end
@@ -32,11 +33,15 @@ module GitLS # rubocop:disable Metrics/ModuleLength
32
33
  # 4-byte version number:
33
34
  # The current supported versions are 2, 3 and 4.
34
35
  # 32-bit number of index entries.
35
- sig = file.read(4, buf)
36
+ file.read(4, buf)
37
+ sig = buf
36
38
  raise ::GitLS::Error, ".git/index file not found at '#{path}'" unless sig == 'DIRC'
37
39
 
38
- git_index_version = file.read(4, buf).unpack1('N')
39
- entries = file.read(4, buf).unpack1('N')
40
+ file.read(4, buf)
41
+ git_index_version = buf.unpack1('N')
42
+
43
+ file.read(4, buf)
44
+ entries = buf.unpack1('N')
40
45
 
41
46
  files = ::Array.new(entries)
42
47
  files = case git_index_version
@@ -121,7 +126,8 @@ module GitLS # rubocop:disable Metrics/ModuleLength
121
126
 
122
127
  next unless literal_length > 0
123
128
 
124
- words = file.read(8 * literal_length, buf).unpack('B64' * literal_length)
129
+ file.read(8 * literal_length, buf)
130
+ words = buf.unpack('B64' * literal_length)
125
131
  words.each do |word|
126
132
  word.each_char.reverse_each do |char|
127
133
  yield(uncompressed_pos) if char == '1'
@@ -138,7 +144,7 @@ module GitLS # rubocop:disable Metrics/ModuleLength
138
144
  files.map! do
139
145
  file.seek(60, 1) # skip 60 bytes (40 bytes of stat, 20 bytes of sha)
140
146
 
141
- length = (file.getbyte & 0xF) * 256 + file.getbyte # find the 12 byte length
147
+ length = ((file.getbyte & 0xF) * 256) + file.getbyte # find the 12 byte length
142
148
  if length < 0xFFF
143
149
  path = file.read(length)
144
150
  # :nocov:
@@ -161,7 +167,7 @@ module GitLS # rubocop:disable Metrics/ModuleLength
161
167
  file.seek(60, 1) # skip 60 bytes (40 bytes of stat, 20 bytes of sha)
162
168
  flags = file.getbyte
163
169
  extended_flag = (flags & 0b0100_0000) > 0
164
- length = (flags & 0xF) * 256 + file.getbyte # find the 12 byte length
170
+ length = ((flags & 0xF) * 256) + file.getbyte # find the 12 byte length
165
171
  file.seek(2, 1) if extended_flag
166
172
 
167
173
  if length < 0xFFF
@@ -183,11 +189,11 @@ module GitLS # rubocop:disable Metrics/ModuleLength
183
189
 
184
190
  def files_4(files, file) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
185
191
  prev_entry_path = ''
186
- files.map! do
192
+ files.map! do # rubocop:disable Metrics/BlockLength
187
193
  file.seek(60, 1) # skip 60 bytes (40 bytes of stat, 20 bytes of sha)
188
194
  flags = file.getbyte
189
195
  extended_flag = (flags & 0b0100_0000) > 0
190
- length = (flags & 0xF) * 256 + file.getbyte # find the 12 byte length
196
+ length = ((flags & 0xF) * 256) + file.getbyte # find the 12 byte length
191
197
  file.seek(2, 1) if extended_flag
192
198
 
193
199
  # documentation for this number from
@@ -203,7 +209,7 @@ module GitLS # rubocop:disable Metrics/ModuleLength
203
209
  n = 1
204
210
  while (prev_read_offset & 0b1000_0000) > 0
205
211
  read_offset += (prev_read_offset & 0b0111_1111)
206
- read_offset += 2**(7 * n)
212
+ read_offset += 1 << (7 * n)
207
213
  n += 1
208
214
  prev_read_offset = file.getbyte
209
215
  end
@@ -212,7 +218,8 @@ module GitLS # rubocop:disable Metrics/ModuleLength
212
218
  initial_part_length = prev_entry_path.bytesize - read_offset
213
219
 
214
220
  if length < 0xFFF
215
- rest = file.read(length - initial_part_length)
221
+ rest = +''
222
+ file.read(length - initial_part_length, rest)
216
223
  file.seek(1, 1) # the NUL
217
224
  # :nocov:
218
225
  else
@@ -224,8 +231,8 @@ module GitLS # rubocop:disable Metrics/ModuleLength
224
231
  # :nocov:
225
232
  end
226
233
 
227
- prev_entry_path = prev_entry_path.byteslice(0, initial_part_length) + rest
228
- prev_entry_path.force_encoding(Encoding::UTF_8)
234
+ prev_entry_path = +"#{prev_entry_path.byteslice(0, initial_part_length)}#{rest}"
235
+ prev_entry_path.force_encoding(::Encoding::UTF_8)
229
236
  end
230
237
  end
231
238
  end
metadata CHANGED
@@ -1,176 +1,21 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git_ls
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dana Sherson
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2020-09-12 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: benchmark-ips
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '2'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '2'
41
- - !ruby/object:Gem::Dependency
42
- name: leftovers
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
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'
69
- - !ruby/object:Gem::Dependency
70
- name: rake
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: 12.3.3
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: 12.3.3
83
- - !ruby/object:Gem::Dependency
84
- name: rspec
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
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-performance
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'
125
- - !ruby/object:Gem::Dependency
126
- name: rubocop-rspec
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
- - !ruby/object:Gem::Dependency
140
- name: simplecov
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: 0.18.5
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: 0.18.5
153
- - !ruby/object:Gem::Dependency
154
- name: spellr
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- version: '0'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: '0'
167
- description:
10
+ date: 2025-01-28 00:00:00.000000000 Z
11
+ dependencies: []
168
12
  email:
169
13
  - robot@dana.sh
170
14
  executables: []
171
15
  extensions: []
172
16
  extra_rdoc_files: []
173
17
  files:
18
+ - ".github/workflows/ci.yml"
174
19
  - ".gitignore"
175
20
  - ".leftovers.yml"
176
21
  - ".rspec"
@@ -180,7 +25,6 @@ files:
180
25
  - ".spellr_wordlists/english.txt"
181
26
  - ".spellr_wordlists/ruby.txt"
182
27
  - ".spellr_wordlists/shell.txt"
183
- - ".travis.yml"
184
28
  - CHANGELOG.md
185
29
  - Gemfile
186
30
  - LICENSE.txt
@@ -196,7 +40,7 @@ metadata:
196
40
  homepage_uri: https://github.com/robotdana/git_ls
197
41
  source_code_uri: https://github.com/robotdana/git_ls
198
42
  changelog_uri: https://github.com/robotdana/git_ls/blob/main/CHANGELOG.md
199
- post_install_message:
43
+ rubygems_mfa_required: 'true'
200
44
  rdoc_options: []
201
45
  require_paths:
202
46
  - lib
@@ -211,8 +55,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
211
55
  - !ruby/object:Gem::Version
212
56
  version: '0'
213
57
  requirements: []
214
- rubygems_version: 3.1.2
215
- signing_key:
58
+ rubygems_version: 3.6.2
216
59
  specification_version: 4
217
60
  summary: Read a .git/index file and list the files
218
61
  test_files: []
data/.travis.yml DELETED
@@ -1,10 +0,0 @@
1
- ---
2
- language: ruby
3
- cache: bundler
4
- rvm:
5
- - 2.7
6
- - 2.6
7
- - 2.5
8
- - 2.4
9
- - jruby
10
- before_install: sudo apt-get install git && gem install bundler -v 2.1.4