rfix 1.0.15 → 1.1.0.pre.147
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +5 -0
- data/.rspec +0 -1
- data/.rubocop.yml +46 -31
- data/.travis.yml +5 -12
- data/Gemfile.base +10 -3
- data/Gemfile.base.lock +172 -0
- data/Gemfile.lock +28 -7
- data/Guardfile +1 -1
- data/Makefile +4 -13
- data/Rakefile +16 -95
- data/ci/Gemfile.rubocop-0.80.lock +16 -1
- data/ci/Gemfile.rubocop-0.81.lock +16 -1
- data/ci/Gemfile.rubocop-0.82.lock +16 -1
- data/ci/Gemfile.rubocop-0.83.lock +19 -4
- data/ci/Gemfile.rubocop-0.84.lock +19 -4
- data/ci/Gemfile.rubocop-0.85.1.lock +19 -4
- data/ci/Gemfile.rubocop-0.85.lock +16 -1
- data/exe/rfix +18 -144
- data/lib/rfix.rb +10 -3
- data/lib/rfix/box.rb +112 -0
- data/lib/rfix/branch.rb +30 -0
- data/lib/rfix/branches/base.rb +29 -0
- data/lib/rfix/branches/head.rb +11 -0
- data/lib/rfix/branches/main.rb +33 -0
- data/lib/rfix/branches/name.rb +21 -0
- data/lib/rfix/branches/reference.rb +19 -0
- data/lib/rfix/branches/upstream.rb +11 -0
- data/lib/rfix/cmd.rb +9 -14
- data/lib/rfix/commands/all.rb +26 -0
- data/lib/rfix/commands/branch.rb +15 -0
- data/lib/rfix/commands/extensions/options.rb +8 -0
- data/lib/rfix/commands/help.rb +7 -0
- data/lib/rfix/commands/helper/args.rb +137 -0
- data/lib/rfix/commands/helper/help.rb +6 -0
- data/lib/rfix/commands/helper/loader.rb +6 -0
- data/lib/rfix/commands/helper/option.rb +0 -0
- data/lib/rfix/commands/helper/params.rb +0 -0
- data/lib/rfix/commands/helper/rubocop.rb +17 -0
- data/lib/rfix/commands/info.rb +30 -0
- data/lib/rfix/commands/lint.rb +23 -0
- data/lib/rfix/commands/local.rb +12 -0
- data/lib/rfix/commands/origin.rb +19 -0
- data/lib/rfix/commands/setup.rb +29 -0
- data/lib/rfix/commands/welcome.rb +24 -0
- data/lib/rfix/deleted.rb +13 -0
- data/lib/rfix/error.rb +2 -0
- data/lib/rfix/extensions/extensions.rb +4 -26
- data/lib/rfix/extensions/offense.rb +2 -1
- data/lib/rfix/extensions/string.rb +8 -0
- data/lib/rfix/file.rb +46 -0
- data/lib/rfix/file_cache.rb +59 -0
- data/lib/rfix/formatter.rb +37 -10
- data/lib/rfix/git_helper.rb +13 -1
- data/lib/rfix/log.rb +104 -7
- data/lib/rfix/no_file.rb +13 -0
- data/lib/rfix/rake/paths.rb +50 -0
- data/lib/rfix/rake/support.rb +75 -0
- data/lib/rfix/repository.rb +201 -0
- data/lib/rfix/rfix.rb +7 -198
- data/lib/rfix/tracked.rb +76 -0
- data/lib/rfix/tracked_file.rb +1 -1
- data/lib/rfix/untracked.rb +13 -0
- data/lib/rfix/version.rb +1 -1
- data/path.rb +7 -0
- data/rfix.gemspec +6 -2
- data/rugged.rb +206 -0
- data/tasks/bump.rake +11 -0
- data/tasks/bundle.rake +17 -0
- data/tasks/complex.rake +54 -0
- data/tasks/simple.rake +58 -0
- data/tasks/travis.rake +74 -0
- data/tasks/vendor.rake +34 -0
- metadata +136 -13
- data/file.rb +0 -1
- data/lib/rfix/gem_helper.rb +0 -12
- data/lib/rfix/git_file.rb +0 -36
- data/lib/rfix/rake_helper.rb +0 -56
- data/lib/rfix/untracked_file.rb +0 -13
data/lib/rfix/no_file.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
module Travis
|
2
|
+
SETUP = "travis:setup".freeze
|
3
|
+
INSTALL = "travis:install".freeze
|
4
|
+
TASKS = "travis:tasks:all".freeze
|
5
|
+
GIT = "travis:git:config".freeze
|
6
|
+
end
|
7
|
+
|
8
|
+
module Bundle
|
9
|
+
INSTALL = "bundle:install".freeze
|
10
|
+
ADD = "bundle:git:add".freeze
|
11
|
+
CONFIG = File.join(__dir__, "../../../.rubocop.yml")
|
12
|
+
TAG = "rally-point".freeze
|
13
|
+
REBUILD = "bundle:rebuild".freeze
|
14
|
+
BUILD = "bundle:build".freeze
|
15
|
+
ROOT = File.expand_path(File.join(__dir__, "../../.."))
|
16
|
+
DIR = File.join(ROOT, "spec/fixtures")
|
17
|
+
TMP = File.join(ROOT, "tmp")
|
18
|
+
|
19
|
+
module Simple
|
20
|
+
FILE = File.join(DIR, "simple.bundle")
|
21
|
+
REPO = File.join(TMP, "simple")
|
22
|
+
REBUILD = "bundle:simple:rebuild".freeze
|
23
|
+
BUILD = "bundle:simple:build".freeze
|
24
|
+
FLUSH = "bundle:simple:flush".freeze
|
25
|
+
TEST = "bundle:simple:test".freeze
|
26
|
+
TAG = Bundle::TAG
|
27
|
+
end
|
28
|
+
|
29
|
+
module Complex
|
30
|
+
FILE = File.join(DIR, "complex.bundle")
|
31
|
+
REPO = File.join(TMP, "complex")
|
32
|
+
GITHUB = "https://github.com/oleander/git-fame-rb".freeze
|
33
|
+
REBUILD = "bundle:complex:rebuild".freeze
|
34
|
+
BUILD = "bundle:complex:build".freeze
|
35
|
+
FLUSH = "bundle:complex:flush".freeze
|
36
|
+
TEST = "bundle:complex:test".freeze
|
37
|
+
TAG = Bundle::TAG
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
module Vendor
|
42
|
+
ROOT = File.expand_path(File.join(__dir__, "../../.."))
|
43
|
+
DIR = File.join(ROOT, "vendor/shopify")
|
44
|
+
REPO = File.join(DIR, "cli-ui")
|
45
|
+
GITHUB = "https://github.com/shopify/cli-ui".freeze
|
46
|
+
START = "ef976d".freeze
|
47
|
+
BUILD = "vendor:shopify:build".freeze
|
48
|
+
REBUILD = "vendor:shopify:rebuild".freeze
|
49
|
+
TEST = "vendor:shopify:test".freeze
|
50
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require "colorize"
|
2
|
+
require "fileutils"
|
3
|
+
require "shellwords"
|
4
|
+
|
5
|
+
module Rfix::Support
|
6
|
+
include FileUtils
|
7
|
+
|
8
|
+
alias _sh sh
|
9
|
+
alias _cd cd
|
10
|
+
alias _rm_rf rm_rf
|
11
|
+
alias _rm_f rm_f
|
12
|
+
alias _mkdir_p mkdir_p
|
13
|
+
alias _chdir chdir
|
14
|
+
|
15
|
+
def gemfiles
|
16
|
+
Dir["Gemfile*", "ci/Gemfile*"]
|
17
|
+
end
|
18
|
+
|
19
|
+
def say(msg)
|
20
|
+
$stderr.puts "#{'==>'.blue} #{to_relative(msg).italic}"
|
21
|
+
end
|
22
|
+
|
23
|
+
def sh(*args)
|
24
|
+
args = args.map(&:shellsplit).flatten
|
25
|
+
colorize args
|
26
|
+
_sh(*args)
|
27
|
+
end
|
28
|
+
|
29
|
+
def chdir(*args, &block)
|
30
|
+
colorize :cd, args
|
31
|
+
_chdir(*args, &block)
|
32
|
+
end
|
33
|
+
|
34
|
+
def rm_rf(*args)
|
35
|
+
colorize :rm, args
|
36
|
+
_rm_rf(*args)
|
37
|
+
end
|
38
|
+
|
39
|
+
def rm_f(*args)
|
40
|
+
colorize :rm, args
|
41
|
+
_rm_f(*args)
|
42
|
+
end
|
43
|
+
|
44
|
+
def cd(*args, &block)
|
45
|
+
colorize :cd, args
|
46
|
+
_cd(*args, &block)
|
47
|
+
end
|
48
|
+
|
49
|
+
def mkdir_p(*args)
|
50
|
+
colorize :mkdir, args
|
51
|
+
_mkdir_p(*args)
|
52
|
+
end
|
53
|
+
|
54
|
+
def clone_and_run(&block)
|
55
|
+
Dir.mktmpdir do |repo|
|
56
|
+
sh "git clone", Bundle::Complex::FILE, repo, "--branch", "master"
|
57
|
+
Dir.chdir(repo) { block.call(repo) }
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def current_path
|
64
|
+
File.join(Dir.getwd, "/")
|
65
|
+
end
|
66
|
+
|
67
|
+
def to_relative(path)
|
68
|
+
path.to_s.gsub(current_path, "")
|
69
|
+
end
|
70
|
+
|
71
|
+
def colorize(*args)
|
72
|
+
head, *tail = args.flatten.map(&method(:to_relative))
|
73
|
+
say [head.yellow, tail.join(" ").italic].join(" ")
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,201 @@
|
|
1
|
+
require "rugged"
|
2
|
+
require "rfix/file"
|
3
|
+
require "rfix/file_cache"
|
4
|
+
require "rfix/untracked"
|
5
|
+
require "rfix/tracked"
|
6
|
+
|
7
|
+
class Rfix::Repository
|
8
|
+
include Rfix::Log
|
9
|
+
attr_reader :files, :repo
|
10
|
+
|
11
|
+
def initialize(root_path:, load_untracked: false, reference: Rfix::Branch::HEAD, paths: [])
|
12
|
+
unless File.exist?(root_path)
|
13
|
+
raise Rfix::Error, "#{root_path} does not exist"
|
14
|
+
end
|
15
|
+
|
16
|
+
unless Pathname.new(root_path).absolute?
|
17
|
+
raise Rfix::Error, "#{root_path} is not absolute"
|
18
|
+
end
|
19
|
+
|
20
|
+
unless reference.is_a?(Rfix::Branch::Base)
|
21
|
+
raise Rfix::Error.new("Need Branch::Base, got {{error:#{reference.class}}}")
|
22
|
+
end
|
23
|
+
|
24
|
+
@files = FileCache.new(root_path)
|
25
|
+
@repo = Rugged::Repository.new(root_path)
|
26
|
+
@paths = paths
|
27
|
+
@reference = reference
|
28
|
+
@load_untracked = load_untracked
|
29
|
+
|
30
|
+
load!
|
31
|
+
end
|
32
|
+
|
33
|
+
def load_untracked?
|
34
|
+
@load_untracked
|
35
|
+
end
|
36
|
+
|
37
|
+
def load_tracked?
|
38
|
+
!! @reference
|
39
|
+
end
|
40
|
+
|
41
|
+
def reference
|
42
|
+
@reference
|
43
|
+
end
|
44
|
+
|
45
|
+
def refresh!(path)
|
46
|
+
@files.get(path).refresh!
|
47
|
+
end
|
48
|
+
|
49
|
+
def include?(path, line)
|
50
|
+
if file = @files.get(path)
|
51
|
+
return file.include?(line)
|
52
|
+
end
|
53
|
+
|
54
|
+
return false
|
55
|
+
end
|
56
|
+
|
57
|
+
def set_root(_path_path)
|
58
|
+
using_path(root_path)
|
59
|
+
end
|
60
|
+
|
61
|
+
def paths
|
62
|
+
files.pluck(&:absolute_path)
|
63
|
+
end
|
64
|
+
|
65
|
+
def current_branch
|
66
|
+
repo.head.name
|
67
|
+
end
|
68
|
+
|
69
|
+
def has_reference?(reference)
|
70
|
+
repo.rev_parse(reference)
|
71
|
+
rescue Rugged::ReferenceError
|
72
|
+
return false
|
73
|
+
end
|
74
|
+
|
75
|
+
def local_branches
|
76
|
+
repo.branches.each_name(:local).to_a
|
77
|
+
end
|
78
|
+
|
79
|
+
def git_path
|
80
|
+
repo.workdir
|
81
|
+
end
|
82
|
+
|
83
|
+
def head
|
84
|
+
@head ||= repo.rev_parse("HEAD")
|
85
|
+
end
|
86
|
+
|
87
|
+
def upstream
|
88
|
+
@upstream ||= reference.resolve(with: repo)
|
89
|
+
end
|
90
|
+
|
91
|
+
private
|
92
|
+
|
93
|
+
def load_tracked!
|
94
|
+
params = {
|
95
|
+
# ignore_whitespace_change: true,
|
96
|
+
include_untracked_content: true,
|
97
|
+
recurse_untracked_dirs: true,
|
98
|
+
# ignore_whitespace_eol: true,
|
99
|
+
include_unmodified: false,
|
100
|
+
include_untracked: true,
|
101
|
+
ignore_submodules: true,
|
102
|
+
# ignore_whitespace: true,
|
103
|
+
include_ignored: false,
|
104
|
+
context_lines: 0
|
105
|
+
}
|
106
|
+
|
107
|
+
unless @paths.empty?
|
108
|
+
say_debug("Use @paths #{@paths.join(", ")}")
|
109
|
+
params[:disable_pathspec_match] = false
|
110
|
+
params[:paths] = @paths
|
111
|
+
end
|
112
|
+
|
113
|
+
say_debug("Run diff on #{reference}")
|
114
|
+
upstream.diff(head, **params).tap do |diff|
|
115
|
+
diff.find_similar!(
|
116
|
+
renames_from_rewrites: true,
|
117
|
+
renames: true,
|
118
|
+
copies: true
|
119
|
+
)
|
120
|
+
end.each_delta do |delta|
|
121
|
+
path = delta.new_file.fetch(:path)
|
122
|
+
say_debug("Found #{path} while diff")
|
123
|
+
try_store(path, [delta.status])
|
124
|
+
end
|
125
|
+
rescue Rugged::ReferenceError
|
126
|
+
abort_box($ERROR_INFO.to_s) do
|
127
|
+
prt "Reference {{error:#{reference}}} cannot be found in repository"
|
128
|
+
end
|
129
|
+
rescue Rugged::ConfigError
|
130
|
+
abort_box($ERROR_INFO.to_s) do
|
131
|
+
prt "No upstream branch set for {{error:#{current_branch}}}"
|
132
|
+
end
|
133
|
+
rescue TypeError
|
134
|
+
abort_box($ERROR_INFO.to_s) do
|
135
|
+
prt "Reference {{error:#{reference}}} is not pointing to a tree or commit"
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def load!
|
140
|
+
load_tracked!
|
141
|
+
load_untracked!
|
142
|
+
end
|
143
|
+
|
144
|
+
# https://github.com/libgit2/rugged/blob/35102c0ca10ab87c4c4ffe2e25221d26993c069c/test/status_test.rb
|
145
|
+
# - +:index_new+: the file is new in the index
|
146
|
+
# - +:index_modified+: the file has been modified in the index
|
147
|
+
# - +:index_deleted+: the file has been deleted from the index
|
148
|
+
# - +:worktree_new+: the file is new in the working directory
|
149
|
+
# - +:worktree_modified+: the file has been modified in the working directory
|
150
|
+
# - +:worktree_deleted+: the file has been deleted from the working directory
|
151
|
+
|
152
|
+
MODIFIED = [:modified, :worktree_modified, :index_modified].freeze
|
153
|
+
IGNORED = [:ignored].freeze
|
154
|
+
STAGED = [:added, :index_new].freeze
|
155
|
+
UNTRACKED = [:worktree_new, :untracked].freeze
|
156
|
+
COPIED = [:copied].freeze
|
157
|
+
DELETED = [:deleted, :worktree_deleted, :index_deleted].freeze
|
158
|
+
RENAMED = [:renamed].freeze
|
159
|
+
|
160
|
+
SKIP = [*DELETED, *RENAMED, *COPIED, *IGNORED].freeze
|
161
|
+
ACCEPT = [*MODIFIED].freeze
|
162
|
+
|
163
|
+
def load_untracked!
|
164
|
+
repo.status do |path, status|
|
165
|
+
try_store(path, status)
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
def store(file)
|
170
|
+
say_debug("Trying to add #{file.absolute_path}")
|
171
|
+
if File.exist?(file.absolute_path)
|
172
|
+
@files.add(file)
|
173
|
+
else
|
174
|
+
say_debug "#{file} does not exist"
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
def try_store(path, status)
|
179
|
+
if SKIP.any?(&status.method(:include?))
|
180
|
+
return say_debug("Ignored {{warning:#{status.join(', ')}}} #{path}")
|
181
|
+
end
|
182
|
+
|
183
|
+
if STAGED.any?(&status.method(:include?))
|
184
|
+
return store(Rfix::Untracked.new(path, repo, nil))
|
185
|
+
end
|
186
|
+
|
187
|
+
if UNTRACKED.any?(&status.method(:include?))
|
188
|
+
unless load_untracked?
|
189
|
+
return say_debug("Ignore #{path} as untracked files are ignored: #{status}")
|
190
|
+
end
|
191
|
+
|
192
|
+
return store(Rfix::Untracked.new(path, repo, nil))
|
193
|
+
end
|
194
|
+
|
195
|
+
if ACCEPT.any?(&status.method(:include?))
|
196
|
+
return store(Rfix::Tracked.new(path, repo, reference))
|
197
|
+
end
|
198
|
+
|
199
|
+
say_debug "Status not found {{error:#{status.join(', ')}}} for {{italic:#{path}}}"
|
200
|
+
end
|
201
|
+
end
|
data/lib/rfix/rfix.rb
CHANGED
@@ -1,111 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# rubocop:disable Layout/LineLength
|
4
|
-
|
5
3
|
require "rubocop"
|
6
|
-
require "optparse"
|
7
|
-
require "rbconfig"
|
8
|
-
require "rfix/git_file"
|
9
|
-
require "rfix/git_helper"
|
10
4
|
require "rfix/log"
|
11
|
-
require "rfix/tracked_file"
|
12
|
-
require "rfix/untracked_file"
|
13
5
|
|
14
6
|
module Rfix
|
15
|
-
include GitHelper
|
16
7
|
include Log
|
8
|
+
attr_accessor :repo
|
9
|
+
attr_accessor :test
|
17
10
|
|
18
|
-
|
19
|
-
" " * 2
|
20
|
-
end
|
21
|
-
|
22
|
-
def thanks
|
23
|
-
tx = []
|
24
|
-
tx << "\n{{v}} Thank you for installing {{green:rfix v#{Rfix::VERSION}}}!\n"
|
25
|
-
tx << "{{i}} Run {{command:rfix}} for avalible commands or any of the following to get started:"
|
26
|
-
tx << ""
|
27
|
-
# tx << "Here are a few examples that might be useful:"
|
28
|
-
tx << "#{indent}{{command:$ rfix local}} {{italic:# Auto-fixes commits not yet pushed to upstream}}"
|
29
|
-
tx << "#{indent}{{command:$ rfix origin}} {{italic:# Auto-fixes commits between HEAD and origin branch}}"
|
30
|
-
tx << "#{indent}{{command:$ rfix lint}} {{italic:# Lints commits and untracked files not yet pushed to upstream}}"
|
31
|
-
tx << ""
|
32
|
-
tx << "{{*}} {{bold:ProTip:}} Append {{command:--dry}} to run {{command:rfix}} in read-only mode"
|
33
|
-
tx << ""
|
34
|
-
tx << "{{i}} {{bold:Issues}} {{italic:https://github.com/oleander/rfix-rb/issues}}"
|
35
|
-
tx << "{{i}} {{bold:Readme}} {{italic:https://github.com/oleander/rfix-rb/blob/master/README.md}}"
|
36
|
-
tx << "{{i}} {{bold:Travis}} {{italic:https://travis-ci.org/github/oleander/rfix-rb}}"
|
37
|
-
tx << ""
|
38
|
-
tx << "{{italic:~ Linus}}\n\n"
|
39
|
-
CLI::UI.fmt(tx.join("\n"), enable_color: true)
|
40
|
-
end
|
41
|
-
|
42
|
-
def help
|
43
|
-
cmds = [""]
|
44
|
-
cmds << "#{indent}{{command:$ rfix [cmd] [options]}} # {{italic:--dry --help --list-files --limit-files --config --untracked}}"
|
45
|
-
cmds << "#{indent}{{command:$ rfix branch <branch>}} # {{italic:Fix changes made between HEAD and <branch>}}"
|
46
|
-
cmds << "#{indent}{{command:$ rfix origin}} # {{italic:Fix changes made between HEAD and origin branch}}"
|
47
|
-
cmds << "#{indent}{{command:$ rfix local}} # {{italic:Fix changes not yet pushed to upstream branch}}"
|
48
|
-
cmds << "#{indent}{{command:$ rfix info}} # {{italic:Display runtime dependencies and their versions}}"
|
49
|
-
cmds << "#{indent}{{command:$ rfix all}} # {{italic:Fix all files in this repository}} {{warning:(not recommended)}}"
|
50
|
-
cmds << "#{indent}{{command:$ rfix lint}} # {{italic:Shortcut for 'local --dry --untracked'}}"
|
51
|
-
CLI::UI.fmt(cmds.join("\n"), enable_color: true)
|
52
|
-
end
|
53
|
-
|
54
|
-
def current_branch
|
55
|
-
git("rev-parse", "--abbrev-ref", "HEAD").first
|
56
|
-
end
|
57
|
-
|
58
|
-
def debug?
|
59
|
-
@debug
|
60
|
-
end
|
61
|
-
|
62
|
-
def debug!
|
63
|
-
@debug = true
|
64
|
-
@config[:debug] = true
|
65
|
-
end
|
66
|
-
|
67
|
-
def number_of_commits_since
|
68
|
-
cmd("git rev-list master..HEAD | wc -l").first
|
69
|
-
end
|
70
|
-
|
71
|
-
def config
|
72
|
-
@config
|
73
|
-
end
|
74
|
-
|
75
|
-
def no_auto_correct!
|
76
|
-
@config[:auto_correct] = false
|
77
|
-
end
|
78
|
-
|
79
|
-
def auto_correct!
|
80
|
-
@config[:auto_correct] = true
|
81
|
-
end
|
82
|
-
|
83
|
-
def load_config
|
84
|
-
yield @store
|
85
|
-
rescue RuboCop::Error => e
|
86
|
-
say_abort "[Config:RuboCop] #{e}"
|
87
|
-
rescue TypeError => e
|
88
|
-
say_abort "[Config:Type] #{e}"
|
89
|
-
rescue Psych::SyntaxError => e
|
90
|
-
say_abort "[Config:Syntax] #{e}"
|
91
|
-
end
|
92
|
-
|
93
|
-
def lint_mode!
|
94
|
-
no_auto_correct!
|
95
|
-
load_untracked!
|
96
|
-
end
|
97
|
-
|
98
|
-
def git_version
|
99
|
-
cmd("git --version").last.split(/\s+/, 3).last
|
100
|
-
end
|
101
|
-
|
102
|
-
def ruby_version
|
103
|
-
RbConfig::CONFIG["ruby_version"] || "<unknown>"
|
104
|
-
end
|
105
|
-
|
106
|
-
def current_os
|
107
|
-
RbConfig::CONFIG["host_os"] || "<unknown>"
|
108
|
-
end
|
11
|
+
alias test? test
|
109
12
|
|
110
13
|
def global_enable!
|
111
14
|
@global_enable = true
|
@@ -115,110 +18,16 @@ module Rfix
|
|
115
18
|
@global_enable
|
116
19
|
end
|
117
20
|
|
118
|
-
def store
|
119
|
-
@store
|
120
|
-
end
|
121
|
-
|
122
|
-
def clear_cache!
|
123
|
-
RuboCop::ResultCache.cleanup(@store, true)
|
124
|
-
end
|
125
|
-
|
126
|
-
def init!
|
127
|
-
@files ||= {}
|
128
|
-
@global_enable = false
|
129
|
-
@debug = false
|
130
|
-
@config = {
|
131
|
-
force_exclusion: true,
|
132
|
-
formatters: ["Rfix::Formatter"]
|
133
|
-
}
|
134
|
-
|
135
|
-
@store = RuboCop::ConfigStore.new
|
136
|
-
auto_correct!
|
137
|
-
end
|
138
|
-
|
139
|
-
def files
|
140
|
-
@files.values
|
141
|
-
end
|
142
|
-
|
143
|
-
def spin
|
144
|
-
@spin ||= CLI::UI::SpinGroup.new
|
145
|
-
end
|
146
|
-
|
147
|
-
def paths
|
148
|
-
@files.keys
|
149
|
-
end
|
150
|
-
|
151
|
-
def root_dir
|
152
|
-
@root_dir ||= git("rev-parse", "--show-toplevel").first
|
153
|
-
end
|
154
|
-
|
155
21
|
def refresh!(source)
|
156
|
-
@files[source.file_path]&.refresh!
|
157
|
-
end
|
158
|
-
|
159
|
-
def enabled?(path, line)
|
160
22
|
return true if global_enable?
|
161
23
|
|
162
|
-
|
163
|
-
end
|
164
|
-
|
165
|
-
def to_relative(path:)
|
166
|
-
Pathname.new(path).relative_path_from(Pathname.new(root_dir)).to_s
|
167
|
-
rescue ArgumentError
|
168
|
-
path
|
169
|
-
end
|
170
|
-
|
171
|
-
def load_untracked!
|
172
|
-
cached(list_untrack_files.map do |path|
|
173
|
-
UntrackedFile.new(path, nil, root_dir)
|
174
|
-
end.select(&:file?).to_set)
|
175
|
-
end
|
176
|
-
|
177
|
-
def load_tracked!(reference)
|
178
|
-
cached(git("log", "--name-only", "--pretty=format:", *params, "#{reference}...HEAD").map do |path|
|
179
|
-
TrackedFile.new(path, reference, root_dir)
|
180
|
-
end.select(&:file?).to_set)
|
181
|
-
end
|
182
|
-
|
183
|
-
def has_branch?(name)
|
184
|
-
cmd_succeeded?("git", "cat-file", "-t", name)
|
185
|
-
end
|
186
|
-
|
187
|
-
# Ref since last push
|
188
|
-
def ref_since_push
|
189
|
-
git("rev-parse", "--abbrev-ref", "--symbolic-full-name", "@{u}") do
|
190
|
-
[ref_since_origin]
|
191
|
-
end.first
|
192
|
-
end
|
193
|
-
|
194
|
-
# Original branch, usually master
|
195
|
-
def ref_since_origin
|
196
|
-
git("show-branch", "--merge-base").first
|
24
|
+
repo.refresh!(source.file_path)
|
197
25
|
end
|
198
26
|
|
199
|
-
|
200
|
-
|
201
|
-
def old?
|
202
|
-
# For version 0.80.x .. 0.83.x:
|
203
|
-
# Otherwise it will exit with status code = 1
|
204
|
-
(0.80..0.83).include?(RuboCop::Version::STRING.to_f)
|
205
|
-
end
|
206
|
-
|
207
|
-
def get_file(path, &block)
|
208
|
-
if file = @files[path]
|
209
|
-
block.call(file)
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
def list_untrack_files
|
214
|
-
git("ls-files", "--exclude-standard", "--others")
|
215
|
-
end
|
27
|
+
def enabled?(path, line)
|
28
|
+
return true if global_enable?
|
216
29
|
|
217
|
-
|
218
|
-
@files ||= {}
|
219
|
-
files.each do |file|
|
220
|
-
@files[file.path] = file
|
221
|
-
end
|
30
|
+
repo.include?(path, line)
|
222
31
|
end
|
223
32
|
end
|
224
33
|
|