Show "Create Merge Request" widget for push events to fork projects on the source project
This commit is contained in:
parent
02591b0430
commit
cfe512d6e9
5 changed files with 64 additions and 12 deletions
|
@ -5,6 +5,9 @@ v 8.12.0 (unreleased)
|
|||
- Optimistic locking for Issues and Merge Requests (title and description overriding prevention)
|
||||
- Added tests for diff notes
|
||||
|
||||
v 8.11.2 (unreleased)
|
||||
- Show "Create Merge Request" widget for push events to fork projects on the source project
|
||||
|
||||
v 8.11.1 (unreleased)
|
||||
- Fix file links on project page when default view is Files !5933
|
||||
|
||||
|
|
|
@ -116,6 +116,17 @@ module ProjectsHelper
|
|||
license.nickname || license.name
|
||||
end
|
||||
|
||||
def last_push_event
|
||||
return unless current_user
|
||||
|
||||
project_ids = [@project.id]
|
||||
if fork = current_user.fork_of(@project)
|
||||
project_ids << fork.id
|
||||
end
|
||||
|
||||
current_user.recent_push(project_ids)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def get_project_nav_tabs(project, current_user)
|
||||
|
@ -351,16 +362,6 @@ module ProjectsHelper
|
|||
namespace_project_new_blob_path(@project.namespace, @project, tree_join(ref), file_name: 'LICENSE')
|
||||
end
|
||||
|
||||
def last_push_event
|
||||
return unless current_user
|
||||
|
||||
if fork = current_user.fork_of(@project)
|
||||
current_user.recent_push(fork.id)
|
||||
else
|
||||
current_user.recent_push(@project.id)
|
||||
end
|
||||
end
|
||||
|
||||
def readme_cache_key
|
||||
sha = @project.commit.try(:sha) || 'nil'
|
||||
[@project.path_with_namespace, sha, "readme"].join('-')
|
||||
|
|
|
@ -489,10 +489,10 @@ class User < ActiveRecord::Base
|
|||
(personal_projects.count.to_f / projects_limit) * 100
|
||||
end
|
||||
|
||||
def recent_push(project_id = nil)
|
||||
def recent_push(project_ids = nil)
|
||||
# Get push events not earlier than 2 hours ago
|
||||
events = recent_events.code_push.where("created_at > ?", Time.now - 2.hours)
|
||||
events = events.where(project_id: project_id) if project_id
|
||||
events = events.where(project_id: project_ids) if project_ids
|
||||
|
||||
# Use the latest event that has not been pushed or merged recently
|
||||
events.recent.find do |event|
|
||||
|
|
|
@ -136,4 +136,42 @@ describe ProjectsHelper do
|
|||
expect(sanitize_repo_path(project, import_error)).to eq('Could not clone [REPOS PATH]/namespace/test.git')
|
||||
end
|
||||
end
|
||||
|
||||
describe '#last_push_event' do
|
||||
let(:user) { double(:user, fork_of: nil) }
|
||||
let(:project) { double(:project, id: 1) }
|
||||
|
||||
before do
|
||||
allow(helper).to receive(:current_user).and_return(user)
|
||||
helper.instance_variable_set(:@project, project)
|
||||
end
|
||||
|
||||
context 'when there is no current_user' do
|
||||
let(:user) { nil }
|
||||
|
||||
it 'returns nil' do
|
||||
expect(helper.last_push_event).to eq(nil)
|
||||
end
|
||||
end
|
||||
|
||||
it 'returns recent push on the current project' do
|
||||
event = double(:event)
|
||||
expect(user).to receive(:recent_push).with([project.id]).and_return(event)
|
||||
|
||||
expect(helper.last_push_event).to eq(event)
|
||||
end
|
||||
|
||||
context 'when current user has a fork of the current project' do
|
||||
let(:fork) { double(:fork, id: 2) }
|
||||
|
||||
it 'returns recent push considering fork events' do
|
||||
expect(user).to receive(:fork_of).with(project).and_return(fork)
|
||||
|
||||
event_on_fork = double(:event)
|
||||
expect(user).to receive(:recent_push).with([project.id, fork.id]).and_return(event_on_fork)
|
||||
|
||||
expect(helper.last_push_event).to eq(event_on_fork)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -920,6 +920,16 @@ describe User, models: true do
|
|||
|
||||
expect(subject.recent_push).to eq(nil)
|
||||
end
|
||||
|
||||
it "includes push events on any of the provided projects" do
|
||||
expect(subject.recent_push(project1)).to eq(nil)
|
||||
expect(subject.recent_push(project2)).to eq(push_event)
|
||||
|
||||
push_data1 = Gitlab::DataBuilder::Push.build_sample(project1, subject)
|
||||
push_event1 = create(:event, action: Event::PUSHED, project: project1, target: project1, author: subject, data: push_data1)
|
||||
|
||||
expect(subject.recent_push([project1, project2])).to eq(push_event1) # Newest
|
||||
end
|
||||
end
|
||||
|
||||
describe '#authorized_groups' do
|
||||
|
|
Loading…
Reference in a new issue