Commit 87cf5b70 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Fix GitPush service

Signed-off-by: default avatarDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
parent 1302dc8f
...@@ -17,39 +17,38 @@ class GitPushService ...@@ -17,39 +17,38 @@ class GitPushService
def execute(project, user, oldrev, newrev, ref) def execute(project, user, oldrev, newrev, ref)
@project, @user = project, user @project, @user = project, user
# Collect data for this git push
@push_commits = project.repository.commits_between(oldrev, newrev)
@push_data = post_receive_data(oldrev, newrev, ref)
create_push_event
project.ensure_satellite_exists project.ensure_satellite_exists
project.repository.expire_cache project.repository.expire_cache
project.update_repository_size project.update_repository_size
if push_to_existing_branch?(ref, oldrev)
project.update_merge_requests(oldrev, newrev, ref, @user)
process_commit_messages(ref)
end
if push_to_branch?(ref) if push_to_branch?(ref)
project.execute_hooks(@push_data.dup, :push_hooks) if push_to_existing_branch?(ref, oldrev)
project.execute_services(@push_data.dup) # Collect data for this git push
end @push_commits = project.repository.commits_between(oldrev, newrev)
project.update_merge_requests(oldrev, newrev, ref, @user)
process_commit_messages(ref)
elsif push_to_new_branch?(ref, oldrev)
# Re-find the pushed commits.
if is_default_branch?(ref)
# Initial push to the default branch. Take the full history of that branch as "newly pushed".
@push_commits = project.repository.commits(newrev)
else
# Use the pushed commits that aren't reachable by the default branch
# as a heuristic. This may include more commits than are actually pushed, but
# that shouldn't matter because we check for existing cross-references later.
@push_commits = project.repository.commits_between(project.default_branch, newrev)
end
if push_to_new_branch?(ref, oldrev) process_commit_messages(ref)
# Re-find the pushed commits.
if is_default_branch?(ref) elsif push_remove_branch_branch?(ref, newrev)
# Initial push to the default branch. Take the full history of that branch as "newly pushed". @push_commits = []
@push_commits = project.repository.commits(newrev)
else
# Use the pushed commits that aren't reachable by the default branch
# as a heuristic. This may include more commits than are actually pushed, but
# that shouldn't matter because we check for existing cross-references later.
@push_commits = project.repository.commits_between(project.default_branch, newrev)
end end
process_commit_messages(ref) @push_data = post_receive_data(oldrev, newrev, ref)
create_push_event(@push_data)
project.execute_hooks(@push_data.dup, :push_hooks)
project.execute_services(@push_data.dup)
end end
end end
...@@ -65,7 +64,7 @@ class GitPushService ...@@ -65,7 +64,7 @@ class GitPushService
protected protected
def create_push_event def create_push_event(push_data)
Event.create!( Event.create!(
project: project, project: project,
action: Event::PUSHED, action: Event::PUSHED,
...@@ -179,6 +178,12 @@ class GitPushService ...@@ -179,6 +178,12 @@ class GitPushService
ref_parts[1] =~ /heads/ && oldrev == "0000000000000000000000000000000000000000" ref_parts[1] =~ /heads/ && oldrev == "0000000000000000000000000000000000000000"
end end
def push_remove_branch? ref, newrev
ref_parts = ref.split('/')
ref_parts[1] =~ /heads/ && newrev == "0000000000000000000000000000000000000000"
end
def push_to_branch? ref def push_to_branch? ref
ref =~ /refs\/heads/ ref =~ /refs\/heads/
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