Skip to content
Snippets Groups Projects
Commit 99404a58 authored by YarNayar's avatar YarNayar
Browse files

Search feature: redirects to commit page if query is commit sha and only commit found

See !8028 and #24833
parent dd3ddcd7
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -45,6 +45,8 @@ class SearchController < ApplicationController
end
 
@search_objects = @search_results.objects(@scope, params[:page])
check_single_commit_result
end
 
def autocomplete
Loading
Loading
@@ -59,4 +61,16 @@ class SearchController < ApplicationController
 
render json: search_autocomplete_opts(term).to_json
end
private
def check_single_commit_result
if @search_results.single_commit_result?
only_commit = @search_results.objects('commits').first
query = params[:search].strip.downcase
found_by_commit_sha = Commit.valid_hash?(query) && only_commit.sha.start_with?(query)
redirect_to namespace_project_commit_path(@project.namespace, @project, only_commit) if found_by_commit_sha
end
end
end
---
title: 'Search feature: redirects to commit page if query is commit sha and only commit
found'
merge_request: 8028
author: YarNayar
Loading
Loading
@@ -71,6 +71,14 @@ module Gitlab
)
end
 
def single_commit_result?
commits_count == 1 && total_result_count == 1
end
def total_result_count
issues_count + merge_requests_count + milestones_count + notes_count + blobs_count + wiki_blobs_count + commits_count
end
private
 
def blobs
Loading
Loading
@@ -122,7 +130,7 @@ module Gitlab
 
commits = find_commits_by_message(query)
commit_by_sha = find_commit_by_sha(query)
commits << commit_by_sha if commit_by_sha && !commits.include?(commit_by_sha)
commits |= [commit_by_sha] if commit_by_sha
commits
end
 
Loading
Loading
Loading
Loading
@@ -43,6 +43,10 @@ module Gitlab
@milestones_count ||= milestones.count
end
 
def single_commit_result?
false
end
private
 
def projects
Loading
Loading
Loading
Loading
@@ -217,6 +217,31 @@ describe "Search", feature: true do
visit search_path(project_id: project.id)
end
 
it 'redirects to commit page when search by sha and only commit found' do
fill_in 'search', with: '6d394385cf567f80a8fd85055db1ab4c5295806f'
click_button 'Search'
expect(page).to have_current_path(namespace_project_commit_path(project.namespace, project, '6d394385cf567f80a8fd85055db1ab4c5295806f'))
end
it 'redirects to single commit regardless of query case' do
fill_in 'search', with: '6D394385cf'
click_button 'Search'
expect(page).to have_current_path(namespace_project_commit_path(project.namespace, project, '6d394385cf567f80a8fd85055db1ab4c5295806f'))
end
it 'holds on /search page when the only commit is found by message' do
create_commit('Message referencing another sha: "deadbeef" ', project, user, 'master')
fill_in 'search', with: 'deadbeef'
click_button 'Search'
expect(page).to have_current_path('/search', only_path: true)
end
it 'shows multiple matching commits' do
fill_in 'search', with: 'See merge request'
 
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment