retest 0.9.0 → 1.0.0.pre

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: 8df33036507fe29259ef99ac9fa574fdece9af4e69911f21125a1c4bbad7778c
4
- data.tar.gz: a4bb2606b7373fb304638125be08d94c79a5dfb5e324cbf433848730cf08abe6
3
+ metadata.gz: 283264ef544ab1d67927bd21f53d36e3f210570453bf59ca09edf83cef6111d2
4
+ data.tar.gz: 05304a016fc791d8ea4a21b3a44fd4e74d5ccd1ec659db3f3227cc3c04e17f87
5
5
  SHA512:
6
- metadata.gz: ba3f7823d9789965dbd44d92ac40aeb1f6d3dd9f35f6e634f317949adf72ba672abb231f4603acfe1da2c766d3158da81ca1c538868ab8be8955bfdf443651b0
7
- data.tar.gz: 74f1a43fc0b23d48bd9a7cdd53c8a57206cbf9cc3546f1a6d2d0609d7f837744f1f74162ced9f57661f6008237b039f32ba2454289d839314ecfae5bc4ce011f
6
+ metadata.gz: 2d458a1d91538f3a8bc0b60baff4f399c7cfa495c83a1fa47a1cd054c809239084c640fbd15b89efd15e53ea7110d3291b054567f2d0b599f6541c615a8e985e
7
+ data.tar.gz: 0d55c10145f7f77c755d66aff6f719731401026444f1c3911ccbee3ffeb089257303e87b80de6edd98a273138b6e481c0af97aaaab395ff9c81f1cdf8659bfcb
@@ -48,6 +48,7 @@ jobs:
48
48
  - hanami-app
49
49
  - rspec-rails
50
50
  - rspec-ruby
51
+ - git-ruby
51
52
  steps:
52
53
  - uses: actions/checkout@v2
53
54
  - name: Set up Ruby
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- retest (0.9.0)
4
+ retest (1.0.0.pre)
5
5
  listen (~> 3.2)
6
6
  string-similarity (~> 2.1)
7
7
  tty-option (~> 0.1)
@@ -11,7 +11,7 @@ GEM
11
11
  specs:
12
12
  byebug (11.1.3)
13
13
  ffi (1.15.0)
14
- listen (3.4.1)
14
+ listen (3.5.0)
15
15
  rb-fsevent (~> 0.10, >= 0.10.3)
16
16
  rb-inotify (~> 0.9, >= 0.9.10)
17
17
  minitest (5.14.1)
data/README.md CHANGED
@@ -82,6 +82,10 @@ Examples:
82
82
  Let retest identify which command to run for all tests
83
83
  $ retest --all
84
84
  $ retest --auto --all
