GitLab wurde erfolgreich aktualisiert. Dank regelmäßiger Updates bleibt das THM GitLab sicher und Sie profitieren von den neuesten Funktionen. Danke für Ihre Geduld.

Commit e3a6fedb authored by Sean McGivern's avatar Sean McGivern

Merge branch 'postreceive-gl-repository' into 'master'

Use gl_repository exclusively on PostReceive

Closes gitaly#201

See merge request !12290
parents 36e17d0f e7470534
......@@ -2,11 +2,11 @@ class PostReceive
include Sidekiq::Worker
include DedicatedSidekiqQueue
def perform(project_identifier, identifier, changes)
project, is_wiki = parse_project_identifier(project_identifier)
def perform(gl_repository, identifier, changes)
project, is_wiki = Gitlab::GlRepository.parse(gl_repository)
if project.nil?
log("Triggered hook for non-existing project with identifier \"#{project_identifier}\"")
log("Triggered hook for non-existing project with gl_repository \"#{gl_repository}\"")
return false
end
......@@ -59,21 +59,6 @@ def process_wiki_changes(post_received)
# Nothing defined here yet.
end
# To maintain backwards compatibility, we accept both gl_repository or
# repository paths as project identifiers. Our plan is to migrate to
# gl_repository only with the following plan:
# 9.2: Handle both possible values. Keep Gitlab-Shell sending only repo paths
# 9.3 (or patch release): Make GitLab Shell pass gl_repository if present
# 9.4 (or patch release): Make GitLab Shell always pass gl_repository
# 9.5 (or patch release): Handle only gl_repository as project identifier on this method
def parse_project_identifier(project_identifier)
if project_identifier.start_with?('/')
Gitlab::RepoPath.parse(project_identifier)
else
Gitlab::GlRepository.parse(project_identifier)
end
end
def log(message)
Gitlab::GitLogger.error("POST-RECEIVE: #{message}")
end
......
......@@ -4,7 +4,7 @@
let(:changes) { "123456 789012 refs/heads/tést\n654321 210987 refs/tags/tag" }
let(:wrongly_encoded_changes) { changes.encode("ISO-8859-1").force_encoding("UTF-8") }
let(:base64_changes) { Base64.encode64(wrongly_encoded_changes) }
let(:project_identifier) { "project-#{project.id}" }
let(:gl_repository) { "project-#{project.id}" }
let(:key) { create(:key, user: project.owner) }
let(:key_id) { key.shell_id }
......@@ -19,22 +19,14 @@
end
context 'with a non-existing project' do
let(:project_identifier) { "project-123456789" }
let(:gl_repository) { "project-123456789" }
let(:error_message) do
"Triggered hook for non-existing project with identifier \"#{project_identifier}\""
"Triggered hook for non-existing project with gl_repository \"#{gl_repository}\""
end
it "returns false and logs an error" do
expect(Gitlab::GitLogger).to receive(:error).with("POST-RECEIVE: #{error_message}")
expect(described_class.new.perform(project_identifier, key_id, base64_changes)).to be(false)
end
end
context "with an absolute path as the project identifier" do
it "searches the project by full path" do
expect(Project).to receive(:find_by_full_path).with(project.full_path, follow_redirects: true).and_call_original
described_class.new.perform(pwd(project), key_id, base64_changes)
expect(described_class.new.perform(gl_repository, key_id, base64_changes)).to be(false)
end
end
......@@ -49,7 +41,7 @@
it "calls GitTagPushService" do
expect_any_instance_of(GitPushService).to receive(:execute).and_return(true)
expect_any_instance_of(GitTagPushService).not_to receive(:execute)
described_class.new.perform(project_identifier, key_id, base64_changes)
described_class.new.perform(gl_repository, key_id, base64_changes)
end
end
......@@ -59,7 +51,7 @@
it "calls GitTagPushService" do
expect_any_instance_of(GitPushService).not_to receive(:execute)
expect_any_instance_of(GitTagPushService).to receive(:execute).and_return(true)
described_class.new.perform(project_identifier, key_id, base64_changes)
described_class.new.perform(gl_repository, key_id, base64_changes)
end
end
......@@ -69,12 +61,12 @@
it "does not call any of the services" do
expect_any_instance_of(GitPushService).not_to receive(:execute)
expect_any_instance_of(GitTagPushService).not_to receive(:execute)
described_class.new.perform(project_identifier, key_id, base64_changes)
described_class.new.perform(gl_repository, key_id, base64_changes)
end
end
context "gitlab-ci.yml" do
subject { described_class.new.perform(project_identifier, key_id, base64_changes) }
subject { described_class.new.perform(gl_repository, key_id, base64_changes) }
context "creates a Ci::Pipeline for every change" do
before do
......@@ -111,7 +103,7 @@
it 'calls SystemHooksService' do
expect_any_instance_of(SystemHooksService).to receive(:execute_hooks).with(fake_hook_data, :repository_update_hooks).and_return(true)
described_class.new.perform(project_identifier, key_id, base64_changes)
described_class.new.perform(gl_repository, key_id, base64_changes)
end
end
end
......@@ -119,7 +111,7 @@
context "webhook" do
it "fetches the correct project" do
expect(Project).to receive(:find_by).with(id: project.id.to_s)
described_class.new.perform(project_identifier, key_id, base64_changes)
described_class.new.perform(gl_repository, key_id, base64_changes)
end
it "does not run if the author is not in the project" do
......@@ -129,7 +121,7 @@
expect(project).not_to receive(:execute_hooks)
expect(described_class.new.perform(project_identifier, key_id, base64_changes)).to be_falsey
expect(described_class.new.perform(gl_repository, key_id, base64_changes)).to be_falsey
end
it "asks the project to trigger all hooks" do
......@@ -137,18 +129,14 @@
expect(project).to receive(:execute_hooks).twice
expect(project).to receive(:execute_services).twice
described_class.new.perform(project_identifier, key_id, base64_changes)
described_class.new.perform(gl_repository, key_id, base64_changes)
end
it "enqueues a UpdateMergeRequestsWorker job" do
allow(Project).to receive(:find_by).and_return(project)
expect(UpdateMergeRequestsWorker).to receive(:perform_async).with(project.id, project.owner.id, any_args)
described_class.new.perform(project_identifier, key_id, base64_changes)
described_class.new.perform(gl_repository, key_id, base64_changes)
end
end
def pwd(project)
File.join(Gitlab.config.repositories.storages.default['path'], project.path_with_namespace)
end
end
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment