rfix 1.0.7.pre.67 → 1.0.15

Sign up to get free protection for your applications and to get access to all the features.
@@ -13,11 +13,13 @@ module Rfix::Log
13
13
  end
14
14
 
15
15
  def say_error_sub(message)
16
- CLI::UI.puts("#{message}")
16
+ CLI::UI.puts(message.to_s)
17
17
  end
18
18
 
19
19
  def say_debug(message)
20
- CLI::UI.puts("{{*}} #{message}")
20
+ if Rfix.debug?
21
+ CLI::UI.puts("{{*}} [{{info:Debug}}] #{message}")
22
+ end
21
23
  end
22
24
 
23
25
  def say_abort(message)
@@ -0,0 +1,56 @@
1
+ require "tmpdir"
2
+
3
+ module RakeHelper
4
+ include Rfix::Log
5
+ include Rfix::Cmd
6
+ include Rfix::GitHelper
7
+
8
+ def dirty?
9
+ !cmd_succeeded?("git diff --quiet")
10
+ end
11
+
12
+ def clone(github:, ref:)
13
+ Dir.mktmpdir(github.split("/")) do |src|
14
+ say "Clone {{info:#{github}}}, hold on ..."
15
+ git("clone", "https://github.com/#{github}", src)
16
+ Dir.chdir(src) do
17
+ say "Check out {{info:#{ref}}}"
18
+ git("reset", "--hard", ref)
19
+ git("clean", "-f", "-d")
20
+ end
21
+
22
+ dest = File.join("vendor", github)
23
+ say "Copy files to {{info:#{dest}}}"
24
+ FileUtils.mkdir_p(dest)
25
+ FileUtils.copy_entry(src, dest, true, true, true)
26
+ end
27
+ end
28
+
29
+ def gemfiles
30
+ Dir.glob("ci/Gemfile*").unshift("Gemfile").reject do |path|
31
+ [".lock", ".base"].include?(File.extname(path))
32
+ end
33
+ end
34
+
35
+ def gemlocks
36
+ Dir.glob("ci/Gemfile*.lock").unshift("Gemfile.lock")
37
+ end
38
+
39
+ def source_for(name:)
40
+ bundle_root = Bundler.bundle_path.join('bundler/gems')
41
+ path = Dir.glob(bundle_root.join("#{name}-*").to_s).first
42
+ path or raise "Could not find source for #{name}, run bundle install first"
43
+ end
44
+
45
+ def dest_for(name:)
46
+ File.join(__dir__, 'vendor', name)
47
+ end
48
+
49
+ def osx?
50
+ ENV.fetch("TRAVIS_OS_NAME") == "osx"
51
+ end
52
+
53
+ def brew_url(ref:)
54
+ "https://raw.githubusercontent.com/Homebrew/homebrew-core/#{ref}/Formula/git.rb"
55
+ end
56
+ end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # rubocop:disable Layout/LineLength
4
+
3
5
  require "rubocop"
4
6
  require "optparse"
5
7
  require "rbconfig"
@@ -13,36 +15,83 @@ module Rfix
13
15
  include GitHelper
14
16
  include Log
15
17
 
16
- def config
17
- @config
18
+ def indent
19
+ " " * 2
18
20
  end
19
21
 
20
- def set_fail_level(lint)
21
- if
22
- if lint
23
- else
24
- @config[:fail_level] = :warning
25
- end
26
- end
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
27
73
  end
28
74
 
29
75
  def no_auto_correct!
30
76
  @config[:auto_correct] = false
31
77
  end
32
78
 
79
+ def auto_correct!
80
+ @config[:auto_correct] = true
81
+ end
82
+
33
83
  def load_config
34
- yield
84
+ yield @store
35
85
  rescue RuboCop::Error => e
36
- say_abort "[Config] #{e}"
86
+ say_abort "[Config:RuboCop] #{e}"
37
87
  rescue TypeError => e
