Commit 94390fc7b42e92d4e1d38c8392a2e310a256c4ca

Authored by Dmitriy Zaporozhets
1 parent 88abe66c

Proper routing. blobs for blobs, raw for send_data

app/controllers/blob_controller.rb
... ... @@ -8,15 +8,6 @@ class BlobController < ProjectResourceController
8 8 before_filter :require_non_empty_project
9 9  
10 10 def show
11   - if @tree.is_blob?
12   - send_data(
13   - @tree.data,
14   - type: @tree.mime_type,
15   - disposition: 'inline',
16   - filename: @tree.name
17   - )
18   - else
19   - not_found!
20   - end
  11 + @blob = Gitlab::Git::Blob.new(@repository, @commit.id, @ref, @path)
21 12 end
22 13 end
... ...
app/controllers/raw_controller.rb 0 → 100644
... ... @@ -0,0 +1,25 @@
  1 +# Controller for viewing a file's raw
  2 +class RawController < ProjectResourceController
  3 + include ExtractsPath
  4 +
  5 + # Authorize
  6 + before_filter :authorize_read_project!
  7 + before_filter :authorize_code_access!
  8 + before_filter :require_non_empty_project
  9 +
  10 + def show
  11 + @blob = Gitlab::Git::Blob.new(@repository, @commit.id, @ref, @path)
  12 +
  13 + if @blob.exists?
  14 + send_data(
  15 + @blob.data,
  16 + type: @blob.mime_type,
  17 + disposition: 'inline',
  18 + filename: @blob.name
  19 + )
  20 + else
  21 + not_found!
  22 + end
  23 + end
  24 +end
  25 +
... ...
app/helpers/tree_helper.rb
... ... @@ -18,7 +18,7 @@ module TreeHelper
18 18 render partial: 'tree/submodule_item', object: f
19 19 else
20 20 # Object is a Blob
21   - render partial: 'tree/tree_item', object: f, locals: {type: 'file'}
  21 + render partial: 'tree/blob_item', object: f, locals: {type: 'file'}
22 22 end
23 23  
24 24 tree += html if html.present?
... ...
app/views/blob/_actions.html.haml 0 → 100644
... ... @@ -0,0 +1,12 @@
  1 +.btn-group.tree-btn-group
  2 + -# only show edit link for text files
  3 + - if @blob.text?
  4 + = link_to "edit", project_edit_tree_path(@project, @id), class: "btn btn-tiny", disabled: !allowed_tree_edit?
  5 + = link_to "raw", project_raw_path(@project, @id), class: "btn btn-tiny", target: "_blank"
  6 + -# only show normal/blame view links for text files
  7 + - if @blob.text?
  8 + - if current_page? project_blame_path(@project, @id)
  9 + = link_to "normal view", project_tree_path(@project, @id), class: "btn btn-tiny"
  10 + - else
  11 + = link_to "blame", project_blame_path(@project, @id), class: "btn btn-tiny"
  12 + = link_to "history", project_commits_path(@project, @id), class: "btn btn-tiny"
... ...
app/views/blob/_blob.html.haml 0 → 100644
... ... @@ -0,0 +1,27 @@
  1 +%ul.breadcrumb
  2 + %li
  3 + %i.icon-angle-right
  4 + = link_to project_tree_path(@project, @ref) do
  5 + = @project.path
  6 + - tree_breadcrumbs(@tree, 6) do |title, path|
  7 + \/
  8 + %li
  9 + - if path
  10 + = link_to truncate(title, length: 40), project_tree_path(@project, path)
  11 + - else
  12 + = link_to title, '#'
  13 +
  14 +%div#tree-content-holder.tree-content-holder
  15 + .file_holder
  16 + .file_title
  17 + %i.icon-file
  18 + %span.file_name
  19 + = blob.name
  20 + %small= number_to_human_size blob.size
  21 + %span.options= render "actions"
  22 + - if blob.text?
  23 + = render "text", blob: blob
  24 + - elsif blob.image?
  25 + = render "image", blob: blob
  26 + - else
  27 + = render "download", blob: blob
