我已经创建了 spec/lint/rubocop_spec.rb,可以在当前分支和主分支之间更改的文件上运行 Rubocop 样式检查器。当我在本地测试时它有效,但是在构建服务器 Circle.ci 上运行测试时无效。
我怀疑这是因为只下载了相关的分支,所以它找不到与主分支之间的任何差异。是否有比 git co master && git pull origin master
更好的方法?
也许我可以查询 Github API 来获取更改的文件列表吗?
require 'spec_helper'
describe 'Check that the files we have changed have correct syntax' do
before do
current_sha = `git rev-parse --verify HEAD`.strip!
files = `git diff master #{current_sha} --name-only | grep .rb`
files.tr!("\n", ' ')
@report = 'nada'
if files.present?
puts "Changed files: #{files}"
@report = `rubocop #{files}`
puts "Report: #{@report}"
end
end
it { @report.match('Offenses').should_not be true }
end
master@{u}
,使得 diff-tree 比较的是已获取的远程分支而不是本地版本(master 通常跟踪 origin/master,但你可能有一个奇怪的设置)。(我认为 git 是一种自动缓存的 github api!) - Tim Digginsgit fetch && git diff-tree -r --no-commit-id --name-only master@\{u\} HEAD | xargs ls -1 2>/dev/null | grep '\.rb$' | xargs bundle exec rubocop
对我有用,因为head
不明确。 - Pakrubocop --force-exclusion
命令会考虑 .rubocop.yml 文件中的排除项。 - Kiryl Plyashkevich