85
+
86
+ Run a sanity check on changed files from a branch
87
+ $ retest --diff origin/main --rails
88
+ $ retest --diff main --auto
85
89
  ```
86
90
 
87
91
  ## Why?
data/bin/debug CHANGED
@@ -13,6 +13,14 @@ if options.help?
13
13
  return
14
14
  end
15
15
 
16
- Retest.start(options.command) # not blocking
16
+ program = Retest::Program.new(
17
+ repository: Retest::Repository.new(files: Retest::VersionControl.files),
18
+ runner: Retest::Runner.for(options.command)
19
+ )
17
20
 
18
- sleep
21
+ if options.params[:diff]
22
+ program.diff(options.params[:diff])
23
+ else
24
+ program.start # not blocking
25
+ sleep
26
+ end
data/bin/test/git-ruby ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+
3
+ bundle install
4
+ bundle exec rake build
5
+ ls -t pkg | head -n1 | xargs -I {} mv pkg/{} features/git-ruby/retest.gem
6
+ docker-compose -f features/git-ruby/docker-compose.yml up --build --exit-code-from retest
data/exe/retest CHANGED
@@ -11,6 +11,14 @@ if options.help?
11
11
  return
12
12
  end
13
13
 
14
- Retest.start(options.command) # not blocking
14
+ program = Retest::Program.new(
15
+ repository: Retest::Repository.new(files: Retest::VersionControl.files),
16
+ runner: Retest::Runner.for(options.command)
17
+ )
15
18
 
16
- sleep
19
+ if options.params[:diff]
20
+ program.diff(options.params[:diff])
21
+ else
22
+ program.start # not blocking
23
+ sleep
24
+ end
data/lib/retest.rb CHANGED
@@ -12,19 +12,33 @@ require "retest/setup"
12
12
  module Retest
13
13
  class Error < StandardError; end
14
14
 
15
- class << self
16
- def start(command)
15
+ class Program
16
+ attr_accessor :runner, :repository
17
+ def initialize(runner: nil, repository: nil)
18
+ @runner = runner
19
+ @repository = repository
20
+ end
21
+
22
+ def start
17
23
  puts "Launching Retest..."
24
+ build.start
25
+ puts "Ready to refactor! You can make file changes now"
26
+ end
18
27
 
19
- build(
20
- runner: Runner.for(command),
21
- repository: Repository.new(files: VersionControl.files)
22
- ).start
28
+ def diff(branch)
29
+ raise "Git not installed" unless VersionControl::Git.installed?
30
+ test_files = repository.find_tests VersionControl::Git.diff_files(branch)
23
31
 
24
- puts "Ready to refactor! You can make file changes now"
32
+ puts "Tests found:"
33
+ test_files.each { |test_file| puts " - #{test_file}" }
34
+
35
+ puts "Running tests..."
36
+ test_files.each { |test_file| runner.run test_file }
25
37
  end
26
38
 
27
- def build(runner:, repository:)
39
+ private
40
+
41
+ def build
28
42
  Listen.to('.', only: /\.rb$/, relative: true) do |modified, added, removed|
29
43
  begin
30
44
  repository.add(added)
@@ -32,11 +46,15 @@ module Retest
32
46
  runner.remove(removed)
33
47
  system('clear 2>/dev/null') || system('cls 2>/dev/null')
34
48
 
35
- runner.run repository.find_test (modified + added).first
49
+ runner.run test_file_to_run(modified + added)
36
50
  rescue => e
37
51
  puts "Something went wrong: #{e.message}"
38
52
  end
39
53
  end
40
54
  end
55
+
56
+ def test_file_to_run(changed_files)
57
+ repository.find_test changed_files.first if runner.matching?
58
+ end
41
59
  end
42
60
  end
@@ -48,6 +48,12 @@ module Retest
48
48
  $ retest --all
49
49
  $ retest --auto --all
50
50
  EOS
51
+
52
+ example <<~EOS
53
+ Run a sanity check on changed files from a branch
54
+ $ retest --diff origin/main --rails
55
+ $ retest --diff main --auto
56
+ EOS
51
57
  end
52
58
 
53
59
  argument :command do
@@ -58,6 +64,11 @@ module Retest
58
64
  EOS
59
65
  end
60
66
 
67
+ option :diff do
68
+ desc "Pipes all matching tests from diffed branch to test command"
69
+ long "--diff=git-branch"
70
+ end
71
+
61
72
  flag :all do
62
73
  long "--all"
63
74
  desc "Run all the specs of a specificied ruby setup"
@@ -13,7 +13,17 @@ module Retest
13
13
  return unless path
14
14
  return if path.empty?
15
15
 
16
- cache[path] ||= select_from TestOptions.for(path, files: files)
16
+ @path = path
17
+ cache[@path] ||= select_from TestOptions.for(@path, files: files)
18
+ end
19
+
20
+ def find_tests(paths)
21
+ paths
22
+ .select { |path| Regexp.new("\.rb$") =~ path }
23
+ .map { |path| find_test(path) }
24
+ .compact
25
+ .uniq
26
+ .sort
17
27
  end
18
28
 
19
29
  def add(added)
@@ -47,7 +57,7 @@ module Retest
47
57
 
48
58
  def ask_question(tests)
49
59
  output_stream.puts <<~QUESTION
50
- We found few tests matching:
60
+ We found few tests matching: #{@path}
51
61
  #{list_options(tests)}
52
62
 
53
63
  Which file do you want to use?
data/lib/retest/runner.rb CHANGED
@@ -52,6 +52,14 @@ module Retest
52
52
  end
53
53
  end
54
54
 
55
+ def unmatching?
56
+ !matching?
57
+ end
58
+
59
+ def matching?
60
+ true
61
+ end
62
+
55
63
  private
56
64
 
57
65
  def purge_cache
@@ -65,6 +73,14 @@ module Retest
65
73
  end
66
74
 
67
75
  def remove(_ = nil); end
76
+
77
+ def unmatching?
78
+ !matching?
79
+ end
80
+
81
+ def matching?
82
+ false
83
+ end
68
84
  end
69
85
  end
70
86
  end
@@ -1,3 +1,3 @@
1
1
  module Retest
2
- VERSION = "0.9.0"
2
+ VERSION = "1.0.0.pre"
3
3
  end
@@ -1,3 +1,6 @@
1
+ require_relative 'version_control/git'
2
+ require_relative 'version_control/no_version_control'
3
+
1
4
  module Retest
2
5
  class VersionControl
3
6
  def self.files
@@ -6,43 +9,5 @@ module Retest
6
9
 
7
10
  def name; end
8
11
  alias :to_s :name
9
-
10
- class NoVersionControl
11
- def self.installed?
12
- true
13
- end
14
-
15
- def name
16
- 'default'
17
- end
18
-
19
- def files
20
- Dir.glob('**/*') - Dir.glob('{tmp,node_modules}/**/*')
21
- end
22
- end
23
-
24
- class Git
25
- def self.installed?
26
- system "git -C . rev-parse 2>/dev/null"
27
- end
28
-
29
- def name
30
- 'git'
31
- end
32
-
33
- def files
34
- (untracked_files + tracked_files).sort
35
- end
36
-
37
- private
38
-
39
- def untracked_files
40
- `git ls-files --other --exclude-standard -z`.split("\x0")
41
- end
42
-
43
- def tracked_files
44
- `git ls-files -z`.split("\x0")
45
- end
46
- end
47
12
  end
48
13
  end
@@ -0,0 +1,33 @@
1
+ class Retest::VersionControl
2
+ class Git
3
+ def self.installed?
4
+ system "git -C . rev-parse 2>/dev/null"
5
+ end
6
+
7
+ def self.diff_files(branch)
8
+ new.diff_files(branch)
9
+ end
10
+
11
+ def name
12
+ 'git'
13
+ end
14
+
15
+ def files
16
+ (untracked_files + tracked_files).sort
17
+ end
18
+
19
+ def diff_files(branch)
20
+ `git diff #{branch} --name-only --diff-filter=ACMRT -z`.split("\x0")
21
+ end
22
+
23
+ private
24
+
25
+ def untracked_files
26
+ `git ls-files --other --exclude-standard -z`.split("\x0")
27
+ end
28
+
29
+ def tracked_files
30
+ `git ls-files -z`.split("\x0")
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,15 @@
1
+ class Retest::VersionControl
2
+ class NoVersionControl
3
+ def self.installed?
4
+ true
5
+ end
6
+
7
+ def name
8
+ 'default'
9
+ end
10
+
11
+ def files
12
+ Dir.glob('**/*') - Dir.glob('{tmp,node_modules}/**/*')
13
+ end
14
+ end
15
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: retest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 1.0.0.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexandre Barret
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-16 00:00:00.000000000 Z
11
+ date: 2021-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: string-similarity
@@ -72,6 +72,7 @@ files:
72
72
  - bin/console
73
73
  - bin/debug
74
74
  - bin/setup
75
+ - bin/test/git-ruby
75
76
  - bin/test/hanami-app
76
77
  - bin/test/rails-app
77
78
  - bin/test/rspec-rails
@@ -86,6 +87,8 @@ files:
86
87
  - lib/retest/test_options.rb
87
88
  - lib/retest/version.rb
88
89
  - lib/retest/version_control.rb
90
+ - lib/retest/version_control/git.rb
91
+ - lib/retest/version_control/no_version_control.rb
89
92
  - retest.gemspec
90
93
  homepage: https://github.com/AlexB52/retest
91
94
  licenses:
@@ -104,9 +107,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
104
107
  version: 2.3.0
105
108
  required_rubygems_version: !ruby/object:Gem::Requirement
106
109
  requirements:
107
- - - ">="
110
+ - - ">"
108
111
  - !ruby/object:Gem::Version
109
- version: '0'
112
+ version: 1.3.1
110
113
  requirements: []
111
114
  rubygems_version: 3.0.3
112
115
  signing_key: