Commit e67574fe77dfb2ed4f6c9ed8ee96ddeef647f2ff
Exists in
master
and in
4 other branches
Merge pull request #4829 from hiroponz/render-not-found-when-failing-to-look-for-commit
Render not found when failing to look for commit
Showing
6 changed files
with
29 additions
and
14 deletions
Show diff stats
app/controllers/projects/network_controller.rb
@@ -8,10 +8,6 @@ class Projects::NetworkController < Projects::ApplicationController | @@ -8,10 +8,6 @@ class Projects::NetworkController < Projects::ApplicationController | ||
8 | before_filter :require_non_empty_project | 8 | before_filter :require_non_empty_project |
9 | 9 | ||
10 | def show | 10 | def show |
11 | - if @options[:q] | ||
12 | - @commit = @project.repository.commit(@options[:q]) || @commit | ||
13 | - end | ||
14 | - | ||
15 | respond_to do |format| | 11 | respond_to do |format| |
16 | format.html | 12 | format.html |
17 | 13 |
app/views/projects/network/_head.html.haml
@@ -4,7 +4,7 @@ | @@ -4,7 +4,7 @@ | ||
4 | .pull-left | 4 | .pull-left |
5 | = form_tag project_network_path(@project, @id), method: :get do |f| | 5 | = form_tag project_network_path(@project, @id), method: :get do |f| |
6 | .control-group | 6 | .control-group |
7 | - = label_tag :filter_ref, "Show only selected ref", class: 'control-label light' | 7 | + = label_tag :filter_ref, "Begin with the selected commit", class: 'control-label light' |
8 | .controls | 8 | .controls |
9 | = check_box_tag :filter_ref, 1, @options[:filter_ref] | 9 | = check_box_tag :filter_ref, 1, @options[:filter_ref] |
10 | - @options.each do |key, value| | 10 | - @options.each do |key, value| |
@@ -15,9 +15,9 @@ | @@ -15,9 +15,9 @@ | ||
15 | .control-group | 15 | .control-group |
16 | = label_tag :search , "Looking for commit:", class: 'control-label light' | 16 | = label_tag :search , "Looking for commit:", class: 'control-label light' |
17 | .controls | 17 | .controls |
18 | - = text_field_tag :q, @options[:q], placeholder: "Input SHA", class: "search-input input-xlarge" | 18 | + = text_field_tag :extended_sha1, @options[:extended_sha1], placeholder: "Input an extended SHA1 syntax", class: "search-input input-xlarge" |
19 | = button_tag type: 'submit', class: 'btn vtop' do | 19 | = button_tag type: 'submit', class: 'btn vtop' do |
20 | %i.icon-search | 20 | %i.icon-search |
21 | - @options.each do |key, value| | 21 | - @options.each do |key, value| |
22 | - = hidden_field_tag(key, value, id: nil) unless key == "q" | 22 | + = hidden_field_tag(key, value, id: nil) unless key == "extended_sha1" |
23 | 23 |
features/project/network.feature
@@ -34,3 +34,7 @@ Feature: Project Network Graph | @@ -34,3 +34,7 @@ Feature: Project Network Graph | ||
34 | Then page should not have content not cotaining "v2.1.0" | 34 | Then page should not have content not cotaining "v2.1.0" |
35 | When click "Show only selected branch" checkbox | 35 | When click "Show only selected branch" checkbox |
36 | Then page should have content not cotaining "v2.1.0" | 36 | Then page should have content not cotaining "v2.1.0" |
37 | + | ||
38 | + Scenario: I should fail to look for a commit | ||
39 | + When I look for a commit by ";" | ||
40 | + Then page status code should be 404 |
features/steps/project/project_network_graph.rb
@@ -76,7 +76,7 @@ class ProjectNetworkGraph < Spinach::FeatureSteps | @@ -76,7 +76,7 @@ class ProjectNetworkGraph < Spinach::FeatureSteps | ||
76 | 76 | ||
77 | When 'I looking for a commit by SHA of "v2.1.0"' do | 77 | When 'I looking for a commit by SHA of "v2.1.0"' do |
78 | within ".content .search" do | 78 | within ".content .search" do |
79 | - fill_in 'q', with: '98d6492' | 79 | + fill_in 'extended_sha1', with: '98d6492' |
80 | find('button').click | 80 | find('button').click |
81 | end | 81 | end |
82 | sleep 2 | 82 | sleep 2 |
@@ -87,4 +87,11 @@ class ProjectNetworkGraph < Spinach::FeatureSteps | @@ -87,4 +87,11 @@ class ProjectNetworkGraph < Spinach::FeatureSteps | ||
87 | page.should have_content 'v2.1.0' | 87 | page.should have_content 'v2.1.0' |
88 | end | 88 | end |
89 | end | 89 | end |
90 | + | ||
91 | + When 'I look for a commit by ";"' do | ||
92 | + within ".content .search" do | ||
93 | + fill_in 'extended_sha1', with: ';' | ||
94 | + find('button').click | ||
95 | + end | ||
96 | + end | ||
90 | end | 97 | end |
features/steps/shared/project.rb
@@ -51,6 +51,10 @@ module SharedProject | @@ -51,6 +51,10 @@ module SharedProject | ||
51 | page.should have_content("Features:") | 51 | page.should have_content("Features:") |
52 | end | 52 | end |
53 | 53 | ||
54 | + Then 'page status code should be 404' do | ||
55 | + page.status_code.should == 404 | ||
56 | + end | ||
57 | + | ||
54 | def current_project | 58 | def current_project |
55 | @project ||= Project.first | 59 | @project ||= Project.first |
56 | end | 60 | end |
lib/extracts_path.rb
@@ -94,19 +94,23 @@ module ExtractsPath | @@ -94,19 +94,23 @@ module ExtractsPath | ||
94 | # Automatically renders `not_found!` if a valid tree path could not be | 94 | # Automatically renders `not_found!` if a valid tree path could not be |
95 | # resolved (e.g., when a user inserts an invalid path or ref). | 95 | # resolved (e.g., when a user inserts an invalid path or ref). |
96 | def assign_ref_vars | 96 | def assign_ref_vars |
97 | + # assign allowed options | ||
98 | + allowed_options = ["filter_ref", "extended_sha1"] | ||
99 | + @options = params.select {|key, value| allowed_options.include?(key) && !value.blank? } | ||
100 | + @options = HashWithIndifferentAccess.new(@options) | ||
101 | + | ||
97 | @id = get_id | 102 | @id = get_id |
98 | @ref, @path = extract_ref(@id) | 103 | @ref, @path = extract_ref(@id) |
99 | @repo = @project.repository | 104 | @repo = @project.repository |
100 | - @commit = @repo.commit(@ref) | 105 | + if @options[:extended_sha1].blank? |
106 | + @commit = @repo.commit(@ref) | ||
107 | + else | ||
108 | + @commit = @repo.commit(@options[:extended_sha1]) | ||
109 | + end | ||
101 | @tree = Tree.new(@repo, @commit.id, @ref, @path) | 110 | @tree = Tree.new(@repo, @commit.id, @ref, @path) |
102 | @hex_path = Digest::SHA1.hexdigest(@path) | 111 | @hex_path = Digest::SHA1.hexdigest(@path) |
103 | @logs_path = logs_file_project_ref_path(@project, @ref, @path) | 112 | @logs_path = logs_file_project_ref_path(@project, @ref, @path) |
104 | 113 | ||
105 | - # assign allowed options | ||
106 | - allowed_options = ["filter_ref", "q"] | ||
107 | - @options = params.select {|key, value| allowed_options.include?(key) && !value.blank? } | ||
108 | - @options = HashWithIndifferentAccess.new(@options) | ||
109 | - | ||
110 | raise InvalidPathError unless @tree.exists? | 114 | raise InvalidPathError unless @tree.exists? |
111 | rescue RuntimeError, NoMethodError, InvalidPathError | 115 | rescue RuntimeError, NoMethodError, InvalidPathError |
112 | not_found! | 116 | not_found! |