Commit 93bc1ff10866956f3d6edf60a1b2db280544be04
Exists in
master
and in
4 other branches
Merge branch 'master' into fix-messages-for-deleted-things
Showing
20 changed files
with
103 additions
and
114 deletions
Show diff stats
app/assets/stylesheets/gitlab_bootstrap/lists.scss
| @@ -13,7 +13,10 @@ ul { | @@ -13,7 +13,10 @@ ul { | ||
| 13 | border-bottom: 1px solid rgba(0, 0, 0, 0.05); | 13 | border-bottom: 1px solid rgba(0, 0, 0, 0.05); |
| 14 | 14 | ||
| 15 | &.smoke { background-color:#f5f5f5; } | 15 | &.smoke { background-color:#f5f5f5; } |
| 16 | - &:hover { background:$hover; } | 16 | + &:hover { |
| 17 | + background:$hover; | ||
| 18 | + border-bottom:1px solid #ADF; | ||
| 19 | + } | ||
| 17 | &:last-child { border:none } | 20 | &:last-child { border:none } |
| 18 | .author { color: #999; } | 21 | .author { color: #999; } |
| 19 | 22 |
app/assets/stylesheets/sections/events.scss
| @@ -5,32 +5,23 @@ | @@ -5,32 +5,23 @@ | ||
| 5 | .event_label { | 5 | .event_label { |
| 6 | &.pushed { | 6 | &.pushed { |
| 7 | padding:0 2px; | 7 | padding:0 2px; |
| 8 | - @extend .alert; | ||
| 9 | - @extend .alert-info; | ||
| 10 | } | 8 | } |
| 11 | 9 | ||
| 12 | &.opened { | 10 | &.opened { |
| 13 | padding:0 2px; | 11 | padding:0 2px; |
| 14 | - @extend .alert; | ||
| 15 | - @extend .alert-success; | ||
| 16 | } | 12 | } |
| 17 | 13 | ||
| 18 | &.closed { | 14 | &.closed { |
| 19 | padding:0 2px; | 15 | padding:0 2px; |
| 20 | - @extend .alert; | ||
| 21 | - @extend .alert-error; | ||
| 22 | } | 16 | } |
| 23 | 17 | ||
| 24 | &.merged { | 18 | &.merged { |
| 25 | padding:0 2px; | 19 | padding:0 2px; |
| 26 | - @extend .alert; | ||
| 27 | - @extend .alert-success; | ||
| 28 | } | 20 | } |
| 29 | 21 | ||
| 30 | &.left, | 22 | &.left, |
| 31 | &.joined { | 23 | &.joined { |
| 32 | padding:0 2px; | 24 | padding:0 2px; |
| 33 | - @extend .alert; | ||
| 34 | float:none; | 25 | float:none; |
| 35 | } | 26 | } |
| 36 | } | 27 | } |
app/assets/stylesheets/sections/tree.scss
| 1 | -#tree-holder { | ||
| 2 | - #tree-content-holder { | 1 | +.tree-holder { |
| 2 | + .tree-content-holder { | ||
| 3 | float:left; | 3 | float:left; |
| 4 | width:100%; | 4 | width:100%; |
| 5 | } | 5 | } |
| 6 | - #tree-readme-holder { | ||
| 7 | - float:left; | ||
| 8 | - width:100%; | ||
| 9 | - .readme { | ||
| 10 | - border:1px solid #ccc; | ||
| 11 | - padding:12px; | ||
| 12 | - background: #F7F7F7; | ||
| 13 | - | ||
| 14 | - pre { | ||
| 15 | - overflow: auto; | ||
| 16 | - } | ||
| 17 | - } | ||
| 18 | - } | ||
| 19 | 6 | ||
| 20 | .tree_progress { | 7 | .tree_progress { |
| 21 | display:none; | 8 | display:none; |
| @@ -25,7 +12,7 @@ | @@ -25,7 +12,7 @@ | ||
| 25 | } | 12 | } |
| 26 | } | 13 | } |
| 27 | 14 | ||
| 28 | - #tree-slider { | 15 | + .tree-table { |
| 29 | @include border-radius(0); | 16 | @include border-radius(0); |
| 30 | .tree-item { | 17 | .tree-item { |
| 31 | &:hover { | 18 | &:hover { |
| @@ -55,8 +42,7 @@ | @@ -55,8 +42,7 @@ | ||
| 55 | } | 42 | } |
| 56 | } | 43 | } |
| 57 | 44 | ||
| 58 | - | ||
| 59 | - #tree-slider { | 45 | + .tree-table { |
| 60 | td { | 46 | td { |
| 61 | background:#fafafa; | 47 | background:#fafafa; |
| 62 | } | 48 | } |
| @@ -72,5 +58,4 @@ | @@ -72,5 +58,4 @@ | ||
| 72 | text-decoration: underline; | 58 | text-decoration: underline; |
| 73 | } | 59 | } |
| 74 | } | 60 | } |
| 75 | - | ||
| 76 | } | 61 | } |
| @@ -0,0 +1,36 @@ | @@ -0,0 +1,36 @@ | ||
| 1 | +module EventsHelper | ||
| 2 | + def link_to_author(event) | ||
| 3 | + project = event.project | ||
| 4 | + tm = project.team_member_by_id(event.author_id) | ||
| 5 | + | ||
| 6 | + if tm | ||
| 7 | + link_to event.author_name, project_team_member_path(project, tm) | ||
| 8 | + else | ||
| 9 | + event.author_name | ||
| 10 | + end | ||
| 11 | + end | ||
| 12 | + | ||
| 13 | + def event_action_name(event) | ||
| 14 | + target = if event.target_type | ||
| 15 | + event.target_type.titleize.downcase | ||
| 16 | + else | ||
| 17 | + 'project' | ||
| 18 | + end | ||
| 19 | + | ||
| 20 | + [event.action_name, target].join(" ") | ||
| 21 | + end | ||
| 22 | + | ||
| 23 | + def event_image event | ||
| 24 | + event_image_path = if event.push? | ||
| 25 | + "event_push.png" | ||
| 26 | + elsif event.merged? | ||
| 27 | + "event_mr_merged.png" | ||
| 28 | + end | ||
| 29 | + | ||
| 30 | + return nil unless event_image_path | ||
| 31 | + | ||
| 32 | + content_tag :div, class: 'event_icon' do | ||
| 33 | + image_tag event_image_path | ||
| 34 | + end | ||
| 35 | + end | ||
| 36 | +end |
app/helpers/issues_helper.rb
app/helpers/projects_helper.rb
| @@ -6,5 +6,9 @@ module ProjectsHelper | @@ -6,5 +6,9 @@ module ProjectsHelper | ||
| 6 | def remove_from_team_message(project, member) | 6 | def remove_from_team_message(project, member) |
| 7 | "You are going to remove #{member.user_name} from #{project.name}. Are you sure?" | 7 | "You are going to remove #{member.user_name} from #{project.name}. Are you sure?" |
| 8 | end | 8 | end |
| 9 | + | ||
| 10 | + def link_to_project project | ||
| 11 | + link_to project.name, project | ||
| 12 | + end | ||
| 9 | end | 13 | end |
| 10 | 14 |
app/models/event.rb
| @@ -58,6 +58,10 @@ class Event < ActiveRecord::Base | @@ -58,6 +58,10 @@ class Event < ActiveRecord::Base | ||
| 58 | end | 58 | end |
| 59 | end | 59 | end |
| 60 | 60 | ||
| 61 | + def target_title | ||
| 62 | + target.try :title | ||
| 63 | + end | ||
| 64 | + | ||
| 61 | def push? | 65 | def push? |
| 62 | action == self.class::Pushed && valid_push? | 66 | action == self.class::Pushed && valid_push? |
| 63 | end | 67 | end |
app/views/events/_event.html.haml
| 1 | - if event.allowed? | 1 | - if event.allowed? |
| 2 | %div.event-item | 2 | %div.event-item |
| 3 | - - if event.issue? | ||
| 4 | - = render "events/event_issue", event: event | 3 | + = event_image(event) |
| 4 | + = image_tag gravatar_icon(event.author_email), class: "avatar" | ||
| 5 | 5 | ||
| 6 | - - elsif event.merge_request? | ||
| 7 | - = render "events/event_merge_request", event: event | ||
| 8 | - | ||
| 9 | - - elsif event.push? | ||
| 10 | - = render "events/event_push", event: event | ||
| 11 | - | ||
| 12 | - - elsif event.membership_changed? | ||
| 13 | - = render "events/event_membership_changed", event: event | 6 | + - if event.push? |
| 7 | + = render "events/event/push", event: event | ||
| 8 | + - else | ||
| 9 | + = render "events/event/common", event: event | ||
| 14 | 10 | ||
| 11 | + .clearfix | ||
| 15 | %span.cgray.right | 12 | %span.cgray.right |
| 16 | = time_ago_in_words(event.created_at) | 13 | = time_ago_in_words(event.created_at) |
| 17 | ago. | 14 | ago. |
app/views/events/_event_issue.html.haml
| @@ -1,8 +0,0 @@ | @@ -1,8 +0,0 @@ | ||
| 1 | -= image_tag gravatar_icon(event.author_email), class: "avatar" | ||
| 2 | -.event-title | ||
| 3 | - %strong.author_name #{event.author_name} | ||
| 4 | - %span.event_label{class: event.action_name} #{event.action_name} issue | ||
| 5 | - = link_to project_issue_path(event.project, event.issue) do | ||
| 6 | - %strong= truncate event.issue_title | ||
| 7 | - at | ||
| 8 | - %strong= link_to event.project.name, event.project |
app/views/events/_event_membership_changed.html.haml
| @@ -1,9 +0,0 @@ | @@ -1,9 +0,0 @@ | ||
| 1 | -= image_tag gravatar_icon(event.author_email), class: "avatar" | ||
| 2 | -.event-title | ||
| 3 | - %strong.author_name #{event.author_name} | ||
| 4 | - %span.event_label{class: event.action_name} #{event.action_name} project | ||
| 5 | - %strong= link_to event.project_name, event.project | ||
| 6 | - %span.cgray | ||
| 7 | - = time_ago_in_words(event.created_at) | ||
| 8 | - ago. | ||
| 9 | - |
app/views/events/_event_merge_request.html.haml
| @@ -1,16 +0,0 @@ | @@ -1,16 +0,0 @@ | ||
| 1 | -- if event.action_name == "merged" | ||
| 2 | - .event_icon= image_tag "event_mr_merged.png" | ||
| 3 | -= image_tag gravatar_icon(event.author_email), class: "avatar" | ||
| 4 | -.event-title | ||
| 5 | - %strong.author_name #{event.author_name} | ||
| 6 | - %span.event_label{class: event.action_name} #{event.action_name} merge request | ||
| 7 | - = link_to project_merge_request_path(event.project, event.merge_request) do | ||
| 8 | - %strong= truncate event.merge_request_title | ||
| 9 | - at | ||
| 10 | - %strong= link_to event.project.name, event.project | ||
| 11 | -.event-body | ||
| 12 | - .event-info | ||
| 13 | - %span= event.merge_request.source_branch | ||
| 14 | - → | ||
| 15 | - %span= event.merge_request.target_branch | ||
| 16 | - |
app/views/events/_event_push.html.haml
| @@ -1,30 +0,0 @@ | @@ -1,30 +0,0 @@ | ||
| 1 | -%div | ||
| 2 | - .event_icon= image_tag "event_push.png" | ||
| 3 | - = image_tag gravatar_icon(event.author_email), class: "avatar" | ||
| 4 | - | ||
| 5 | - .event-title | ||
| 6 | - %strong.author_name #{event.author_name} | ||
| 7 | - %span.event_label.pushed #{event.push_action_name} #{event.ref_type} | ||
| 8 | - - if event.rm_ref? | ||
| 9 | - %strong= event.ref_name | ||
| 10 | - - else | ||
| 11 | - = link_to project_commits_path(event.project, event.ref_name) do | ||
| 12 | - %strong= event.ref_name | ||
| 13 | - at | ||
| 14 | - %strong= link_to event.project.name, event.project | ||
| 15 | - | ||
| 16 | - - if event.push_with_commits? | ||
| 17 | - - project = event.project | ||
| 18 | - .event-body | ||
| 19 | - %ul.unstyled.event_commits | ||
| 20 | - - few_commits = event.commits[0...2] | ||
| 21 | - - few_commits.each do |commit| | ||
| 22 | - = render "events/commit", commit: commit, project: project | ||
| 23 | - | ||
| 24 | - - if event.commits_count > 1 | ||
| 25 | - %li.commits-stat | ||
| 26 | - - if event.commits_count > 2 | ||
| 27 | - %span ... and #{event.commits_count - 2} more commits. | ||
| 28 | - = link_to project_compare_path(event.project, from: event.parent_commit.id, to: event.last_commit.id) do | ||
| 29 | - %strong Compare → #{event.parent_commit.id[0..7]}...#{event.last_commit.id[0..7]} | ||
| 30 | - .clearfix |
| @@ -0,0 +1,25 @@ | @@ -0,0 +1,25 @@ | ||
| 1 | +.event-title | ||
| 2 | + %span.author_name= link_to_author event | ||
| 3 | + %span.event_label.pushed #{event.push_action_name} #{event.ref_type} | ||
| 4 | + - if event.rm_ref? | ||
| 5 | + %strong= event.ref_name | ||
| 6 | + - else | ||
| 7 | + = link_to project_commits_path(event.project, event.ref_name) do | ||
| 8 | + %strong= event.ref_name | ||
| 9 | + at | ||
| 10 | + %strong= link_to event.project.name, event.project | ||
| 11 | + | ||
| 12 | +- if event.push_with_commits? | ||
| 13 | + - project = event.project | ||
| 14 | + .event-body | ||
| 15 | + %ul.unstyled.event_commits | ||
| 16 | + - few_commits = event.commits[0...2] | ||
| 17 | + - few_commits.each do |commit| | ||
| 18 | + = render "events/commit", commit: commit, project: project | ||
| 19 | + | ||
| 20 | + - if event.commits_count > 1 | ||
| 21 | + %li.commits-stat | ||
| 22 | + - if event.commits_count > 2 | ||
| 23 | + %span ... and #{event.commits_count - 2} more commits. | ||
| 24 | + = link_to project_compare_path(event.project, from: event.parent_commit.id, to: event.last_commit.id) do | ||
| 25 | + %strong Compare → #{event.parent_commit.id[0..7]}...#{event.last_commit.id[0..7]} |
app/views/notes/_common_form.html.haml
| @@ -41,7 +41,7 @@ | @@ -41,7 +41,7 @@ | ||
| 41 | $(function(){ | 41 | $(function(){ |
| 42 | var names = #{@project.users.pluck(:name)}, emoji = ['+1', '-1']; | 42 | var names = #{@project.users.pluck(:name)}, emoji = ['+1', '-1']; |
| 43 | var emoji = $.map(emoji, function(value, i) {return {key:value + ':', name:value}}); | 43 | var emoji = $.map(emoji, function(value, i) {return {key:value + ':', name:value}}); |
| 44 | - $('#note_note'). | 44 | + $('#note_note, .per_line_form .line-note-text'). |
| 45 | atWho('@', { data: names }). | 45 | atWho('@', { data: names }). |
| 46 | atWho(':', { | 46 | atWho(':', { |
| 47 | data: emoji, | 47 | data: emoji, |
app/views/tree/_tree.html.haml
| @@ -8,12 +8,12 @@ | @@ -8,12 +8,12 @@ | ||
| 8 | %li= link | 8 | %li= link |
| 9 | .clear | 9 | .clear |
| 10 | %div.tree_progress | 10 | %div.tree_progress |
| 11 | -#tree-content-holder | 11 | +%div#tree-content-holder.tree-content-holder |
| 12 | - if tree.is_blob? | 12 | - if tree.is_blob? |
| 13 | = render partial: "tree/tree_file", locals: { name: tree.name, content: tree.data, file: tree } | 13 | = render partial: "tree/tree_file", locals: { name: tree.name, content: tree.data, file: tree } |
| 14 | - else | 14 | - else |
| 15 | - contents = tree.contents | 15 | - contents = tree.contents |
| 16 | - %table#tree-slider{class: "table_#{@hex_path}" } | 16 | + %table#tree-slider{class: "table_#{@hex_path} tree-table" } |
| 17 | %thead | 17 | %thead |
| 18 | %th Name | 18 | %th Name |
| 19 | %th Last Update | 19 | %th Last Update |
app/views/tree/show.html.haml
doc/installation.md
| @@ -112,7 +112,6 @@ Generate key: | @@ -112,7 +112,6 @@ Generate key: | ||
| 112 | 112 | ||
| 113 | Clone GitLab's fork of the Gitolite source code: | 113 | Clone GitLab's fork of the Gitolite source code: |
| 114 | 114 | ||
| 115 | - cd /home/git | ||
| 116 | sudo -H -u git git clone -b gl-v304 https://github.com/gitlabhq/gitolite.git /home/git/gitolite | 115 | sudo -H -u git git clone -b gl-v304 https://github.com/gitlabhq/gitolite.git /home/git/gitolite |
| 117 | 116 | ||
| 118 | Setup: | 117 | Setup: |
features/dashboard/dashboard.feature
| @@ -18,10 +18,10 @@ Feature: Dashboard | @@ -18,10 +18,10 @@ Feature: Dashboard | ||
| 18 | Scenario: I should see User joined Project event | 18 | Scenario: I should see User joined Project event |
| 19 | Given user with name "John Doe" joined project "Shop" | 19 | Given user with name "John Doe" joined project "Shop" |
| 20 | When I visit dashboard page | 20 | When I visit dashboard page |
| 21 | - Then I should see "John Doe joined project Shop" event | 21 | + Then I should see "John Doe joined project at Shop" event |
| 22 | 22 | ||
| 23 | Scenario: I should see User left Project event | 23 | Scenario: I should see User left Project event |
| 24 | Given user with name "John Doe" joined project "Shop" | 24 | Given user with name "John Doe" joined project "Shop" |
| 25 | And user with name "John Doe" left project "Shop" | 25 | And user with name "John Doe" left project "Shop" |
| 26 | When I visit dashboard page | 26 | When I visit dashboard page |
| 27 | - Then I should see "John Doe left project Shop" event | 27 | + Then I should see "John Doe left project at Shop" event |
features/steps/dashboard/dashboard.rb
| @@ -41,8 +41,8 @@ class Dashboard < Spinach::FeatureSteps | @@ -41,8 +41,8 @@ class Dashboard < Spinach::FeatureSteps | ||
| 41 | ) | 41 | ) |
| 42 | end | 42 | end |
| 43 | 43 | ||
| 44 | - Then 'I should see "John Doe joined project Shop" event' do | ||
| 45 | - page.should have_content "John Doe joined project Shop" | 44 | + Then 'I should see "John Doe joined project at Shop" event' do |
| 45 | + page.should have_content "John Doe joined project at Shop" | ||
| 46 | end | 46 | end |
| 47 | 47 | ||
| 48 | And 'user with name "John Doe" left project "Shop"' do | 48 | And 'user with name "John Doe" left project "Shop"' do |
| @@ -55,8 +55,8 @@ class Dashboard < Spinach::FeatureSteps | @@ -55,8 +55,8 @@ class Dashboard < Spinach::FeatureSteps | ||
| 55 | ) | 55 | ) |
| 56 | end | 56 | end |
| 57 | 57 | ||
| 58 | - Then 'I should see "John Doe left project Shop" event' do | ||
| 59 | - page.should have_content "John Doe left project Shop" | 58 | + Then 'I should see "John Doe left project at Shop" event' do |
| 59 | + page.should have_content "John Doe left project at Shop" | ||
| 60 | end | 60 | end |
| 61 | 61 | ||
| 62 | And 'I own project "Shop"' do | 62 | And 'I own project "Shop"' do |