Refactor Ci::Commit and Ci::Build to have all builds for same :sha on single page
This makes Ci::Commit to have only :sha and simplifies routing to have only :sha in path. The :ref and :push_data is now parameter of Ci::Build.
All commit related data (git author, message and .gitlab-ci.yml) is read directly from repository.
All code related for creating builds is moved to CreateBuildsService.
Status deduction is rewritten to make if more efficient and easier to integrate with Commit Status API.
This is partially working, tests are not yet touched.
This slightly changes view of Commit:

@dzaporozhets What do you think?
See merge request !1502
This class method can be used in "describe" blocks to specify the
subject of a benchmark. This lets you write:
benchmark_subject { Foo }
instead of:
benchmark_subject { -> { Foo } }
This benchmark suite uses benchmark-ips
(https://github.com/evanphx/benchmark-ips) behind the scenes. Specs can
be turned into benchmark specs by setting "benchmark" to "true" in the
top-level describe block like so:
describe SomeClass, benchmark: true do
end
Writing benchmarks can be done using custom RSpec matchers, for example:
describe MaruTheCat, benchmark: true do
describe '#jump_in_box' do
it 'should run 1000 iterations per second' do
maru = described_class.new
expect { maru.jump_in_box }.to iterate_per_second(1000)
end
end
end
By default the "iterate_per_second" expectation requires a standard
deviation under 30% (this is just an arbitrary default for now). You can
change this by chaining "with_maximum_stddev" on the expectation:
expect { maru.jump_in_box }.to iterate_per_second(1000)
.with_maximum_stddev(10)
This will change the expectation to require a maximum deviation of 10%.
Alternatively you can use the it block style to write specs:
describe MaruTheCat, benchmark: true do
describe '#jump_in_box' do
subject { -> { described_class.new } }
it { is_expected.to iterate_per_second(1000) }
end
end
Because "iterate_per_second" operates on a block, opposed to a static
value, the "subject" method must return a Proc. This looks a bit goofy
but I have been unable to find a nice way around this.
If this directory were to be empty this would result in warnings being
printed to STDERR, cluttering spec output. Doing this in Ruby fixes this
problem (and also removes the need for shell alltogether).
Speed up security feature specs
Before: `rspec spec/features/security/ 0.12s user 0.04s system 0% cpu 3:38.00 total`
After: `rspec spec/features/security/ 0.12s user 0.04s system 0% cpu 1:40.58 total`
The majority of the speed improvements is from two things:
1. Instead of using our standard `login_as` helper in the matchers, we take advantage
of the `Warden::Test::Helpers` version of the method which bypasses the login form
and logs the user in directly. We were essentially testing that filling out the login
form works hundreds of times.
2. There were many tests that verified if a user of a certain access level
(master, owner, reporter, guest) had access to a resource. Unfortunately we were
creating every type of user for each test even though a test was only verifying one of
them at a time. Now the tests only create the one user role they're testing.
See merge request !1023
Move coverage-related setup back to spec_helper
These tools must be loaded before our regular Rails environment.
Partially reverts 57830201a9
See merge request !976