summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2012-09-04 10:00:00 -0700
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2012-09-04 10:00:00 -0700
commit5ab3e38ecd58d0b90e5bdc430facf52a0b9b7835 (patch)
tree480ee32ffe2625650b251429414211d06ad76fab
parent874a86f820466b2c9cd384483d862a3d5e2a3ae7 (diff)
parent0bc4ecfedd1f8580ab861955b0c21605e5a3aadb (diff)
downloadgitlab-ce-5ab3e38ecd58d0b90e5bdc430facf52a0b9b7835.tar.gz
Merge pull request #1371 from tsigo/project_panel
Refactor the project clone panel
-rw-r--r--app/assets/javascripts/projects.js25
-rw-r--r--app/assets/javascripts/projects.js.coffee21
-rw-r--r--app/controllers/application_controller.rb2
-rw-r--r--app/controllers/projects_controller.rb2
-rw-r--r--app/roles/repository.rb12
-rw-r--r--app/views/projects/_clone_panel.html.haml22
-rw-r--r--app/views/projects/_show.html.haml23
-rw-r--r--app/views/projects/empty.html.haml23
-rw-r--r--app/views/projects/show.html.haml5
-rw-r--r--app/views/refs/_head.html.haml5
-rw-r--r--spec/roles/repository_spec.rb22
11 files changed, 66 insertions, 96 deletions
diff --git a/app/assets/javascripts/projects.js b/app/assets/javascripts/projects.js
deleted file mode 100644
index 6bbfbacc382..00000000000
--- a/app/assets/javascripts/projects.js
+++ /dev/null
@@ -1,25 +0,0 @@
-function Projects() {
- $("#project_name").live("change", function(){
- var slug = slugify($(this).val());
- $("#project_code").val(slug);
- $("#project_path").val(slug);
- });
-
- $('.new_project, .edit_project').live('ajax:before', function() {
- $('.project_new_holder, .project_edit_holder').hide();
- $('.save-project-loader').show();
- });
-
- $('form #project_default_branch').chosen();
-
- disableButtonIfEmtpyField("#project_name", ".project-submit")
-}
-
-function initGitCloneSwitcher() {
- var link_sel = ".project_clone_holder button";
- $(link_sel).bind("click", function(e) {
- $(link_sel).removeClass("active");
- $(this).addClass("active");
- $("#project_clone").val($(this).attr("data-clone"));
- })
-}
diff --git a/app/assets/javascripts/projects.js.coffee b/app/assets/javascripts/projects.js.coffee
new file mode 100644
index 00000000000..ca8f13f6744
--- /dev/null
+++ b/app/assets/javascripts/projects.js.coffee
@@ -0,0 +1,21 @@
+window.Projects = ->
+ $("#project_name").live "change", ->
+ slug = slugify($(this).val())
+ $("#project_code").val(slug)
+ $("#project_path").val(slug)
+
+ $(".new_project, .edit_project").live "ajax:before", ->
+ $(".project_new_holder, .project_edit_holder").hide()
+ $(".save-project-loader").show()
+
+ $("form #project_default_branch").chosen()
+ disableButtonIfEmtpyField "#project_name", ".project-submit"
+
+# Git clone panel switcher
+$ ->
+ scope = $('.project_clone_holder')
+ if scope.length > 0
+ $('a, button', scope).click ->
+ $('a, button', scope).removeClass('active')
+ $(this).addClass('active')
+ $('#project_clone', scope).val($(this).data('clone'))
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 9aab250dbd4..d53b23bb246 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -135,7 +135,7 @@ class ApplicationController < ActionController::Base
end
def require_non_empty_project
- redirect_to @project unless @project.repo_exists? && @project.has_commits?
+ redirect_to @project if @project.empty_repo?
end
def no_cache_headers
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index bd7f811e59f..170b8892936 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -50,7 +50,7 @@ class ProjectsController < ApplicationController
respond_to do |format|
format.html do
- if @project.repo_exists? && @project.has_commits?
+ unless @project.empty_repo?
@last_push = current_user.recent_push(@project.id)
render :show
else
diff --git a/app/roles/repository.rb b/app/roles/repository.rb
index 5fa950db6d6..5f6c35414e1 100644
--- a/app/roles/repository.rb
+++ b/app/roles/repository.rb
@@ -8,6 +8,10 @@ module Repository
false
end
+ def empty_repo?
+ !repo_exists? || !has_commits?
+ end
+
def commit(commit_id = nil)
Commit.find_or_first(repo, commit_id, root_ref)
end
@@ -38,7 +42,7 @@ module Repository
def has_post_receive_file?
hook_file = File.join(path_to_repo, 'hooks', 'post-receive')
- File.exists?(hook_file)
+ File.exists?(hook_file)
end
def tags
@@ -67,7 +71,7 @@ module Repository
def repo_exists?
@repo_exists ||= (repo && !repo.branches.empty?)
- rescue
+ rescue
@repo_exists = false
end
@@ -94,7 +98,7 @@ module Repository
!!commit
end
- def root_ref
+ def root_ref
default_branch || "master"
end
@@ -104,7 +108,7 @@ module Repository
# Archive Project to .tar.gz
#
- # Already packed repo archives stored at
+ # Already packed repo archives stored at
# app_root/tmp/repositories/project_name/project_name-commit-id.tag.gz
#
def archive_repo ref
diff --git a/app/views/projects/_clone_panel.html.haml b/app/views/projects/_clone_panel.html.haml
index 76059f32237..20891610ace 100644
--- a/app/views/projects/_clone_panel.html.haml
+++ b/app/views/projects/_clone_panel.html.haml
@@ -8,14 +8,14 @@
= text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5"
.span4.right
.right
- - if can? current_user, :download_code, @project
- = link_to archive_project_repository_path(@project), class: "btn small grouped" do
- %i.icon-download-alt
- Download
- - if @project.merge_requests_enabled && can?(current_user, :write_merge_request, @project)
- = link_to new_project_merge_request_path(@project), title: "New Merge Request", class: "btn small grouped" do
- Merge Request
- - if @project.issues_enabled && can?(current_user, :write_issue, @project)
- = link_to new_project_issue_path(@project), title: "New Issue", class: "btn small grouped" do
- Issue
-
+ - unless @project.empty_repo?
+ - if can? current_user, :download_code, @project
+ = link_to archive_project_repository_path(@project), class: "btn small grouped" do
+ %i.icon-download-alt
+ Download
+ - if @project.merge_requests_enabled && can?(current_user, :write_merge_request, @project)
+ = link_to new_project_merge_request_path(@project), title: "New Merge Request", class: "btn small grouped" do
+ Merge Request
+ - if @project.issues_enabled && can?(current_user, :write_issue, @project)
+ = link_to new_project_issue_path(@project), title: "New Issue", class: "btn small grouped" do
+ Issue
diff --git a/app/views/projects/_show.html.haml b/app/views/projects/_show.html.haml
deleted file mode 100644
index e8a5b00dd0e..00000000000
--- a/app/views/projects/_show.html.haml
+++ /dev/null
@@ -1,23 +0,0 @@
-%h5.title
- = @project.name
-%br
-%div
- %a.btn.info{href: tree_project_ref_path(@project, @project.root_ref)} Browse code
- &nbsp;
- %a.btn{href: project_commits_path(@project)} Commits
- %strong.right
- = link_to project_path(@project) do
- Switch to project &rarr;
-%br
-.alert-message.block-message.warning
- .input
- .input-prepend
- %span.add-on git clone
- = text_field_tag :project_clone, @project.url_to_repo, class: "xlarge one_click_select git_clone_url"
-
-= simple_format @project.description
-- unless @events.blank?
- %h4.middle_title Recent Activity
- .content_list= render @events
-
-
diff --git a/app/views/projects/empty.html.haml b/app/views/projects/empty.html.haml
index d408c0a64ae..d9a151fc706 100644
--- a/app/views/projects/empty.html.haml
+++ b/app/views/projects/empty.html.haml
@@ -1,12 +1,6 @@
= render 'shared/no_ssh'
-.project_clone_panel
- .row
- .span7
- .form-horizontal
- .input-prepend.project_clone_holder
- = link_to "SSH", "#", class: "btn small active", :"data-clone" => @project.ssh_url_to_repo
- = link_to "HTTP", "#", class: "btn small", :"data-clone" => @project.http_url_to_repo
- = text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5"
+= render 'clone_panel'
+
%div.git-empty
%h4 Git global setup:
%pre.dark
@@ -36,16 +30,3 @@
- if can? current_user, :admin_project, @project
.prepend-top-20
= link_to 'Remove project', @project, confirm: 'Are you sure?', method: :delete, class: "btn danger right"
-
-
-
-:javascript
- $(function(){
- var link_sel = ".project_clone_holder a";
- $(link_sel).bind("click", function() {
- $(link_sel).removeClass("active");
- $(this).addClass("active");
- $("#project_clone").val($(this).attr("data-clone"));
- })
- })
-
diff --git a/app/views/projects/show.html.haml b/app/views/projects/show.html.haml
index de3e9cefc06..21459da256f 100644
--- a/app/views/projects/show.html.haml
+++ b/app/views/projects/show.html.haml
@@ -2,8 +2,3 @@
= render 'clone_panel'
= render "events/event_last_push", event: @last_push
.content_list= render @events
-
-:javascript
- $(function(){
- initGitCloneSwitcher();
- })
diff --git a/app/views/refs/_head.html.haml b/app/views/refs/_head.html.haml
index affd07cba38..d51602de9b7 100644
--- a/app/views/refs/_head.html.haml
+++ b/app/views/refs/_head.html.haml
@@ -12,8 +12,3 @@
%button{class: "btn small active", :"data-clone" => @project.ssh_url_to_repo} SSH
%button{class: "btn small", :"data-clone" => @project.http_url_to_repo} HTTP
= text_field_tag :project_clone, @project.url_to_repo, class: "one_click_select span5"
-
-:javascript
- $(function(){
- initGitCloneSwitcher();
- })
diff --git a/spec/roles/repository_spec.rb b/spec/roles/repository_spec.rb
new file mode 100644
index 00000000000..62aecc1341f
--- /dev/null
+++ b/spec/roles/repository_spec.rb
@@ -0,0 +1,22 @@
+require 'spec_helper'
+
+describe Project, "Repository" do
+ let(:project) { build(:project) }
+
+ describe "#empty_repo?" do
+ it "should return true if the repo doesn't exist" do
+ project.stub(repo_exists?: false, has_commits?: true)
+ project.should be_empty_repo
+ end
+
+ it "should return true if the repo has commits" do
+ project.stub(repo_exists?: true, has_commits?: false)
+ project.should be_empty_repo
+ end
+
+ it "should return false if the repo exists and has commits" do
+ project.stub(repo_exists?: true, has_commits?: true)
+ project.should_not be_empty_repo
+ end
+ end
+end