git_ls 0.5.0 → 0.5.1

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