mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-11 21:56:19 +10:00
Merge branch 'master' of gitlab.com:gitlab-org/gitlab-ce
This commit is contained in:
@@ -62,9 +62,11 @@ class Dispatcher
|
||||
shortcut_handler = new ShortcutsNavigation()
|
||||
when 'projects:commits:show'
|
||||
shortcut_handler = new ShortcutsNavigation()
|
||||
when 'projects:show'
|
||||
when 'projects:activity'
|
||||
new Activities()
|
||||
shortcut_handler = new ShortcutsNavigation()
|
||||
when 'projects:show'
|
||||
shortcut_handler = new ShortcutsNavigation()
|
||||
when 'groups:show'
|
||||
new Activities()
|
||||
shortcut_handler = new ShortcutsNavigation()
|
||||
|
||||
@@ -1,15 +1,3 @@
|
||||
class @ProjectShow
|
||||
constructor: ->
|
||||
$('.project-home-panel .star').on 'ajax:success', (e, data, status, xhr) ->
|
||||
$(@).toggleClass('on').find('.count').html(data.star_count)
|
||||
.on 'ajax:error', (e, xhr, status, error) ->
|
||||
new Flash('Star toggle failed. Try again later.', 'alert')
|
||||
|
||||
$("a[data-toggle='tab']").on "shown.bs.tab", (e) ->
|
||||
$.cookie "default_view", $(e.target).attr("href"), { expires: 30, path: '/' }
|
||||
|
||||
defaultView = $.cookie("default_view")
|
||||
if defaultView
|
||||
$("a[href=" + defaultView + "]").tab "show"
|
||||
else
|
||||
$("a[data-toggle='tab']:first").tab "show"
|
||||
# I kept class for future
|
||||
|
||||
@@ -4,6 +4,7 @@ class @ShortcutsNavigation extends Shortcuts
|
||||
constructor: ->
|
||||
super()
|
||||
Mousetrap.bind('g p', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-project'))
|
||||
Mousetrap.bind('g e', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-project-activity'))
|
||||
Mousetrap.bind('g f', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-tree'))
|
||||
Mousetrap.bind('g c', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-commits'))
|
||||
Mousetrap.bind('g n', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-network'))
|
||||
|
||||
@@ -44,20 +44,18 @@
|
||||
.project-home-panel {
|
||||
padding-left: 0 !important;
|
||||
|
||||
.project-home-row {
|
||||
.project-home-desc {
|
||||
margin-right: 0 !important;
|
||||
float: none !important;
|
||||
}
|
||||
|
||||
.project-repo-buttons {
|
||||
position: static;
|
||||
margin-top: 15px;
|
||||
width: 100%;
|
||||
float: none;
|
||||
text-align: left;
|
||||
}
|
||||
.project-avatar {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.project-repo-buttons,
|
||||
.git-clone-holder {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.project-stats {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.container .title {
|
||||
|
||||
@@ -15,48 +15,31 @@
|
||||
}
|
||||
|
||||
.project-home-panel {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 15px;
|
||||
position: relative;
|
||||
padding-left: 65px;
|
||||
min-height: 50px;
|
||||
text-align: center;
|
||||
margin-bottom: 20px;
|
||||
|
||||
.project-identicon-holder {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: -14px;
|
||||
margin-bottom: 15px;
|
||||
|
||||
.avatar {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
.avatar, .identicon {
|
||||
margin: 0 auto;
|
||||
float: none;
|
||||
}
|
||||
|
||||
.identicon {
|
||||
font-size: 26px;
|
||||
line-height: 50px;
|
||||
@include border-radius(50%);
|
||||
}
|
||||
}
|
||||
|
||||
.project-home-row {
|
||||
@extend .clearfix;
|
||||
margin-bottom: 15px;
|
||||
|
||||
&.project-home-row-top {
|
||||
margin-bottom: 15px;
|
||||
.lead {
|
||||
p {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
|
||||
.project-home-desc {
|
||||
color: $gray;
|
||||
float: left;
|
||||
font-size: 16px;
|
||||
line-height: 1.3;
|
||||
margin-right: 250px;
|
||||
|
||||
// Render Markdown-generated HTML inline for this block
|
||||
p {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
.git-clone-holder {
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.visibility-level-label {
|
||||
@@ -67,22 +50,22 @@
|
||||
}
|
||||
|
||||
.project-repo-buttons {
|
||||
margin-top: -3px;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
width: 265px;
|
||||
text-align: right;
|
||||
margin-top: 25px;
|
||||
margin-bottom: 25px;
|
||||
|
||||
.btn {
|
||||
@extend .btn-info;
|
||||
|
||||
margin-left: 10px;
|
||||
font-weight: bold;
|
||||
font-size: 14px;
|
||||
line-height: 16px;
|
||||
padding: 8px 12px;
|
||||
|
||||
.count {
|
||||
padding-left: 10px;
|
||||
border-left: 1px solid #ccc;
|
||||
padding-left: 7px;
|
||||
display: inline-block;
|
||||
margin-left: 10px;
|
||||
margin-left: 7px;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -307,3 +290,15 @@ table.table.protected-branches-list tr.no-border {
|
||||
float: left;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.project-stats {
|
||||
text-align: center;
|
||||
|
||||
ul.nav-pills { display:inline-block; }
|
||||
li { display:inline; }
|
||||
a { float:left; }
|
||||
}
|
||||
|
||||
pre.light-well {
|
||||
border-color: #f1f1f1;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ class ProjectsController < ApplicationController
|
||||
|
||||
# Authorize
|
||||
before_action :authorize_admin_project!, only: [:edit, :update, :destroy, :transfer, :archive, :unarchive]
|
||||
before_action :event_filter, only: :show
|
||||
before_action :event_filter, only: [:show, :activity]
|
||||
|
||||
layout :determine_layout
|
||||
|
||||
@@ -59,14 +59,22 @@ class ProjectsController < ApplicationController
|
||||
end
|
||||
end
|
||||
|
||||
def activity
|
||||
respond_to do |format|
|
||||
format.html
|
||||
format.json do
|
||||
load_events
|
||||
pager_json('events/_events', @events.count)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def show
|
||||
if @project.import_in_progress?
|
||||
redirect_to namespace_project_import_path(@project.namespace, @project)
|
||||
return
|
||||
end
|
||||
|
||||
@show_star = !(current_user && current_user.starred?(@project))
|
||||
|
||||
respond_to do |format|
|
||||
format.html do
|
||||
if @project.repository_exists?
|
||||
@@ -81,11 +89,6 @@ class ProjectsController < ApplicationController
|
||||
end
|
||||
end
|
||||
|
||||
format.json do
|
||||
load_events
|
||||
pager_json('events/_events', @events.count)
|
||||
end
|
||||
|
||||
format.atom do
|
||||
load_events
|
||||
render layout: false
|
||||
@@ -147,11 +150,14 @@ class ProjectsController < ApplicationController
|
||||
def toggle_star
|
||||
current_user.toggle_star(@project)
|
||||
@project.reload
|
||||
render json: { star_count: @project.star_count }
|
||||
|
||||
render json: {
|
||||
html: view_to_html_string("projects/buttons/_star")
|
||||
}
|
||||
end
|
||||
|
||||
def markdown_preview
|
||||
text = params[:text]
|
||||
text = params[:text]
|
||||
|
||||
ext = Gitlab::ReferenceExtractor.new(@project, current_user)
|
||||
ext.analyze(text)
|
||||
|
||||
@@ -17,6 +17,10 @@ module GitlabRoutingHelper
|
||||
namespace_project_path(project.namespace, project, *args)
|
||||
end
|
||||
|
||||
def activity_project_path(project, *args)
|
||||
activity_namespace_project_path(project.namespace, project, *args)
|
||||
end
|
||||
|
||||
def edit_project_path(project, *args)
|
||||
edit_namespace_project_path(project.namespace, project, *args)
|
||||
end
|
||||
|
||||
@@ -84,53 +84,6 @@ module ProjectsHelper
|
||||
@project.milestones.active.order("due_date, title ASC")
|
||||
end
|
||||
|
||||
def link_to_toggle_star(title, starred)
|
||||
cls = 'star-btn btn btn-sm btn-default'
|
||||
|
||||
toggle_text =
|
||||
if starred
|
||||
' Unstar'
|
||||
else
|
||||
' Star'
|
||||
end
|
||||
|
||||
toggle_html = content_tag('span', class: 'toggle') do
|
||||
icon('star') + toggle_text
|
||||
end
|
||||
|
||||
count_html = content_tag('span', class: 'count') do
|
||||
@project.star_count.to_s
|
||||
end
|
||||
|
||||
link_opts = {
|
||||
title: title,
|
||||
class: cls,
|
||||
method: :post,
|
||||
remote: true,
|
||||
data: { type: 'json' }
|
||||
}
|
||||
|
||||
path = toggle_star_namespace_project_path(@project.namespace, @project)
|
||||
|
||||
content_tag 'span', class: starred ? 'turn-on' : 'turn-off' do
|
||||
link_to(path, link_opts) do
|
||||
toggle_html + ' ' + count_html
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def link_to_toggle_fork
|
||||
html = content_tag('span') do
|
||||
icon('code-fork') + ' Fork'
|
||||
end
|
||||
|
||||
count_html = content_tag(:span, class: 'count') do
|
||||
@project.forks_count.to_s
|
||||
end
|
||||
|
||||
html + count_html
|
||||
end
|
||||
|
||||
def project_for_deploy_key(deploy_key)
|
||||
if deploy_key.projects.include?(@project)
|
||||
@project
|
||||
@@ -306,4 +259,11 @@ module ProjectsHelper
|
||||
def leave_project_message(project)
|
||||
"Are you sure you want to leave \"#{project.name}\" project?"
|
||||
end
|
||||
|
||||
def new_readme_path
|
||||
ref = @repository.root_ref if @repository
|
||||
ref ||= 'master'
|
||||
|
||||
namespace_project_new_blob_path(@project.namespace, @project, tree_join(ref), file_name: 'README.md')
|
||||
end
|
||||
end
|
||||
|
||||
@@ -79,6 +79,12 @@
|
||||
%td.shortcut
|
||||
.key g
|
||||
.key p
|
||||
%td
|
||||
Go to the project's home page
|
||||
%tr
|
||||
%td.shortcut
|
||||
.key g
|
||||
.key e
|
||||
%td
|
||||
Go to the project's activity feed
|
||||
%tr
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
%ul.nav.nav-sidebar
|
||||
= nav_link(path: 'projects#show', html_options: {class: 'home'}) do
|
||||
= link_to project_path(@project), title: 'Project', class: 'shortcuts-project', data: {placement: 'right'} do
|
||||
= icon('dashboard fw')
|
||||
= icon('home fw')
|
||||
%span
|
||||
Project
|
||||
= nav_link(path: 'projects#activity') do
|
||||
= link_to activity_project_path(@project), title: 'Project Activity', class: 'shortcuts-project-activity', data: {placement: 'right'} do
|
||||
= icon('dashboard fw')
|
||||
%span
|
||||
Activity
|
||||
- if project_nav_tab? :files
|
||||
= nav_link(controller: %w(tree blob blame edit_tree new_tree)) do
|
||||
= link_to namespace_project_tree_path(@project.namespace, @project, @ref || @repository.root_ref), title: 'Files', class: 'shortcuts-tree', data: {placement: 'right'} do
|
||||
|
||||
@@ -1,106 +0,0 @@
|
||||
.clearfix
|
||||
- unless @project.empty_repo?
|
||||
.panel.panel-default
|
||||
.panel-heading
|
||||
= visibility_level_icon(@project.visibility_level)
|
||||
= "#{visibility_level_label(@project.visibility_level).capitalize} project"
|
||||
|
||||
.panel-body
|
||||
- if @repository.changelog || @repository.license || @repository.contribution_guide
|
||||
%ul.nav.nav-pills
|
||||
- if @repository.changelog
|
||||
%li.hidden-xs
|
||||
= link_to changelog_url(@project) do
|
||||
Changelog
|
||||
- if @repository.license
|
||||
%li
|
||||
= link_to license_url(@project) do
|
||||
License
|
||||
- if @repository.contribution_guide
|
||||
%li
|
||||
= link_to contribution_guide_url(@project) do
|
||||
Contribution guide
|
||||
|
||||
.actions
|
||||
- if can? current_user, :create_issue, @project
|
||||
= link_to url_for_new_issue(@project, only_path: true), title: "New Issue", class: 'btn btn-sm append-right-10' do
|
||||
New Issue
|
||||
|
||||
- if can? current_user, :create_merge_request, @project
|
||||
= link_to new_namespace_project_merge_request_path(@project.namespace, @project), class: "btn btn-sm", title: "New Merge Request" do
|
||||
New Merge Request
|
||||
|
||||
- if forked_from_project = @project.forked_from_project
|
||||
.panel-footer
|
||||
= icon("code-fork fw")
|
||||
Forked from
|
||||
.pull-right
|
||||
= link_to forked_from_project.namespace.try(:name), project_path(forked_from_project)
|
||||
|
||||
|
||||
- @project.ci_services.each do |ci_service|
|
||||
- if ci_service.active? && ci_service.respond_to?(:builds_path)
|
||||
.panel-footer
|
||||
= icon("check fw")
|
||||
= ci_service.title
|
||||
.pull-right
|
||||
- if ci_service.respond_to?(:status_img_path)
|
||||
= link_to ci_service.builds_path, :'data-no-turbolink' => 'data-no-turbolink' do
|
||||
= image_tag ci_service.status_img_path, alt: "build status", class: 'ci-status-image'
|
||||
- else
|
||||
= link_to 'view builds', ci_service.builds_path, :'data-no-turbolink' => 'data-no-turbolink'
|
||||
|
||||
|
||||
- unless @project.empty_repo?
|
||||
.panel.panel-default
|
||||
.panel-heading
|
||||
= icon("folder-o fw")
|
||||
Repository
|
||||
.panel-body
|
||||
%ul.nav.nav-pills
|
||||
%li
|
||||
= link_to namespace_project_commits_path(@project.namespace, @project, @ref || @repository.root_ref) do
|
||||
= pluralize(number_with_delimiter(@repository.commit_count), 'commit')
|
||||
%li
|
||||
= link_to namespace_project_branches_path(@project.namespace, @project) do
|
||||
= pluralize(number_with_delimiter(@repository.branch_names.count), 'branch')
|
||||
%li
|
||||
= link_to namespace_project_tags_path(@project.namespace, @project) do
|
||||
= pluralize(number_with_delimiter(@repository.tag_names.count), 'tag')
|
||||
|
||||
.actions
|
||||
= link_to namespace_project_compare_index_path(@project.namespace, @project, from: @repository.root_ref, to: @ref || @repository.root_ref), class: 'btn btn-sm append-right-10' do
|
||||
%i.fa.fa-exchange
|
||||
Compare code
|
||||
|
||||
- if can?(current_user, :download_code, @project)
|
||||
= render 'projects/repositories/download_archive', split_button: true, btn_class: 'btn-group-sm'
|
||||
- if version = @repository.version
|
||||
.panel-footer
|
||||
= icon("clock-o fw")
|
||||
Version
|
||||
.pull-right
|
||||
= link_to version_url(@project) do
|
||||
= @repository.blob_by_oid(version.id).data
|
||||
|
||||
= render "shared/clone_panel"
|
||||
|
||||
- if @project.archived?
|
||||
%br
|
||||
.alert.alert-warning
|
||||
%h4
|
||||
= icon("exclamation-triangle fw")
|
||||
Archived project!
|
||||
%p Repository is read-only
|
||||
|
||||
- if current_user
|
||||
- access = user_max_access_in_project(current_user, @project)
|
||||
- if access
|
||||
.light-well.light.prepend-top-20
|
||||
%small
|
||||
You have #{access} access to this project.
|
||||
- if @project.project_member_by_id(current_user)
|
||||
%br
|
||||
= link_to leave_namespace_project_project_members_path(@project.namespace, @project),
|
||||
data: { confirm: leave_project_message(@project) }, method: :delete, title: 'Leave project' do
|
||||
Leave this project
|
||||
@@ -1,37 +1,26 @@
|
||||
- empty_repo = @project.empty_repo?
|
||||
.project-home-panel.clearfix{:class => ("empty-project" if empty_repo)}
|
||||
.project-identicon-holder
|
||||
= project_icon(@project, alt: '', class: 'avatar project-avatar')
|
||||
.project-home-row.project-home-row-top
|
||||
.project-home-desc
|
||||
- if @project.description.present?
|
||||
= markdown(@project.description, pipeline: :description)
|
||||
- if can?(current_user, :admin_project, @project)
|
||||
–
|
||||
= link_to 'Edit', edit_namespace_project_path
|
||||
- elsif !empty_repo && @repository.readme
|
||||
- readme = @repository.readme
|
||||
–
|
||||
= link_to namespace_project_blob_path(@project.namespace, @project, tree_join(@repository.root_ref, readme.name)) do
|
||||
= readme.name
|
||||
.project-repo-buttons
|
||||
.inline.star.js-toggler-container{class: @show_star ? 'on' : ''}
|
||||
- if current_user
|
||||
= link_to_toggle_star('Star this project.', false)
|
||||
= link_to_toggle_star('Unstar this project.', true)
|
||||
- else
|
||||
= link_to new_user_session_path, class: 'btn star-btn has_tooltip', title: 'You must sign in to star a project' do
|
||||
%span
|
||||
= icon('star')
|
||||
Star
|
||||
%span.count
|
||||
= @project.star_count
|
||||
- unless empty_repo
|
||||
- if current_user && can?(current_user, :fork_project, @project) && @project.namespace != current_user.namespace
|
||||
.inline.fork-buttons.prepend-left-10
|
||||
- if current_user.already_forked?(@project) && current_user.manageable_namespaces.size < 2
|
||||
= link_to namespace_project_path(current_user, current_user.fork_of(@project)), title: 'Go to your fork', class: 'btn btn-sm btn-default' do
|
||||
= link_to_toggle_fork
|
||||
- else
|
||||
= link_to new_namespace_project_fork_path(@project.namespace, @project), title: "Fork project", class: 'btn btn-sm btn-default' do
|
||||
= link_to_toggle_fork
|
||||
= project_icon(@project, alt: '', class: 'project-avatar avatar s90')
|
||||
.project-home-desc.lead
|
||||
- if @project.description.present?
|
||||
= markdown(@project.description, pipeline: :description)
|
||||
|
||||
|
||||
.project-repo-buttons
|
||||
= render 'projects/buttons/star'
|
||||
|
||||
- unless empty_repo
|
||||
= render 'projects/buttons/fork'
|
||||
|
||||
- if forked_from_project = @project.forked_from_project
|
||||
= link_to project_path(forked_from_project), class: 'btn' do
|
||||
= icon("code-fork fw")
|
||||
Forked from
|
||||
= forked_from_project.namespace.try(:name)
|
||||
|
||||
- if can? current_user, :download_code, @project
|
||||
= link_to archive_namespace_project_repository_path(@project.namespace, @project, ref: @ref, format: 'zip'), class: 'btn', rel: 'nofollow' do
|
||||
%i.fa.fa-download
|
||||
|
||||
= render "shared/clone_panel"
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
%ul.nav.nav-tabs
|
||||
%li.active
|
||||
= link_to '#tab-activity', 'data-toggle' => 'tab' do
|
||||
= icon("tachometer")
|
||||
Activity
|
||||
- if @repository.readme
|
||||
%li
|
||||
= link_to '#tab-readme', 'data-toggle' => 'tab' do
|
||||
= icon("file-text-o")
|
||||
Readme
|
||||
.tab-content
|
||||
.tab-pane.active#tab-activity
|
||||
.hidden-xs
|
||||
= render "events/event_last_push", event: @last_push
|
||||
|
||||
- if current_user
|
||||
%ul.nav.nav-pills.event_filter.pull-right
|
||||
%li
|
||||
= link_to namespace_project_path(@project.namespace, @project, format: :atom, private_token: current_user.private_token), title: "Feed", class: 'rss-btn' do
|
||||
%i.fa.fa-rss
|
||||
|
||||
= render 'shared/event_filter'
|
||||
%hr
|
||||
.content_list
|
||||
= spinner
|
||||
|
||||
- if readme = @repository.readme
|
||||
.tab-pane#tab-readme
|
||||
%article.readme-holder#README
|
||||
.clearfix
|
||||
%small.pull-right
|
||||
= link_to namespace_project_blob_path(@project.namespace, @project, tree_join(@repository.root_ref, readme.name)), class: 'light' do
|
||||
%i.fa.fa-file
|
||||
= readme.name
|
||||
.wiki
|
||||
= render_readme(readme)
|
||||
@@ -0,0 +1,13 @@
|
||||
.hidden-xs
|
||||
= render "events/event_last_push", event: @last_push
|
||||
|
||||
- if current_user
|
||||
%ul.nav.nav-pills.event_filter.pull-right
|
||||
%li
|
||||
= link_to namespace_project_path(@project.namespace, @project, format: :atom, private_token: current_user.private_token), title: "Feed", class: 'rss-btn' do
|
||||
%i.fa.fa-rss
|
||||
|
||||
= render 'shared/event_filter'
|
||||
%hr
|
||||
.content_list
|
||||
= spinner
|
||||
@@ -0,0 +1,13 @@
|
||||
- if current_user && can?(current_user, :fork_project, @project)
|
||||
- if current_user.already_forked?(@project) && current_user.manageable_namespaces.size < 2
|
||||
= link_to namespace_project_path(current_user, current_user.fork_of(@project)), title: 'Go to your fork', class: 'btn' do
|
||||
= icon('code-fork')
|
||||
Fork
|
||||
%span.count
|
||||
= @project.forks_count
|
||||
- else
|
||||
= link_to new_namespace_project_fork_path(@project.namespace, @project), title: "Fork project", class: 'btn' do
|
||||
= icon('code-fork')
|
||||
Fork
|
||||
%span.count
|
||||
= @project.forks_count
|
||||
@@ -0,0 +1,21 @@
|
||||
- if current_user
|
||||
= link_to toggle_star_namespace_project_path(@project.namespace, @project), class: 'btn star-btn toggle-star', method: :post, remote: true do
|
||||
- if current_user.starred?(@project)
|
||||
Unstar
|
||||
- else
|
||||
Star
|
||||
%span.count
|
||||
= @project.star_count
|
||||
|
||||
:coffeescript
|
||||
$('.project-home-panel .toggle-star').on 'ajax:success', (e, data, status, xhr) ->
|
||||
$(@).replaceWith(data.html)
|
||||
.on 'ajax:error', (e, xhr, status, error) ->
|
||||
new Flash('Star toggle failed. Try again later.', 'alert')
|
||||
|
||||
- else
|
||||
= link_to new_user_session_path, class: 'btn has_tooltip star-btn', title: 'You must sign in to star a project' do
|
||||
= icon('star')
|
||||
Star
|
||||
%span.count
|
||||
= @project.star_count
|
||||
@@ -4,30 +4,30 @@
|
||||
|
||||
= render "home_panel"
|
||||
|
||||
.center.well
|
||||
%h3
|
||||
.center.light-well
|
||||
%h3.page-title
|
||||
The repository for this project is empty
|
||||
%h4
|
||||
You can
|
||||
= link_to namespace_project_new_blob_path(@project.namespace, @project, 'master'), class: 'btn btn-new btn-lg' do
|
||||
add a file
|
||||
or do a push via the command line.
|
||||
%p
|
||||
If you already have files you can push them using command line instructions below.
|
||||
%br
|
||||
Otherwise you can start with
|
||||
= link_to "adding README", new_readme_path, class: 'underlined-link'
|
||||
file to this project.
|
||||
|
||||
.well
|
||||
= render "shared/clone_panel"
|
||||
%h4
|
||||
%strong Command line instructions
|
||||
.prepend-top-20
|
||||
%h3.page-title
|
||||
Command line instructions
|
||||
%div.git-empty
|
||||
%fieldset
|
||||
%legend Git global setup
|
||||
%pre.dark
|
||||
%h5 Git global setup
|
||||
%pre.light-well
|
||||
:preserve
|
||||
git config --global user.name "#{git_user_name}"
|
||||
git config --global user.email "#{git_user_email}"
|
||||
|
||||
%fieldset
|
||||
%legend Create a new repository
|
||||
%pre.dark
|
||||
%h5 Create a new repository
|
||||
%pre.light-well
|
||||
:preserve
|
||||
git clone #{ content_tag(:span, default_url_to_repo, class: 'clone')}
|
||||
cd #{@project.path}
|
||||
@@ -37,8 +37,8 @@
|
||||
git push -u origin master
|
||||
|
||||
%fieldset
|
||||
%legend Existing folder or Git repository
|
||||
%pre.dark
|
||||
%h5 Existing folder or Git repository
|
||||
%pre.light-well
|
||||
:preserve
|
||||
cd existing_folder
|
||||
git init
|
||||
|
||||
@@ -7,10 +7,71 @@
|
||||
= render 'shared/no_password'
|
||||
|
||||
= render "home_panel"
|
||||
= render 'shared/show_aside'
|
||||
|
||||
.row
|
||||
%section.col-md-8
|
||||
= render 'section'
|
||||
%aside.col-md-4.project-side
|
||||
= render 'aside'
|
||||
.project-stats
|
||||
%ul.nav.nav-pills
|
||||
%li
|
||||
= link_to namespace_project_commits_path(@project.namespace, @project, @ref || @repository.root_ref) do
|
||||
= pluralize(number_with_delimiter(@repository.commit_count), 'commit')
|
||||
%li
|
||||
= link_to namespace_project_branches_path(@project.namespace, @project) do
|
||||
= pluralize(number_with_delimiter(@repository.branch_names.count), 'branch')
|
||||
%li
|
||||
= link_to namespace_project_tags_path(@project.namespace, @project) do
|
||||
= pluralize(number_with_delimiter(@repository.tag_names.count), 'tag')
|
||||
- if @repository.changelog
|
||||
%li
|
||||
= link_to changelog_url(@project) do
|
||||
Changelog
|
||||
- if @repository.license
|
||||
%li
|
||||
= link_to license_url(@project) do
|
||||
License
|
||||
- if @repository.contribution_guide
|
||||
%li
|
||||
= link_to contribution_guide_url(@project) do
|
||||
Contribution guide
|
||||
|
||||
- if @project.archived?
|
||||
.text-warning.center.prepend-top-20
|
||||
%p
|
||||
= icon("exclamation-triangle fw")
|
||||
Archived project! Repository is read-only
|
||||
|
||||
%hr
|
||||
%section
|
||||
- if readme = @repository.readme
|
||||
%article.readme-holder#README
|
||||
.clearfix
|
||||
%small.pull-right
|
||||
= link_to namespace_project_blob_path(@project.namespace, @project, tree_join(@repository.root_ref, readme.name)), class: 'light' do
|
||||
%i.fa.fa-file
|
||||
= readme.name
|
||||
.wiki
|
||||
= render_readme(readme)
|
||||
- else
|
||||
%h3.page-title
|
||||
This project does not have README yet
|
||||
- if can?(current_user, :push_code, @project)
|
||||
%p.slead
|
||||
A
|
||||
%code README
|
||||
file contains information about other files in a repository and is commonly
|
||||
distributed with computer software, forming part of its documentation.
|
||||
%br
|
||||
We recommend you to
|
||||
= link_to "add README", new_readme_path, class: 'underlined-link'
|
||||
file to the repository and GitLab will render it here instead of this message.
|
||||
|
||||
|
||||
|
||||
- if current_user
|
||||
- access = user_max_access_in_project(current_user, @project)
|
||||
- if access
|
||||
%hr
|
||||
%p.light
|
||||
You have #{access} access to this project.
|
||||
- if @project.project_member_by_id(current_user)
|
||||
= link_to leave_namespace_project_project_members_path(@project.namespace, @project),
|
||||
data: { confirm: leave_project_message(@project) }, method: :delete, title: 'Leave project', class: 'cred' do
|
||||
Leave this project
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
:"data-container" => "body"}
|
||||
= gitlab_config.protocol.upcase
|
||||
= text_field_tag :project_clone, default_url_to_repo(project), class: "js-select-on-focus form-control input-sm", readonly: true
|
||||
- if project.kind_of?(Project) && project.empty_repo?
|
||||
- if project.kind_of?(Project)
|
||||
.input-group-addon
|
||||
.visibility-level-label.has_tooltip{'data-title' => "#{visibility_level_label(project.visibility_level)} project" }
|
||||
= visibility_level_icon(project.visibility_level)
|
||||
|
||||
@@ -314,6 +314,7 @@ Gitlab::Application.routes.draw do
|
||||
post :toggle_star
|
||||
post :markdown_preview
|
||||
get :autocomplete_sources
|
||||
get :activity
|
||||
end
|
||||
|
||||
scope module: :projects do
|
||||
|
||||
+2
-2
@@ -28,11 +28,11 @@ ActiveRecord::Schema.define(version: 20150620233230) do
|
||||
t.integer "default_branch_protection", default: 2
|
||||
t.boolean "twitter_sharing_enabled", default: true
|
||||
t.text "restricted_visibility_levels"
|
||||
t.boolean "version_check_enabled", default: true
|
||||
t.integer "max_attachment_size", default: 10, null: false
|
||||
t.integer "default_project_visibility"
|
||||
t.integer "default_snippet_visibility"
|
||||
t.text "restricted_signup_domains"
|
||||
t.boolean "version_check_enabled", default: true
|
||||
t.boolean "user_oauth_applications", default: true
|
||||
t.string "after_sign_out_path"
|
||||
t.integer "session_expire_delay", default: 10080, null: false
|
||||
@@ -510,12 +510,12 @@ ActiveRecord::Schema.define(version: 20150620233230) do
|
||||
t.string "bitbucket_access_token"
|
||||
t.string "bitbucket_access_token_secret"
|
||||
t.string "location"
|
||||
t.string "public_email", default: "", null: false
|
||||
t.string "encrypted_otp_secret"
|
||||
t.string "encrypted_otp_secret_iv"
|
||||
t.string "encrypted_otp_secret_salt"
|
||||
t.boolean "otp_required_for_login", default: false, null: false
|
||||
t.text "otp_backup_codes"
|
||||
t.string "public_email", default: "", null: false
|
||||
t.integer "dashboard", default: 0
|
||||
end
|
||||
|
||||
|
||||
@@ -109,4 +109,8 @@ On a very active server (10,000 active users) the Sidekiq process can use 1GB+ o
|
||||
- Firefox (Latest released version and [latest ESR version](https://www.mozilla.org/en-US/firefox/organizations/))
|
||||
- Safari 7+ (known problem: required fields in html5 do not work)
|
||||
- Opera (Latest released version)
|
||||
- IE 10+
|
||||
- IE 10+
|
||||
|
||||
### Common UI problems with IE
|
||||
|
||||
If you experience UI issues with Internet Explorer, please make sure that you have the `Compatibility View` mode disabled.
|
||||
@@ -189,6 +189,7 @@ Feature: Project Issues
|
||||
Given I logout
|
||||
Given public project "Community"
|
||||
When I visit project "Community" page
|
||||
And I visit project "Community" issues page
|
||||
And I click link "New Issue"
|
||||
And I should not see assignee field
|
||||
And I should not see milestone field
|
||||
|
||||
@@ -18,9 +18,13 @@ Feature: Project
|
||||
Then I should see the default project avatar
|
||||
And I should not see the "Remove avatar" button
|
||||
|
||||
Scenario: I should have readme on page
|
||||
And I visit project "Shop" page
|
||||
Then I should see project "Shop" README
|
||||
|
||||
@javascript
|
||||
Scenario: I should see project activity
|
||||
When I visit project "Shop" page
|
||||
When I visit project "Shop" activity page
|
||||
Then I should see project "Shop" activity feed
|
||||
|
||||
Scenario: I visit edit project
|
||||
@@ -38,24 +42,12 @@ Feature: Project
|
||||
And change project path settings
|
||||
Then I should see project with new path settings
|
||||
|
||||
Scenario: I should see project readme and version
|
||||
When I visit project "Shop" page
|
||||
And I should see project "Shop" version
|
||||
|
||||
Scenario: I should change project default branch
|
||||
When I visit edit project "Shop" page
|
||||
And change project default branch
|
||||
And I save project
|
||||
Then I should see project default branch changed
|
||||
|
||||
@javascript
|
||||
Scenario: I should have default tab per my preference
|
||||
And I own project "Forum"
|
||||
When I select project "Forum" README tab
|
||||
Then I should see project "Forum" README
|
||||
And I visit project "Shop" page
|
||||
Then I should see project "Shop" README
|
||||
|
||||
Scenario: I tag a project
|
||||
When I visit edit project "Shop" page
|
||||
Then I should see project settings
|
||||
|
||||
@@ -3,7 +3,7 @@ Feature: Project Shortcuts
|
||||
Background:
|
||||
Given I sign in as a user
|
||||
And I own a project
|
||||
And I visit my project's home page
|
||||
And I visit my project's commits page
|
||||
|
||||
@javascript
|
||||
Scenario: Navigate to files tab
|
||||
@@ -12,6 +12,7 @@ Feature: Project Shortcuts
|
||||
|
||||
@javascript
|
||||
Scenario: Navigate to commits tab
|
||||
Given I visit my project's files page
|
||||
Given I press "g" and "c"
|
||||
Then the active main tab should be Commits
|
||||
|
||||
@@ -46,7 +47,11 @@ Feature: Project Shortcuts
|
||||
Then the active main tab should be Wiki
|
||||
|
||||
@javascript
|
||||
Scenario: Navigate to project feed
|
||||
Given I visit my project's files page
|
||||
Scenario: Navigate to project home
|
||||
Given I press "g" and "p"
|
||||
Then the active main tab should be Home
|
||||
|
||||
@javascript
|
||||
Scenario: Navigate to project feed
|
||||
Given I press "g" and "e"
|
||||
Then the active main tab should be Activity
|
||||
|
||||
@@ -194,6 +194,11 @@ class Spinach::Features::ProjectIssues < Spinach::FeatureSteps
|
||||
end
|
||||
end
|
||||
|
||||
When "I visit project \"Community\" issues page" do
|
||||
project = Project.find_by(name: 'Community')
|
||||
visit namespace_project_issues_path(project.namespace, project)
|
||||
end
|
||||
|
||||
When "I visit empty project's issues page" do
|
||||
project = Project.find_by(name: 'Empty Project')
|
||||
visit namespace_project_issues_path(project.namespace, project)
|
||||
|
||||
@@ -33,4 +33,9 @@ class Spinach::Features::ProjectShortcuts < Spinach::FeatureSteps
|
||||
find('body').native.send_key('g')
|
||||
find('body').native.send_key('w')
|
||||
end
|
||||
|
||||
step 'I press "g" and "e"' do
|
||||
find('body').native.send_key('g')
|
||||
find('body').native.send_key('e')
|
||||
end
|
||||
end
|
||||
|
||||
@@ -187,7 +187,7 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps
|
||||
end
|
||||
|
||||
step 'I click on "add a file" link' do
|
||||
click_link 'add a file'
|
||||
click_link 'adding README'
|
||||
|
||||
# Remove pre-receive hook so we can push without auth
|
||||
FileUtils.rm_f(File.join(@project.repository.path, 'hooks', 'pre-receive'))
|
||||
|
||||
@@ -5,7 +5,7 @@ class Spinach::Features::ProjectStar < Spinach::FeatureSteps
|
||||
include SharedUser
|
||||
|
||||
step "The project has no stars" do
|
||||
expect(page).not_to have_content '.star-buttons'
|
||||
expect(page).not_to have_content '.toggle-star'
|
||||
end
|
||||
|
||||
step "The project has 0 stars" do
|
||||
|
||||
@@ -251,6 +251,10 @@ module SharedPaths
|
||||
visit namespace_project_path(project.namespace, project)
|
||||
end
|
||||
|
||||
step 'I visit project "Shop" activity page' do
|
||||
visit activity_namespace_project_path(project.namespace, project)
|
||||
end
|
||||
|
||||
step 'I visit project "Forked Shop" merge requests page' do
|
||||
visit namespace_project_merge_requests_path(@forked_project.namespace, @forked_project)
|
||||
end
|
||||
|
||||
@@ -49,4 +49,8 @@ module SharedProjectTab
|
||||
expect(page).to have_content('Back to project')
|
||||
end
|
||||
end
|
||||
|
||||
step 'the active main tab should be Activity' do
|
||||
ensure_active_main_tab('Activity')
|
||||
end
|
||||
end
|
||||
|
||||
@@ -6,7 +6,7 @@ namespace :gitlab do
|
||||
%W(rake rubocop),
|
||||
%W(rake spinach),
|
||||
%W(rake spec),
|
||||
%W(rake jasmine:ci)
|
||||
%W(rake teaspoon)
|
||||
]
|
||||
|
||||
cmds.each do |cmd|
|
||||
|
||||
Reference in New Issue
Block a user