... ...
app/views/blob/_download.html.haml 0 → 100644
... ... @@ -0,0 +1,8 @@
  1 +.file_content.blob_file
  2 + %center
  3 + = link_to project_blob_path(@project, @id) do
  4 + %div.padded
  5 + %h4
  6 + %i.icon-download-alt
  7 + %br
  8 + Download (#{number_to_human_size blob.size})
... ...
app/views/blob/_image.html.haml 0 → 100644
... ... @@ -0,0 +1,2 @@
  1 +.file_content.image_file
  2 + %img{ src: "data:#{blob.mime_type};base64,#{Base64.encode64(blob.data)}"}
... ...
app/views/blob/_text.html.haml 0 → 100644
... ... @@ -0,0 +1,14 @@
  1 +- if gitlab_markdown?(blob.name)
  2 + .file_content.wiki
  3 + = preserve do
  4 + = markdown(blob.data)
  5 +- elsif markup?(blob.name)
  6 + .file_content.wiki
  7 + = raw GitHub::Markup.render(blob.name, blob.data)
  8 +- else
  9 + .file_content.code
  10 + - unless blob.empty?
  11 + %div{class: user_color_scheme_class}
  12 + = raw blob.colorize(formatter: :gitlab)
  13 + - else
  14 + %p.nothing_here_message Empty file
... ...
app/views/blob/show.html.haml 0 → 100644
... ... @@ -0,0 +1,4 @@
  1 +%div.tree-ref-holder
  2 + = render 'shared/ref_switcher', destination: 'tree', path: @path
  3 +%div#tree-holder.tree-holder
  4 + = render 'blob', blob: @blob
... ...
app/views/blob/show.js.haml 0 → 100644
... ... @@ -0,0 +1,10 @@
  1 +:plain
  2 + // Load Files list
  3 + $("#tree-holder").html("#{escape_javascript(render(partial: "blob", locals: {blob: @blob}))}");
  4 + $("#tree-content-holder").show("slide", { direction: "right" }, 400);
  5 + $('.project-refs-form #path').val("#{@path}");
  6 +
  7 + // Load last commit log for each file in tree
  8 + $('#tree-slider').waitForImages(function() {
  9 + ajaxGet('#{@logs_path}');
  10 + });
... ...
app/views/tree/_blob.html.haml
... ... @@ -1,13 +0,0 @@
1   -.file_holder
2   - .file_title
3   - %i.icon-file
4   - %span.file_name
5   - = blob.name
6   - %small= number_to_human_size blob.size
7   - %span.options= render "tree/blob_actions"
8   - - if blob.text?
9   - = render "tree/blob/text", blob: blob
10   - - elsif blob.image?
11   - = render "tree/blob/image", blob: blob
12   - - else
13   - = render "tree/blob/download", blob: blob
app/views/tree/_blob_actions.html.haml
... ... @@ -1,12 +0,0 @@
1   -.btn-group.tree-btn-group
2   - -# only show edit link for text files
3   - - if @tree.text?
4   - = link_to "edit", project_edit_tree_path(@project, @id), class: "btn btn-tiny", disabled: !allowed_tree_edit?
5   - = link_to "raw", project_blob_path(@project, @id), class: "btn btn-tiny", target: "_blank"
6   - -# only show normal/blame view links for text files
7   - - if @tree.text?
8   - - if current_page? project_blame_path(@project, @id)
9   - = link_to "normal view", project_tree_path(@project, @id), class: "btn btn-tiny"
10   - - else
11   - = link_to "blame", project_blame_path(@project, @id), class: "btn btn-tiny"
12   - = link_to "history", project_commits_path(@project, @id), class: "btn btn-tiny"
app/views/tree/_blob_item.html.haml 0 → 100644
... ... @@ -0,0 +1,9 @@
  1 +%tr{ class: "tree-item #{tree_hex_class(blob_item)}" }
  2 + %td.tree-item-file-name
  3 + = tree_icon(type)
  4 + %strong= link_to truncate(blob_item.name, length: 40), project_blob_path(@project, tree_join(@id || @commit.id, blob_item.name))
  5 + %td.tree_time_ago.cgray
  6 + %span.log_loading.hide
  7 + Loading commit data...
  8 + = image_tag "ajax_loader_tree.gif", width: 14
  9 + %td.tree_commit{ colspan: 2 }
... ...
app/views/tree/_tree.html.haml
... ... @@ -39,9 +39,8 @@
39 39  
40 40 %div.tree_progress
41 41  
42   -- unless tree.is_blob?
43   - :javascript
44   - // Load last commit log for each file in tree
45   - $(window).load(function(){
46   - ajaxGet('#{@logs_path}');
47   - });
  42 +:javascript
  43 + // Load last commit log for each file in tree
  44 + $(window).load(function(){
  45 + ajaxGet('#{@logs_path}');
  46 + });
... ...
app/views/tree/blob/_download.html.haml
... ... @@ -1,8 +0,0 @@
1   -.file_content.blob_file
2   - %center
3   - = link_to project_blob_path(@project, @id) do
4   - %div.padded
5   - %h4
6   - %i.icon-download-alt
7   - %br
8   - Download (#{number_to_human_size blob.size})
app/views/tree/blob/_image.html.haml
... ... @@ -1,2 +0,0 @@
1   -.file_content.image_file
2   - %img{ src: "data:#{blob.mime_type};base64,#{Base64.encode64(blob.data)}"}
app/views/tree/blob/_text.html.haml
... ... @@ -1,14 +0,0 @@
1   -- if gitlab_markdown?(blob.name)
2   - .file_content.wiki
3   - = preserve do
4   - = markdown(blob.data)
5   -- elsif markup?(blob.name)
6   - .file_content.wiki
7   - = raw GitHub::Markup.render(blob.name, blob.data)
8   -- else
9   - .file_content.code
10   - - unless blob.empty?
11   - %div{class: user_color_scheme_class}
12   - = raw blob.colorize(formatter: :gitlab)
13   - - else
14   - %p.nothing_here_message Empty file
config/routes.rb
... ... @@ -170,6 +170,7 @@ Gitlab::Application.routes.draw do
170 170 end
171 171  
172 172 resources :blob, only: [:show], constraints: {id: /.+/}
  173 + resources :raw, only: [:show], constraints: {id: /.+/}
173 174 resources :tree, only: [:show], constraints: {id: /.+/, format: /(html|js)/ }
174 175 resources :edit_tree, only: [:show, :update], constraints: {id: /.+/}, path: 'edit'
175 176 resources :commit, only: [:show], constraints: {id: /[[:alnum:]]{6,40}/}
... ...
lib/gitlab/git/blob.rb
... ... @@ -23,7 +23,19 @@ module Gitlab
23 23 end
24 24  
25 25 def exists?
26   - @raw_blob
  26 + raw_blob
  27 + end
  28 +
  29 + def empty?
  30 + data.blank?
  31 + end
  32 +
  33 + def mode
  34 + raw_blob.mode
  35 + end
  36 +
  37 + def size
  38 + raw_blob.size
27 39 end
28 40 end
29 41 end
... ...