Commit 3fa6ed8eb2b0f0b7e63bc5ac3d3b893fb827d0f6

Authored by Dmitriy Zaporozhets
2 parents 8e7230fd 012d62b1

Merge branch 'master' into stable

  1 +v 3.0.2
  2 + - Fixed gitlab:app:setup
  3 + - Fixed application error on empty project in admin area
  4 + - Restyled last push widget
  5 +
1 v 3.0.1 6 v 3.0.1
2 - Fixed git over http 7 - Fixed git over http
3 8
1 -3.0.1 1 +3.0.2
app/assets/stylesheets/gitlab_bootstrap/buttons.scss
@@ -24,6 +24,22 @@ @@ -24,6 +24,22 @@
24 } 24 }
25 } 25 }
26 26
  27 + &.btn-info {
  28 + background:#5aB9C3;
  29 + border-color: $blue_link;
  30 + color:#fff;
  31 + text-shadow: 0 1px 1px #268;
  32 + &:hover {
  33 + background:$blue_link;
  34 + color:#fff;
  35 + }
  36 +
  37 + &.disabled {
  38 + color:#fff;
  39 + background:#29B;
  40 + }
  41 + }
  42 +
27 &.success { 43 &.success {
28 @extend .btn-success; 44 @extend .btn-success;
29 45
app/assets/stylesheets/gitlab_bootstrap/tables.scss
@@ -5,6 +5,12 @@ table { @@ -5,6 +5,12 @@ table {
5 border:1px solid #bbb; 5 border:1px solid #bbb;
6 width:100%; 6 width:100%;
7 7
  8 + &.low {
  9 + td {
  10 + line-height:18px;
  11 + }
  12 + }
  13 +
8 th { 14 th {
9 font-weight: bold; 15 font-weight: bold;
10 vertical-align: middle; 16 vertical-align: middle;
@@ -26,6 +32,8 @@ table { @@ -26,6 +32,8 @@ table {
26 32
27 td { 33 td {
28 border-color:#f1f1f1; 34 border-color:#f1f1f1;
  35 + line-height:28px;
  36 +
29 &:first-child { 37 &:first-child {
30 border-left:1px solid #bbb; 38 border-left:1px solid #bbb;
31 } 39 }
app/assets/stylesheets/sections/commits.scss
@@ -101,6 +101,11 @@ @@ -101,6 +101,11 @@
101 } 101 }
102 } 102 }
103 103
  104 + table {
  105 + td {
  106 + line-height:18px;
  107 + }
  108 + }
104 } 109 }
105 .diff_file_content_image { 110 .diff_file_content_image {
106 background:#eee; 111 background:#eee;
app/assets/stylesheets/sections/events.scss
@@ -97,14 +97,21 @@ @@ -97,14 +97,21 @@
97 * 97 *
98 */ 98 */
99 .event_lp { 99 .event_lp {
100 - @extend .ui-box;  
101 color:#777; 100 color:#777;
102 - margin-bottom:20px;  
103 - padding:8px;  
104 - @include border-radius(4px); 101 + padding:10px;
105 min-height:22px; 102 min-height:22px;
  103 + border-left: 5px solid #5AB9C3;
  104 + margin-bottom:20px;
  105 + background:#f9f9f9;
106 106
107 .avatar { 107 .avatar {
108 width:24px; 108 width:24px;
109 } 109 }
  110 +
  111 + .btn-new-mr {
  112 + @extend .btn-info;
  113 + @extend .small;
  114 + @extend .right;
  115 + margin: -3px;
  116 + }
110 } 117 }
app/assets/stylesheets/sections/tree.scss
@@ -48,6 +48,7 @@ @@ -48,6 +48,7 @@
48 padding: 2px 10px; 48 padding: 2px 10px;
49 } 49 }
50 td { 50 td {
  51 + line-height:20px;
51 background:#fafafa; 52 background:#fafafa;
52 } 53 }
53 } 54 }
app/controllers/admin/groups_controller.rb
@@ -64,7 +64,7 @@ class Admin::GroupsController < AdminController @@ -64,7 +64,7 @@ class Admin::GroupsController < AdminController
64 def destroy 64 def destroy
65 @group.destroy 65 @group.destroy
66 66
67 - redirect_to groups_url, notice: 'Group was successfully deleted.' 67 + redirect_to admin_groups_path, notice: 'Group was successfully deleted.'
68 end 68 end
69 69
70 private 70 private
app/roles/repository.rb
@@ -137,6 +137,8 @@ module Repository @@ -137,6 +137,8 @@ module Repository
137 137
138 def has_commits? 138 def has_commits?
139 !!commit 139 !!commit
  140 + rescue Grit::NoSuchPathError
  141 + false
140 end 142 end
141 143
142 def root_ref 144 def root_ref
app/views/admin/groups/index.html.haml
1 = render 'admin/shared/projects_head' 1 = render 'admin/shared/projects_head'
2 %h3.page_title 2 %h3.page_title
3 Groups 3 Groups
  4 + %small
  5 + allows you to keep projects organized.
  6 + Use groups for uniting related projects.
  7 +
4 = link_to 'New Group', new_admin_group_path, class: "btn small right" 8 = link_to 'New Group', new_admin_group_path, class: "btn small right"
5 %br 9 %br
6 = form_tag admin_groups_path, method: :get, class: 'form-inline' do 10 = form_tag admin_groups_path, method: :get, class: 'form-inline' do
app/views/admin/projects/show.html.haml
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 %i.icon-edit 5 %i.icon-edit
6 Edit 6 Edit
7 7
8 -- if !@admin_project.has_post_receive_file? && @admin_project.commit 8 +- if !@admin_project.has_post_receive_file? && @admin_project.has_commits?
9 %br 9 %br
10 .alert.alert-error 10 .alert.alert-error
11 %span 11 %span
app/views/dashboard/index.html.haml
1 - if @projects.any? 1 - if @projects.any?
2 .projects 2 .projects
3 .activities.span8 3 .activities.span8
  4 + = render "events/event_last_push", event: @last_push
4 = render 'shared/no_ssh' 5 = render 'shared/no_ssh'
5 - if @events.any? 6 - if @events.any?
6 .content_list= render @events 7 .content_list= render @events
@@ -8,7 +9,6 @@ @@ -8,7 +9,6 @@
8 %h4.nothing_here_message Projects activity will be displayed here 9 %h4.nothing_here_message Projects activity will be displayed here
9 .loading.hide 10 .loading.hide
10 .side 11 .side
11 - = render "events/event_last_push", event: @last_push  
12 - if @groups.present? 12 - if @groups.present?
13 = render "groups", groups: @groups 13 = render "groups", groups: @groups
14 = render "projects", projects: @projects 14 = render "projects", projects: @projects
app/views/events/_event_last_push.html.haml
1 - if show_last_push_widget?(event) 1 - if show_last_push_widget?(event)
2 .event_lp 2 .event_lp
3 - %div  
4 - = image_tag gravatar_icon(event.author_email), class: "avatar"  
5 - %span You pushed to  
6 - = event.ref_type  
7 - = link_to project_commits_path(event.project, event.ref_name) do  
8 - %strong= truncate(event.ref_name, length: 28)  
9 - at  
10 - %strong= link_to event.project.name, event.project 3 + = image_tag "event_push.png"
  4 +  
  5 + %span You pushed to
  6 + = link_to project_commits_path(event.project, event.ref_name) do
  7 + %strong= truncate(event.ref_name, length: 28)
  8 + at
  9 + %strong= link_to event.project.name, event.project
  10 + %span
  11 + = time_ago_in_words(event.created_at)
  12 + ago.
11 13
12 - = link_to new_mr_path_from_push_event(event), title: "New Merge Request", class: "btn very_small" do  
13 - Create Merge Request 14 + = link_to new_mr_path_from_push_event(event), title: "New Merge Request", class: "btn btn-new-mr" do
  15 + Create Merge Request
app/views/groups/show.html.haml
1 .projects 1 .projects
2 .activities.span8 2 .activities.span8
  3 + = render "events/event_last_push", event: @last_push
3 = link_to dashboard_path, class: 'btn very_small' do 4 = link_to dashboard_path, class: 'btn very_small' do
4 ← To dashboard 5 ← To dashboard
5   6  
@@ -12,7 +13,6 @@ @@ -12,7 +13,6 @@
12 %h4.nothing_here_message Projects activity will be displayed here 13 %h4.nothing_here_message Projects activity will be displayed here
13 .loading.hide 14 .loading.hide
14 .side 15 .side
15 - = render "events/event_last_push", event: @last_push  
16 = render "projects", projects: @projects 16 = render "projects", projects: @projects
17 %div 17 %div
18 %span.rss-icon 18 %span.rss-icon
app/views/keys/_show.html.haml
1 %tr 1 %tr
2 %td 2 %td
3 = link_to key_path(key) do 3 = link_to key_path(key) do
4 - %p  
5 - %strong= key.title 4 + %strong= key.title
6 %td 5 %td
7 %span.cgray 6 %span.cgray
8 Added 7 Added
app/views/projects/files.html.haml
@@ -4,14 +4,13 @@ @@ -4,14 +4,13 @@
4 %thead 4 %thead
5 %tr 5 %tr
6 %th File name 6 %th File name
7 - %th 7 + %th
8 8
9 - @notes.each do |note| 9 - @notes.each do |note|
10 %tr 10 %tr
11 %td 11 %td
12 %a{href: note.attachment.url} 12 %a{href: note.attachment.url}
13 - = image_tag gravatar_icon(note.author_email), class: "left", width: 16  
14 -   13 + = image_tag gravatar_icon(note.author_email), class: "avatar s24"
15 = note.attachment_identifier 14 = note.attachment_identifier
16 %td 15 %td
17 Added 16 Added
app/views/team_members/_team.html.haml
1 - grouper_project_members(@project).each do |access, members| 1 - grouper_project_members(@project).each do |access, members|
2 - %table 2 + %table.low
3 %thead 3 %thead
4 %tr 4 %tr
5 %th.span7 5 %th.span7
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 # 11 #
12 # It's strongly recommended to check this file into your version control system. 12 # It's strongly recommended to check this file into your version control system.
13 13
14 -ActiveRecord::Schema.define(:version => 20121002151033) do 14 +ActiveRecord::Schema.define(:version => 20121009205010) do
15 15
16 create_table "events", :force => true do |t| 16 create_table "events", :force => true do |t|
17 t.string "target_type" 17 t.string "target_type"
doc/installation.md
@@ -157,6 +157,10 @@ Add your user to the `git` group: @@ -157,6 +157,10 @@ Add your user to the `git` group:
157 157
158 sudo usermod -a -G git gitlab 158 sudo usermod -a -G git gitlab
159 159
  160 +Add `git` user to `gitlab` group:
  161 +
  162 + sudo usermod -a -G gitlab git
  163 +
160 Generate key: 164 Generate key:
161 165
162 sudo -H -u gitlab ssh-keygen -q -N '' -t rsa -f /home/gitlab/.ssh/id_rsa 166 sudo -H -u gitlab ssh-keygen -q -N '' -t rsa -f /home/gitlab/.ssh/id_rsa
features/admin/groups.feature 0 → 100644
@@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
  1 +Feature: Admin Groups
  2 + Background:
  3 + Given I sign in as an admin
  4 + And I visit admin groups page
  5 +
  6 + Scenario: Create a group
  7 + When I click new group link
  8 + And submit form with new group info
  9 + Then I should be redirected to group page
  10 + And I should see newly created group
features/group/group.feature
@@ -7,3 +7,13 @@ Feature: Groups @@ -7,3 +7,13 @@ Feature: Groups
7 When I visit group page 7 When I visit group page
8 Then I should see projects list 8 Then I should see projects list
9 And I should see projects activity feed 9 And I should see projects activity feed
  10 +
  11 + Scenario: I should see group issues list
  12 + Given project from group has issues assigned to me
  13 + When I visit group issues page
  14 + Then I should see issues from this group assigned to me
  15 +
  16 + Scenario: I should see group merge requests list
  17 + Given project from group has merge requests assigned to me
  18 + When I visit group merge requests page
  19 + Then I should see merge requests from this group assigned to me
features/steps/admin/admin_groups.rb 0 → 100644
@@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
  1 +class AdminGroups < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedPaths
  4 + include SharedActiveTab
  5 +
  6 + When 'I click new group link' do
  7 + click_link "New Group"
  8 + end
  9 +
  10 + And 'submit form with new group info' do
  11 + fill_in 'group_name', :with => 'gitlab'
  12 + fill_in 'group_code', :with => 'gitlab'
  13 + click_button "Save group"
  14 + end
  15 +
  16 + Then 'I should see newly created group' do
  17 + page.should have_content "Group: gitlab"
  18 + end
  19 +
  20 + Then 'I should be redirected to group page' do
  21 + current_path.should == admin_group_path(Group.last)
  22 + end
  23 +end
  24 +
features/steps/dashboard/dashboard.rb
@@ -16,7 +16,7 @@ class Dashboard &lt; Spinach::FeatureSteps @@ -16,7 +16,7 @@ class Dashboard &lt; Spinach::FeatureSteps
16 end 16 end
17 17
18 Then 'I should see last push widget' do 18 Then 'I should see last push widget' do
19 - page.should have_content "You pushed to branch new_design" 19 + page.should have_content "You pushed to new_design"
20 page.should have_link "Create Merge Request" 20 page.should have_link "Create Merge Request"
21 end 21 end
22 22
features/steps/group/group.rb
@@ -2,10 +2,6 @@ class Groups &lt; Spinach::FeatureSteps @@ -2,10 +2,6 @@ class Groups &lt; Spinach::FeatureSteps
2 include SharedAuthentication 2 include SharedAuthentication
3 include SharedPaths 3 include SharedPaths
4 4
5 - When 'I visit group page' do  
6 - visit group_path(current_group)  
7 - end  
8 -  
9 Then 'I should see projects list' do 5 Then 'I should see projects list' do
10 current_user.projects.each do |project| 6 current_user.projects.each do |project|
11 page.should have_link project.name 7 page.should have_link project.name
@@ -24,9 +20,43 @@ class Groups &lt; Spinach::FeatureSteps @@ -24,9 +20,43 @@ class Groups &lt; Spinach::FeatureSteps
24 page.should have_content 'closed issue' 20 page.should have_content 'closed issue'
25 end 21 end
26 22
  23 + Then 'I should see issues from this group assigned to me' do
  24 + assigned_to_me(:issues).each do |issue|
  25 + page.should have_content issue.title
  26 + end
  27 + end
  28 +
  29 + Then 'I should see merge requests from this group assigned to me' do
  30 + assigned_to_me(:merge_requests).each do |issue|
  31 + page.should have_content issue.title
  32 + end
  33 + end
  34 +
  35 + Given 'project from group has issues assigned to me' do
  36 + create :issue,
  37 + project: project,
  38 + assignee: current_user,
  39 + author: current_user
  40 + end
  41 +
  42 + Given 'project from group has merge requests assigned to me' do
  43 + create :merge_request,
  44 + project: project,
  45 + assignee: current_user,
  46 + author: current_user
  47 + end
  48 +
27 protected 49 protected
28 50
29 def current_group 51 def current_group
30 @group ||= Group.first 52 @group ||= Group.first
31 end 53 end
  54 +
  55 + def project
  56 + current_group.projects.first
  57 + end
  58 +
  59 + def assigned_to_me key
  60 + project.send(key).where(assignee_id: current_user.id)
  61 + end
32 end 62 end
features/steps/shared/paths.rb
@@ -6,6 +6,22 @@ module SharedPaths @@ -6,6 +6,22 @@ module SharedPaths
6 end 6 end
7 7
8 # ---------------------------------------- 8 # ----------------------------------------
  9 + # Group
  10 + # ----------------------------------------
  11 +
  12 + When 'I visit group page' do
  13 + visit group_path(current_group)
  14 + end
  15 +
  16 + When 'I visit group issues page' do
  17 + visit issues_group_path(current_group)
  18 + end
  19 +
  20 + When 'I visit group merge requests page' do
  21 + visit merge_requests_group_path(current_group)
  22 + end
  23 +
  24 + # ----------------------------------------
9 # Dashboard 25 # Dashboard
10 # ---------------------------------------- 26 # ----------------------------------------
11 27
@@ -85,6 +101,10 @@ module SharedPaths @@ -85,6 +101,10 @@ module SharedPaths
85 visit admin_resque_path 101 visit admin_resque_path
86 end 102 end
87 103
  104 + And 'I visit admin groups page' do
  105 + visit admin_groups_path
  106 + end
  107 +
88 # ---------------------------------------- 108 # ----------------------------------------
89 # Generic Project 109 # Generic Project
90 # ---------------------------------------- 110 # ----------------------------------------