Skip to content
Snippets Groups Projects
Commit cfe512d6 authored by Paco Guzman's avatar Paco Guzman
Browse files

Show "Create Merge Request" widget for push events to fork projects on the source project

parent 02591b04
No related branches found
No related tags found
1 merge request!5978last_push_event widget considers fork events on the main project
Pipeline #
Loading
@@ -5,6 +5,9 @@ v 8.12.0 (unreleased)
Loading
@@ -5,6 +5,9 @@ v 8.12.0 (unreleased)
- Optimistic locking for Issues and Merge Requests (title and description overriding prevention) - Optimistic locking for Issues and Merge Requests (title and description overriding prevention)
- Added tests for diff notes - 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) v 8.11.1 (unreleased)
- Fix file links on project page when default view is Files !5933 - Fix file links on project page when default view is Files !5933
   
Loading
Loading
Loading
@@ -116,6 +116,17 @@ module ProjectsHelper
Loading
@@ -116,6 +116,17 @@ module ProjectsHelper
license.nickname || license.name license.nickname || license.name
end 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 private
   
def get_project_nav_tabs(project, current_user) def get_project_nav_tabs(project, current_user)
Loading
@@ -351,16 +362,6 @@ module ProjectsHelper
Loading
@@ -351,16 +362,6 @@ module ProjectsHelper
namespace_project_new_blob_path(@project.namespace, @project, tree_join(ref), file_name: 'LICENSE') namespace_project_new_blob_path(@project.namespace, @project, tree_join(ref), file_name: 'LICENSE')
end 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 def readme_cache_key
sha = @project.commit.try(:sha) || 'nil' sha = @project.commit.try(:sha) || 'nil'
[@project.path_with_namespace, sha, "readme"].join('-') [@project.path_with_namespace, sha, "readme"].join('-')
Loading
Loading
Loading
@@ -489,10 +489,10 @@ class User < ActiveRecord::Base
Loading
@@ -489,10 +489,10 @@ class User < ActiveRecord::Base
(personal_projects.count.to_f / projects_limit) * 100 (personal_projects.count.to_f / projects_limit) * 100
end end
   
def recent_push(project_id = nil) def recent_push(project_ids = nil)
# Get push events not earlier than 2 hours ago # Get push events not earlier than 2 hours ago
events = recent_events.code_push.where("created_at > ?", Time.now - 2.hours) 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 # Use the latest event that has not been pushed or merged recently
events.recent.find do |event| events.recent.find do |event|
Loading
Loading
Loading
@@ -136,4 +136,42 @@ describe ProjectsHelper do
Loading
@@ -136,4 +136,42 @@ describe ProjectsHelper do
expect(sanitize_repo_path(project, import_error)).to eq('Could not clone [REPOS PATH]/namespace/test.git') expect(sanitize_repo_path(project, import_error)).to eq('Could not clone [REPOS PATH]/namespace/test.git')
end end
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 end
Loading
@@ -920,6 +920,16 @@ describe User, models: true do
Loading
@@ -920,6 +920,16 @@ describe User, models: true do
   
expect(subject.recent_push).to eq(nil) expect(subject.recent_push).to eq(nil)
end 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 end
   
describe '#authorized_groups' do describe '#authorized_groups' do
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment