OSDN Git Service

refactoring
authorgitlabhq <m@gitlabhq.com>
Wed, 16 Nov 2011 05:38:53 +0000 (08:38 +0300)
committergitlabhq <m@gitlabhq.com>
Wed, 16 Nov 2011 05:38:53 +0000 (08:38 +0300)
16 files changed:
app/assets/stylesheets/style.scss
app/controllers/projects_controller.rb
app/controllers/refs_controller.rb [new file with mode: 0644]
app/helpers/application_helper.rb
app/models/project.rb
app/views/commits/_commits.html.haml
app/views/commits/_diff.html.haml
app/views/commits/show.html.haml
app/views/layouts/project.html.haml
app/views/projects/tree.html.erb [deleted file]
app/views/refs/_tree.html.haml [moved from app/views/projects/_tree.html.haml with 65% similarity]
app/views/refs/_tree_file.html.haml [moved from app/views/projects/_tree_file.html.haml with 61% similarity]
app/views/refs/_tree_item.html.haml [moved from app/views/projects/_tree_item.html.haml with 81% similarity]
app/views/refs/tree.html.haml [new file with mode: 0644]
app/views/refs/tree.js.haml [new file with mode: 0644]
config/routes.rb

index 833a681..1f3fa1b 100644 (file)
@@ -571,7 +571,7 @@ body.project-page .project-sidebar aside a:first-child{
 body.project-page .project-sidebar aside a:hover{background-color: #eee;}
 body.project-page .project-sidebar aside a span.number{float: right; border-radius: 5px; text-shadow: none; background: rgba(0,0,0,.12); text-align: center; padding: 5px 8px; position: absolute; top: 10px; right: 10px}
 body.project-page .project-sidebar aside a.current{background-color: #79c3e0; color: white; text-shadow: none; border-color: transparent}
-body.project-page .project-content{ padding: 20px; display: block; margin-left: 250px; min-height: 400px}
+body.project-page .project-content{ padding: 20px; display: block; margin-left: 250px; min-height: 450px}
 body.project-page .project-content h2{ margin-top: 6px}
 body.project-page .project-content .button.right{margin-left: 20px}
 body.project-page table .commit a{color: #{$blue_link}}
index e778ae8..b700dc8 100644 (file)
@@ -88,35 +88,6 @@ class ProjectsController < ApplicationController
     end
   end
 
-  #
-  # Repository preview
-  #
-
-  def tree
-    @repo = project.repo
-
-    @commit = if params[:commit_id]
-                @repo.commits(params[:commit_id]).first
-              else
-                @repo.commits(@ref).first
-              end
-
-    @tree = @commit.tree
-    @tree = @tree / params[:path] if params[:path]
-
-    respond_to do |format|
-      format.html # show.html.erb
-      format.js do
-        # diasbale cache to allow back button works
-        response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
-        response.headers["Pragma"] = "no-cache"
-        response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
-      end
-    end
-  rescue
-    return render_404
-  end
-
   def graph
     @repo = project.repo
     commits = Grit::Commit.find_all(@repo, nil, {:max_count => 650})
@@ -145,20 +116,6 @@ class ProjectsController < ApplicationController
     end.to_json
   end
 
-  def blob
-    @repo = project.repo
-    @commit = project.commit(params[:commit_id])
-    @tree = project.tree(@commit, params[:path])
-
-    if @tree.is_a?(Grit::Blob)
-      send_data(@tree.data, :type => @tree.mime_type, :disposition => 'inline', :filename => @tree.name)
-    else
-      head(404)
-    end
-  rescue
-    return render_404
-  end
-
   def destroy
     project.destroy
 
diff --git a/app/controllers/refs_controller.rb b/app/controllers/refs_controller.rb
new file mode 100644 (file)
index 0000000..cbe8751
--- /dev/null
@@ -0,0 +1,53 @@
+class RefsController < ApplicationController
+  before_filter :project
+  before_filter :ref
+  layout "project"
+
+  # Authorize
+  before_filter :add_project_abilities
+  before_filter :authorize_read_project!
+  before_filter :require_non_empty_project
+
+  #
+  # Repository preview
+  #
+  def tree
+    @repo = project.repo
+
+    @commit = @repo.commits(@ref).first
+    @tree = @commit.tree
+    @tree = @tree / params[:path] if params[:path]
+
+    respond_to do |format|
+      format.html # show.html.erb
+      format.js do
+        # diasbale cache to allow back button works
+        response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
+        response.headers["Pragma"] = "no-cache"
+        response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
+      end
+    end
+  rescue
+    return render_404
+  end
+
+  def blob
+    @repo = project.repo
+    @commit = project.commit(@ref)
+    @tree = project.tree(@commit, params[:path])
+
+    if @tree.is_a?(Grit::Blob)
+      send_data(@tree.data, :type => @tree.mime_type, :disposition => 'inline', :filename => @tree.name)
+    else
+      head(404)
+    end
+  rescue
+    return render_404
+  end
+
+  protected
+
+  def ref
+    @ref = params[:id]
+  end
+end
index 4768ea8..530709e 100644 (file)
@@ -73,7 +73,7 @@ module ApplicationHelper
       project_nav = [
         { :label => "#{@project.code} / Issues", :url => project_issues_path(@project) },
         { :label => "#{@project.code} / Wall", :url => wall_project_path(@project) },
-        { :label => "#{@project.code} / Tree", :url => tree_project_path(@project) },
+        { :label => "#{@project.code} / Tree", :url => tree_project_ref_path(@project, @project.root_ref) },
         { :label => "#{@project.code} / Commits", :url => project_commits_path(@project) },
         { :label => "#{@project.code} / Team", :url => team_project_path(@project) }
       ]
index c6a07f8..09c91fb 100644 (file)
@@ -121,6 +121,10 @@ class Project < ActiveRecord::Base
     @admins ||=users_projects.includes(:user).where(:admin => true).map(&:user)
   end
 
+  def root_ref 
+    "master"
+  end
+
   def public?
     !private_flag
   end
index f47252a..e6c0f22 100644 (file)
@@ -9,7 +9,7 @@
               %data.commit-button
                 = truncate(commit.id.to_s, :length => 16)
                 %i
-              %data.commit-browse{ :onclick => "location.href='#{tree_project_path(@project, :commit_id => commit.id)}';return false;"}
+              %data.commit-browse{ :onclick => "location.href='#{tree_project_ref_path(@project, commit.id)}';return false;"}
                 Browse Code
             - if commit.author_email
               = image_tag gravatar_icon(commit.author_email), :class => "left", :width => 40, :style => "padding-right:5px;"
index e385d9d..4bf0e06 100644 (file)
@@ -9,7 +9,7 @@
       - if diff.deleted_file
         %strong{:id => "#{diff.b_path}"}= diff.a_path
       - else
-        = link_to tree_file_project_path(@project, @commit.id, diff.b_path) do
+        = link_to tree_file_project_ref_path(@project, @commit.id, diff.b_path) do
           %strong{:id => "#{diff.b_path}"}= diff.b_path
       %br/
     .diff_file_content
index b42b23d..93a8283 100644 (file)
@@ -18,7 +18,7 @@
         = preserve @commit.safe_message
   %tr
     %td Tree
-    %td= link_to 'Browse Code', tree_project_path(@project, :commit_id => @commit.id)
+    %td= link_to 'Browse Code', tree_project_ref_path(@project, @commit.id)
 .clear
 
 %br
index 7c5a162..6407da1 100644 (file)
@@ -5,7 +5,7 @@
       GitLab #{" - #{@project.name}" if @project && !@project.new_record?}
     = stylesheet_link_tag    "application"
     = javascript_include_tag "application"
-    - if current_page?(tree_project_path(@project)) || current_page?(project_commits_path(@project))
+    - if current_page?(tree_project_ref_path(@project, @project.root_ref)) || current_page?(project_commits_path(@project))
       = auto_discovery_link_tag(:atom, project_commits_url(@project, :atom, :ref => @ref, :private_token => current_user.private_token), :title => "Recent commits to #{@project.name}:#{@ref}")
     - if request.path == project_issues_path(@project)
       = auto_discovery_link_tag(:atom, project_issues_url(@project, :atom, :private_token => current_user.private_token), :title => "#{@project.name} issues")
@@ -24,7 +24,7 @@
               %input.git-url.text{:id => "", :name => "", :readonly => "", :type => "text", :value => @project.url_to_repo, :class => "one_click_select"}
             %aside
               = link_to "Activities", project_path(@project), :class => current_page?(:controller => "projects", :action => "show", :id => @project) ? "current" : nil
-              = link_to "Tree", tree_project_path(@project), :class => current_page?(:controller => "projects", :action => "tree", :id => @project) ? "current" : nil
+              = link_to "Tree", tree_project_ref_path(@project,  @project.root_ref), :class => current_page?(:controller => "refs", :action => "tree", :project_id => @project, :id => @ref || @project.root_ref ) ? "current" : nil
               = link_to "Commits", project_commits_path(@project), :class => current_page?(:controller => "commits", :action => "index", :project_id => @project) ? "current" : nil
               = link_to "Network graph", graph_project_path(@project), :class => current_page?(:controller => "projects", :action => "graph", :id => @project) ? "current" : nil
               = link_to team_project_path(@project), :class => (current_page?(:controller => "projects", :action => "team", :id => @project) || controller.controller_name == "team_members") ? "current" : nil do
diff --git a/app/views/projects/tree.html.erb b/app/views/projects/tree.html.erb
deleted file mode 100644 (file)
index c29ed2f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<div>
-  <div id="tree-holder">
-    <%= render :partial => "tree", :locals => {:repo => @repo, :commit => @commit, :tree => @tree} %>
-  </div>
-</div>
similarity index 65%
rename from app/views/projects/_tree.html.haml
rename to app/views/refs/_tree.html.haml
index b7d4b32..52e5820 100644 (file)
@@ -5,7 +5,7 @@
   %h2.icon
     %span
     %d
-      = link_to tree_project_path(@project, :path => nil, :commit_id => @commit.try(:id)), :remote => true do
+      = link_to tree_project_ref_path(@project, @ref, :path => nil), :remote => true do
         = @project.name
       - if params[:path]
         - part_path = ""
           - if part_path.empty?
             - part_path = part
           \/
-          = link_to truncate(part, :length => 40), tree_file_project_path(@project, :path => part_path, :commit_id => @commit.try(:id), :branch => @branch, :tag => @tag), :remote => :true
+          = link_to truncate(part, :length => 40), tree_file_project_ref_path(@project, @ref, :path => part_path), :remote => :true
         &nbsp;
-  .right= render :partial => "projects/refs", :locals => { :destination => tree_project_path(@project) }
+  .right= render :partial => "projects/refs", :locals => { :destination => tree_project_ref_path(@project, @ref) }
 .clear
 
 #tree-content-holder
   - if tree.is_a?(Grit::Blob)
-    = render :partial => "projects/tree_file", :locals => { :name => tree.name, :content => tree.data, :file => tree }
+    = render :partial => "refs/tree_file", :locals => { :name => tree.name, :content => tree.data, :file => tree }
   - else
     - contents = tree.contents
     %table#tree-slider.round-borders
         %th Last Update
         %th
           Last commit
-          = link_to "history", project_commits_path(@project, :path => params[:path], :branch => params[:branch],:tag => params[:tag]), :class => "right"
+          = link_to "history", project_commits_path(@project, :path => params[:path], :ref => @ref), :class => "right"
       - if params[:path]
         - file = File.join(params[:path], "..")
-        %tr{ :class => "tree-item", :url => tree_file_project_path(@project, @commit.id, file) }
+        %tr{ :class => "tree-item", :url => tree_file_project_ref_path(@project, @ref, file) }
           %td.tree-item-file-name
             = image_tag "dir.png"
-            = link_to "..", tree_file_project_path(@project, @commit.id, file, :branch => @branch, :tag => @tag), :remote => :true
+            = link_to "..", tree_file_project_ref_path(@project, @ref, file), :remote => :true
           %td
           %td
 
       - contents.select{ |i| i.is_a?(Grit::Tree)}.each do |content|
-        = render :partial => "projects/tree_item", :locals => { :content => content }
+        = render :partial => "refs/tree_item", :locals => { :content => content }
       - contents.select{ |i| i.is_a?(Grit::Blob)}.each do |content|
-        = render :partial => "projects/tree_item", :locals => { :content => content }
+        = render :partial => "refs/tree_item", :locals => { :content => content }
 
 :javascript
   $(function(){
similarity index 61%
rename from app/views/projects/_tree_file.html.haml
rename to app/views/refs/_tree_file.html.haml
index b5b1821..b3a11e5 100644 (file)
@@ -3,8 +3,8 @@
   .view_file_header
     %strong
       = name
-      = link_to "raw", blob_project_path(@project, :commit_id => @commit.id, :path => params[:path] ), :class => "right", :target => "_blank"
-      = link_to "history", project_commits_path(@project, :path => params[:path], :branch => params[:branch], :tag => params[:tag] ), :class => "right", :style => "margin-right:10px;"
+      = link_to "raw", blob_project_ref_path(@project, @ref, :path => params[:path] ), :class => "right", :target => "_blank"
+      = link_to "history", project_commits_path(@project, :path => params[:path], :ref => @ref ), :class => "right", :style => "margin-right:10px;"
       %br/
   - if file.text?
     .view_file_content
similarity index 81%
rename from app/views/projects/_tree_item.html.haml
rename to app/views/refs/_tree_item.html.haml
index 1637202..0cc7a4c 100644 (file)
@@ -1,13 +1,13 @@
 - file = params[:path] ? File.join(params[:path], content.name) : content.name
 - content_commit = @project.repo.log(@commit.id, file, :max_count => 1).last
 - return unless content_commit
-%tr{ :class => "tree-item", :url => tree_file_project_path(@project, @commit.id, file) }
+%tr{ :class => "tree-item", :url => tree_file_project_ref_path(@project, @ref, file) }
   %td.tree-item-file-name
     - if content.is_a?(Grit::Blob)
       = image_tag "txt.png"
     - else
       = image_tag "dir.png"
-    = link_to truncate(content.name, :length => 40), tree_file_project_path(@project, @commit.id, file, :branch => @branch, :tag => @tag), :remote => :true
+    = link_to truncate(content.name, :length => 40), tree_file_project_ref_path(@project, @ref || @commit.id, file), :remote => :true
   %td
     = time_ago_in_words(content_commit.committed_date)
     ago
diff --git a/app/views/refs/tree.html.haml b/app/views/refs/tree.html.haml
new file mode 100644 (file)
index 0000000..e59bbf0
--- /dev/null
@@ -0,0 +1 @@
+#tree-holder= render :partial => "tree", :locals => {:repo => @repo, :commit => @commit, :tree => @tree}
diff --git a/app/views/refs/tree.js.haml b/app/views/refs/tree.js.haml
new file mode 100644 (file)
index 0000000..eb08adb
--- /dev/null
@@ -0,0 +1,5 @@
+:plain
+  $("#tree-holder table").hide("slide", { direction: "left" }, 150, function(){
+    $("#tree-holder").html("#{escape_javascript(render(:partial => "tree", :locals => {:repo => @repo, :commit => @commit, :tree => @tree}))}");
+    $("#tree-holder table").show("slide", { direction: "right" }, 150);
+  });
index 7c239e9..b474f26 100644 (file)
@@ -30,22 +30,24 @@ Gitlab::Application.routes.draw do
 
   resources :projects, :except => [:new, :create, :index], :path => "/" do
     member do
-      get "tree"
-      get "blob"
       get "team"
       get "wall"
       get "graph"
+    end
 
-      # tree viewer
-      get "tree/:commit_id" => "projects#tree"
-      get "tree/:commit_id/:path" => "projects#tree",
-      :as => :tree_file,
-      :constraints => {
-        :id => /[a-zA-Z0-9_\-]+/,
-        :commit_id => /[a-zA-Z0-9]+/,
-        :path => /.*/
-      }
+    resources :refs, :only => [], :path => "/" do 
+      member do 
+        get "tree"
+        get "blob"
 
+        # tree viewer
+        get "tree/:path" => "refs#tree",
+          :as => :tree_file,
+          :constraints => {
+            :id => /[a-zA-Z0-9_\-]+/,
+            :path => /.*/
+          }
+      end
     end
 
     resources :snippets