Commit f4205abb7725c96c1a967f5b3779e09c6e94a21d

Authored by Dmitriy Zaporozhets
2 parents f82db569 be17a32d

Merge branch 'master' of dev.gitlab.org:gitlab/gitlabhq

app/assets/stylesheets/sections/projects.scss
... ... @@ -81,9 +81,11 @@ ul.nav.nav-projects-tabs {
81 81  
82 82 .public-projects {
83 83 li {
84   - margin-top: 8px;
85   - margin-bottom: 5px;
86   - border-bottom: 1px solid #eee;
  84 + .project-title {
  85 + font-size: 14px;
  86 + line-height: 2;
  87 + font-weight: normal;
  88 + }
87 89  
88 90 .description {
89 91 margin-left: 15px;
... ... @@ -92,6 +94,14 @@ ul.nav.nav-projects-tabs {
92 94 }
93 95 }
94 96  
  97 +.public-clone {
  98 + background: #333;
  99 + color: #f5f5f5;
  100 + padding: 5px 10px;
  101 + margin: 1px;
  102 + font-weight: normal;
  103 +}
  104 +
95 105 .new-tag-btn {
96 106 position: relative;
97 107 top: -5px;
... ...
app/controllers/public/projects_controller.rb
... ... @@ -10,4 +10,15 @@ class Public::ProjectsController < ApplicationController
10 10 @projects = @projects.search(params[:search]) if params[:search].present?
11 11 @projects = @projects.includes(:namespace).order("namespaces.path, projects.name ASC").page(params[:page]).per(20)
12 12 end
  13 +
  14 + def show
  15 + @project = Project.public_only.find_with_namespace(params[:id])
  16 + render_404 and return unless @project
  17 +
  18 + @repository = @project.repository
  19 + @recent_tags = @repository.tags.first(10)
  20 +
  21 + @commit = @repository.commit(params[:ref])
  22 + @tree = Tree.new(@repository, @commit.id)
  23 + end
13 24 end
... ...
app/views/layouts/errors.html.haml
... ... @@ -2,7 +2,7 @@
2 2 %html{ lang: "en"}
3 3 = render "layouts/head", title: "Error"
4 4 %body{class: "#{app_theme} application"}
5   - = render "layouts/head_panel", title: ""
  5 + = render "layouts/head_panel", title: "" if current_user
6 6 = render "layouts/flash"
7 7 .container
8 8 .content
... ...
app/views/layouts/public.html.haml
... ... @@ -10,10 +10,16 @@
10 10 .container
11 11 %div.app_logo
12 12 %span.separator
13   - = link_to root_path, class: "home" do
  13 + = link_to public_root_path, class: "home" do
14 14 %h1 GITLAB
15 15 %span.separator
16 16 %h1.project_name Public Projects
  17 + %ul.nav
  18 + %li
  19 + %a
  20 + %div.hide.turbolink-spinner
  21 + %i.icon-refresh.icon-spin
  22 + Loading...
17 23  
18 24 .container.navless-container
19 25 .content
... ...
app/views/public/projects/_tree.html.haml 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +- if tree.readme
  2 + = render "projects/tree/readme", readme: tree.readme
  3 +- else
  4 + .alert
  5 + %h3.nothing_here_message This project does not have README file
... ...
app/views/public/projects/index.html.haml
... ... @@ -11,22 +11,20 @@
11 11 = search_field_tag :search, params[:search], placeholder: "gitlab-ci", class: "span3 search-text-input", id: "projects_search"
12 12 = submit_tag 'Search', class: "btn btn-primary wide"
13 13  
14   -%hr
15   -
16 14 .public-projects
17   - %ul.unstyled
  15 + %ul.bordered-list
18 16 - @projects.each do |project|
19   - %li.clearfix
20   - %div
21   - %i.icon-share
22   - - if current_user
23   - = link_to_project project
24   - - else
  17 + %li
  18 + .project-title
  19 + %i.icon-share.cgray
  20 + = link_to public_project_path(project) do
25 21 = project.name_with_namespace
26 22 .pull-right
27   - %pre.dark.tiny git clone #{project.http_url_to_repo}
28   - %div.description
29   - = project.description
  23 + %pre.public-clone git clone #{project.http_url_to_repo}
  24 +
  25 + - if project.description.present?
  26 + %div.description
  27 + = project.description
30 28 - unless @projects.present?
31 29 %h3.nothing_here_message No public projects
32 30  
... ...
app/views/public/projects/show.html.haml 0 → 100644
... ... @@ -0,0 +1,46 @@
  1 +%h3.page-title
  2 + = @project.name_with_namespace
  3 + .pull-right
  4 + %pre.public-clone git clone #{@project.http_url_to_repo}
  5 + .pull-right
  6 + - if current_user
  7 + = link_to 'Browse project', @project, class: 'btn btn-create append-right-10'
  8 +
  9 +
  10 +%div
  11 + = link_to public_root_path do
  12 + ← To projects list
  13 + .pull-right
  14 + %span.light= @project.description
  15 +
  16 +%br
  17 +.row
  18 + .span9
  19 + = render 'tree', tree: @tree
  20 + .span3
  21 + %h5 Repository:
  22 + %div
  23 + %p
  24 + %span.light Bare size is
  25 + #{@project.repository.size} MB
  26 +
  27 + %p
  28 + = pluralize(@repository.round_commit_count, 'commit')
  29 + %p
  30 + = pluralize(@repository.branch_names.count, 'branch')
  31 + %p
  32 + = pluralize(@repository.tag_names.count, 'tag')
  33 +
  34 + - if @recent_tags.present?
  35 + %hr
  36 + %h5 Most Recent Tags:
  37 + %ul.unstyled
  38 + - @recent_tags.each do |tag|
  39 + %li
  40 + %p
  41 + %i.icon-tag
  42 + %strong= tag.name
  43 + %small.light.pull-right
  44 + %i.icon-calendar
  45 + = time_ago_in_words(tag.commit.committed_date)
  46 + ago
... ...
config/routes.rb
... ... @@ -55,6 +55,8 @@ Gitlab::Application.routes.draw do
55 55 #
56 56 namespace :public do
57 57 resources :projects, only: [:index]
  58 + resources :projects, constraints: { id: /[a-zA-Z.\/0-9_\-]+/ }, only: [:show]
  59 +
58 60 root to: "projects#index"
59 61 end
60 62  
... ...
features/public/public_projects.feature 0 → 100644
... ... @@ -0,0 +1,14 @@
  1 +Feature: Public Projects Feature
  2 + Background:
  3 + Given public project "Community"
  4 + And private project "Enterprise"
  5 +
  6 + Scenario: I visit public area
  7 + When I visit the public projects area
  8 + Then I should see project "Community"
  9 + And I should not see project "Enterprise"
  10 +
  11 + Scenario: I visit public project page
  12 + When I visit public page for "Community" project
  13 + Then I should see public project details
  14 + And I should see project readme
... ...
features/steps/public/projects_feature.rb 0 → 100644
... ... @@ -0,0 +1,35 @@
  1 +class Spinach::Features::PublicProjectsFeature < Spinach::FeatureSteps
  2 + include SharedPaths
  3 +
  4 + step 'I should see project "Community"' do
  5 + page.should have_content "Community"
  6 + end
  7 +
  8 + step 'I should not see project "Enterprise"' do
  9 + page.should_not have_content "Enterprise"
  10 + end
  11 +
  12 + step 'I should see public project details' do
  13 + page.should have_content '32 branches'
  14 + page.should have_content '16 tags'
  15 + end
  16 +
  17 + step 'I should see project readme' do
  18 + page.should have_content 'README.md'
  19 + end
  20 +
  21 + step 'public project "Community"' do
  22 + create :project_with_code, name: 'Community', public: true
  23 + end
  24 +
  25 + step 'private project "Enterprise"' do
  26 + create :project, name: 'Enterprise'
  27 + end
  28 +
  29 + private
  30 +
  31 + def project
  32 + @project ||= Project.find_by_name("Community")
  33 + end
  34 +end
  35 +
... ...
features/steps/shared/paths.rb
... ... @@ -275,6 +275,10 @@ module SharedPaths
275 275 visit public_root_path
276 276 end
277 277  
  278 + step 'I visit public page for "Community" project' do
  279 + visit public_project_path(Project.find_by_name("Community"))
  280 + end
  281 +
278 282 # ----------------------------------------
279 283 # Snippets
280 284 # ----------------------------------------
... ...