38
- say_abort "[Config] #{e}"
88
+ say_abort "[Config:Type] #{e}"
89
+ rescue Psych::SyntaxError => e
90
+ say_abort "[Config:Syntax] #{e}"
39
91
  end
40
92
 
41
93
  def lint_mode!
42
- @config[:auto_correct] = false
43
- if old?
44
- @config[:fail_level] = :warning
45
- end
94
+ no_auto_correct!
46
95
  load_untracked!
47
96
  end
48
97
 
@@ -66,19 +115,25 @@ module Rfix
66
115
  @global_enable
67
116
  end
68
117
 
118
+ def store
119
+ @store
120
+ end
121
+
122
+ def clear_cache!
123
+ RuboCop::ResultCache.cleanup(@store, true)
124
+ end
125
+
69
126
  def init!
70
127
  @files ||= {}
71
128
  @global_enable = false
129
+ @debug = false
72
130
  @config = {
73
- color: true,
74
131
  force_exclusion: true,
75
- auto_correct: true,
76
132
  formatters: ["Rfix::Formatter"]
77
133
  }
78
134
 
79
- if old?
80
- @config[:fail_level] = :autocorrect
81
- end
135
+ @store = RuboCop::ConfigStore.new
136
+ auto_correct!
82
137
  end
83
138
 
84
139
  def files
@@ -120,13 +175,13 @@ module Rfix
120
175
  end
121
176
 
122
177
  def load_tracked!(reference)
123
- cached(git("log", "--name-only", "--pretty=format:", *params, "#{reference}..HEAD").map do |path|
178
+ cached(git("log", "--name-only", "--pretty=format:", *params, "#{reference}...HEAD").map do |path|
124
179
  TrackedFile.new(path, reference, root_dir)
125
180
  end.select(&:file?).to_set)
126
181
  end
127
182
 
128
183
  def has_branch?(name)
129
- Open3.capture2e("git", "cat-file", "-t", name).last.success?
184
+ cmd_succeeded?("git", "cat-file", "-t", name)
130
185
  end
131
186
 
132
187
  # Ref since last push
@@ -156,9 +211,7 @@ module Rfix
156
211
  end
157
212
 
158
213
  def list_untrack_files
159
- git("status", "-u", "--porcelain", "--no-column").map do |line|
160
- line.split(" ", 2).map(&:strip)
161
- end.select { |el| el.first == "??" }.map(&:last)
214
+ git("ls-files", "--exclude-standard", "--others")
162
215
  end
163
216
 
164
217
  def cached(files)
@@ -168,3 +221,5 @@ module Rfix
168
221
  end
169
222
  end
170
223
  end
224
+
225
+ # rubocop:enable Layout/LineLength
@@ -4,7 +4,7 @@ require "rfix/git_file"
4
4
 
5
5
  class Rfix::TrackedFile < Rfix::GitFile
6
6
  def refresh!
7
- @ranges = git("--no-pager", "diff", *params, ref, path)
7
+ @ranges = git("--no-pager", "diff", *params, "#{ref}...HEAD", path)
8
8
  .grep(/^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@/) do
9
9
  Regexp.last_match(1).to_i...(Regexp.last_match(1).to_i + (Regexp.last_match(2) || 1).to_i)
10
10
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rfix
4
- VERSION = "1.0.7"
4
+ VERSION = "1.0.15"
5
5
  end
Binary file
@@ -2,8 +2,11 @@
2
2
 
3
3
  require "pathname"
4
4
  require_relative "lib/rfix/version"
5
+ # require_relative "lib/rfix/gem_helper"
5
6
 
6
7
  Gem::Specification.new do |spec|
8
+ # extend GemHelper
9
+
7
10
  spec.name = "rfix"
8
11
 
9
12
  if ENV["TRAVIS"]
@@ -17,18 +20,16 @@ Gem::Specification.new do |spec|
17
20
  spec.authors = ["Linus Oleander"]
18
21
  spec.email = ["linus@oleander.nu"]
19
22
 
20
- spec.summary = "RuboCop CLI that only complains about your latest changes"
23
+ # rubocop:disable Layout/LineLength
24
+ spec.summary = "RuboCop CLI that only lints and auto-fixes code you committed by utilizing `git-log` and `git-diff`"
25
+ # rubocop:enable Layout/LineLength
26
+
21
27
  spec.description = <<~TEXT
22
- #{spec.summary}
23
- Uses 'git diff' to determine what changes were made then runs RuboCop against them
28
+ RuboCop CLI that only lints and auto-fixes code you committed by utilizing `git-log` and `git-diff`. Rfix CLI makes it possible to lint (`rfix lint`) and auto-fix (`rfix local|origin|branch`) code changes since a certain point in history. You can auto-fix code committed since creating the current branch (`rfix origin`) or since pushing to upstream (`rfix local`).
24
29
 
25
- $ rfix branch <branch> -- Fix changes made between HEAD and <branch>
26
- $ rfix origin -- Fix changes made between HEAD and origin branch
27
- $ rfix local -- Fix changes not yet pushed to upstream branch
28
- $ rfix info -- Display runtime dependencies and their versions
29
- $ rfix all -- Fix all files in this repository (not recommended)
30
+ Includes a RuboCop formatter with syntax highlighting and build in hyperlinks for offense documentation.
30
31
 
31
- Optional args: --dry --help --list-files --limit-files --config --untracked
32
+ Holds the same CLI arguments as RuboCop. Run `rfix --help` for a complete list or `rfix` for supported commands.
32
33
  TEXT
33
34
  spec.homepage = "https://github.com/oleander/rfix-rb"
34
35
  spec.license = "MIT"
@@ -42,15 +43,19 @@ Gem::Specification.new do |spec|
42
43
  `git ls-files -z`.split("\x0").reject(&validate_file)
43
44
  end
44
45
 
45
- spec.files += Dir.glob("vendor/cli-ui/lib/**/*").reject(&validate_file)
46
+ spec.files += Dir.glob("vendor/shopify/cli-ui/lib/**/*").reject(&validate_file)
46
47
 
47
48
  spec.bindir = "exe"
48
49
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
49
- spec.require_paths = ["lib", "vendor/cli-ui/lib"]
50
+ spec.require_paths = ["lib", "vendor/shopify/cli-ui/lib"]
50
51
 
51
52
  spec.requirements << "git, v2.0+"
52
53
 
53
54
  spec.add_runtime_dependency "rainbow", "~> 3.0"
54
55
  spec.add_runtime_dependency "rouge", "~> 3.20"
55
- spec.add_runtime_dependency "rubocop", "~> 0.80"
56
+ spec.add_runtime_dependency "rubocop", ">= 0.80"
57
+
58
+ spec.add_development_dependency "rspec", "~> 3.0"
59
+ spec.add_development_dependency "aruba", "~> 1.0"
60
+ spec.add_development_dependency "rake", "~> 12.3"
56
61
  end
metadata CHANGED
@@ -1,11 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rfix
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.7.pre.67
4
+ version: 1.0.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Linus Oleander
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
11
  date: 2020-06-21 00:00:00.000000000 Z
@@ -42,24 +42,64 @@ dependencies:
42
42
  name: rubocop
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0.80'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.80'
55
- description: "RuboCop CLI that only complains about your latest changes\nUses 'git
56
- diff' to determine what changes were made then runs RuboCop against them\n\n\t$
57
- rfix branch <branch> -- Fix changes made between HEAD and <branch>\n\t$ rfix origin
58
- \ -- Fix changes made between HEAD and origin branch\n\t$ rfix local --
59
- Fix changes not yet pushed to upstream branch\n\t$ rfix info -- Display
60
- runtime dependencies and their versions\n\t$ rfix all -- Fix all files
61
- in this repository (not recommended)\n\nOptional args: --dry --help --list-files
62
- --limit-files --config --untracked\n"
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: aruba
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '12.3'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '12.3'
97
+ description: |
98
+ RuboCop CLI that only lints and auto-fixes code you committed by utilizing `git-log` and `git-diff`. Rfix CLI makes it possible to lint (`rfix lint`) and auto-fix (`rfix local|origin|branch`) code changes since a certain point in history. You can auto-fix code committed since creating the current branch (`rfix origin`) or since pushing to upstream (`rfix local`).
99
+
100
+ Includes a RuboCop formatter with syntax highlighting and build in hyperlinks for offense documentation.
101
+
102
+ Holds the same CLI arguments as RuboCop. Run `rfix --help` for a complete list or `rfix` for supported commands.
63
103
  email:
64
104
  - linus@oleander.nu
65
105
  executables:
@@ -72,12 +112,19 @@ files:
72
112
  - ".rubocop.yml"
73
113
  - ".travis.yml"
74
114
  - Gemfile
115
+ - Gemfile.base
75
116
  - Gemfile.lock
76
117
  - Guardfile
77
118
  - LICENSE.txt
119
+ - Makefile
78
120
  - README.md
79
121
  - Rakefile
122
+ - bin/bundle
80
123
  - bin/console
124
+ - bin/guard
125
+ - bin/rake
126
+ - bin/rfix
127
+ - bin/rspec
81
128
  - bin/setup
82
129
  - ci/Gemfile.rubocop-0.80
83
130
  - ci/Gemfile.rubocop-0.80.lock
@@ -94,54 +141,58 @@ files:
94
141
  - ci/Gemfile.rubocop-0.85.1.lock
95
142
  - ci/Gemfile.rubocop-0.85.lock
96
143
  - exe/rfix
144
+ - file.rb
97
145
  - lib/rfix.rb
98
146
  - lib/rfix/cmd.rb
99
147
  - lib/rfix/extensions/extensions.rb
100
148
  - lib/rfix/extensions/offense.rb
101
149
  - lib/rfix/formatter.rb
150
+ - lib/rfix/gem_helper.rb
102
151
  - lib/rfix/git_file.rb
103
152
  - lib/rfix/git_helper.rb
104
153
  - lib/rfix/log.rb
154
+ - lib/rfix/rake_helper.rb
105
155
  - lib/rfix/rfix.rb
106
156
  - lib/rfix/tracked_file.rb
107
157
  - lib/rfix/untracked_file.rb
108
158
  - lib/rfix/version.rb
159
+ - resources/ps.png
109
160
  - rfix.gemspec
110
- - vendor/cli-ui/lib/cli/ui.rb
111
- - vendor/cli-ui/lib/cli/ui/ansi.rb
112
- - vendor/cli-ui/lib/cli/ui/color.rb
113
- - vendor/cli-ui/lib/cli/ui/formatter.rb
114
- - vendor/cli-ui/lib/cli/ui/frame.rb
115
- - vendor/cli-ui/lib/cli/ui/frame/frame_stack.rb
116
- - vendor/cli-ui/lib/cli/ui/frame/frame_style.rb
117
- - vendor/cli-ui/lib/cli/ui/frame/frame_style/box.rb
118
- - vendor/cli-ui/lib/cli/ui/frame/frame_style/bracket.rb
119
- - vendor/cli-ui/lib/cli/ui/glyph.rb
120
- - vendor/cli-ui/lib/cli/ui/printer.rb
121
- - vendor/cli-ui/lib/cli/ui/progress.rb
122
- - vendor/cli-ui/lib/cli/ui/prompt.rb
123
- - vendor/cli-ui/lib/cli/ui/prompt/interactive_options.rb
124
- - vendor/cli-ui/lib/cli/ui/prompt/options_handler.rb
125
- - vendor/cli-ui/lib/cli/ui/spinner.rb
126
- - vendor/cli-ui/lib/cli/ui/spinner/async.rb
127
- - vendor/cli-ui/lib/cli/ui/spinner/spin_group.rb
128
- - vendor/cli-ui/lib/cli/ui/stdout_router.rb
129
- - vendor/cli-ui/lib/cli/ui/terminal.rb
130
- - vendor/cli-ui/lib/cli/ui/truncater.rb
131
- - vendor/cli-ui/lib/cli/ui/version.rb
132
- - vendor/cli-ui/lib/cli/ui/widgets.rb
133
- - vendor/cli-ui/lib/cli/ui/widgets/base.rb
134
- - vendor/cli-ui/lib/cli/ui/widgets/status.rb
161
+ - vendor/shopify/cli-ui/lib/cli/ui.rb
162
+ - vendor/shopify/cli-ui/lib/cli/ui/ansi.rb
163
+ - vendor/shopify/cli-ui/lib/cli/ui/color.rb
164
+ - vendor/shopify/cli-ui/lib/cli/ui/formatter.rb
165
+ - vendor/shopify/cli-ui/lib/cli/ui/frame.rb
166
+ - vendor/shopify/cli-ui/lib/cli/ui/frame/frame_stack.rb
167
+ - vendor/shopify/cli-ui/lib/cli/ui/frame/frame_style.rb
168
+ - vendor/shopify/cli-ui/lib/cli/ui/frame/frame_style/box.rb
169
+ - vendor/shopify/cli-ui/lib/cli/ui/frame/frame_style/bracket.rb
170
+ - vendor/shopify/cli-ui/lib/cli/ui/glyph.rb
171
+ - vendor/shopify/cli-ui/lib/cli/ui/printer.rb
172
+ - vendor/shopify/cli-ui/lib/cli/ui/progress.rb
173
+ - vendor/shopify/cli-ui/lib/cli/ui/prompt.rb
174
+ - vendor/shopify/cli-ui/lib/cli/ui/prompt/interactive_options.rb
175
+ - vendor/shopify/cli-ui/lib/cli/ui/prompt/options_handler.rb
176
+ - vendor/shopify/cli-ui/lib/cli/ui/spinner.rb
177
+ - vendor/shopify/cli-ui/lib/cli/ui/spinner/async.rb
178
+ - vendor/shopify/cli-ui/lib/cli/ui/spinner/spin_group.rb
179
+ - vendor/shopify/cli-ui/lib/cli/ui/stdout_router.rb
180
+ - vendor/shopify/cli-ui/lib/cli/ui/terminal.rb
181
+ - vendor/shopify/cli-ui/lib/cli/ui/truncater.rb
182
+ - vendor/shopify/cli-ui/lib/cli/ui/version.rb
183
+ - vendor/shopify/cli-ui/lib/cli/ui/widgets.rb
184
+ - vendor/shopify/cli-ui/lib/cli/ui/widgets/base.rb
185
+ - vendor/shopify/cli-ui/lib/cli/ui/widgets/status.rb
135
186
  homepage: https://github.com/oleander/rfix-rb
136
187
  licenses:
137
188
  - MIT
138
189
  metadata:
139
190
  homepage_uri: https://github.com/oleander/rfix-rb
140
- post_install_message:
191
+ post_install_message:
141
192
  rdoc_options: []
142
193
  require_paths:
143
194
  - lib
144
- - vendor/cli-ui/lib
195
+ - vendor/shopify/cli-ui/lib
145
196
  required_ruby_version: !ruby/object:Gem::Requirement
146
197
  requirements:
147
198
  - - ">="
@@ -149,13 +200,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
149
200
  version: 2.5.0
150
201
  required_rubygems_version: !ruby/object:Gem::Requirement
151
202
  requirements:
152
- - - ">"
203
+ - - ">="
153
204
  - !ruby/object:Gem::Version
154
- version: 1.3.1
205
+ version: '0'
155
206
  requirements:
156
207
  - git, v2.0+
157
- rubygems_version: 3.0.3
158
- signing_key:
208
+ rubygems_version: 3.1.4
209
+ signing_key:
159
210
  specification_version: 4
160
- summary: RuboCop CLI that only complains about your latest changes
211
+ summary: RuboCop CLI that only lints and auto-fixes code you committed by utilizing
212
+ `git-log` and `git-diff`
161
213
  test_files: []