Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
232d61d5
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
232d61d5
编写于
1月 17, 2013
作者:
G
GitLab
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Refactor project creation. Added logout link to profile page
上级
c7c1a97c
变更
19
显示空白变更内容
内联
并排
Showing
19 changed file
with
126 addition
and
116 deletion
+126
-116
app/assets/stylesheets/sections/projects.scss
app/assets/stylesheets/sections/projects.scss
+0
-3
app/contexts/project_update_context.rb
app/contexts/project_update_context.rb
+0
-24
app/contexts/projects/create_context.rb
app/contexts/projects/create_context.rb
+64
-0
app/contexts/projects/update_context.rb
app/contexts/projects/update_context.rb
+25
-0
app/controllers/admin/projects_controller.rb
app/controllers/admin/projects_controller.rb
+1
-1
app/controllers/projects_controller.rb
app/controllers/projects_controller.rb
+2
-2
app/helpers/namespaces_helper.rb
app/helpers/namespaces_helper.rb
+7
-6
app/models/ability.rb
app/models/ability.rb
+3
-2
app/models/project.rb
app/models/project.rb
+0
-49
app/models/user.rb
app/models/user.rb
+6
-5
app/views/dashboard/_sidebar.html.haml
app/views/dashboard/_sidebar.html.haml
+2
-2
app/views/profiles/show.html.haml
app/views/profiles/show.html.haml
+5
-0
app/views/projects/_form.html.haml
app/views/projects/_form.html.haml
+5
-13
app/views/projects/_new_form.html.haml
app/views/projects/_new_form.html.haml
+2
-2
app/views/projects/create.js.haml
app/views/projects/create.js.haml
+1
-3
features/project/project.feature
features/project/project.feature
+1
-1
features/steps/project/project.rb
features/steps/project/project.rb
+1
-1
features/steps/shared/project.rb
features/steps/shared/project.rb
+0
-1
lib/api/projects.rb
lib/api/projects.rb
+1
-1
未找到文件。
app/assets/stylesheets/sections/projects.scss
浏览文件 @
232d61d5
...
...
@@ -42,9 +42,6 @@
line-height
:
20px
;
padding
:
8px
;
}
label
{
color
:
#888
;
}
.btn
{
padding
:
6px
10px
;
margin-left
:
10px
;
...
...
app/contexts/project_update_context.rb
已删除
100644 → 0
浏览文件 @
c7c1a97c
class
ProjectUpdateContext
<
BaseContext
def
execute
(
role
=
:default
)
namespace_id
=
params
[
:project
].
delete
(
:namespace_id
)
params
[
:project
].
delete
(
:public
)
unless
can?
(
current_user
,
:change_public_mode
,
project
)
allowed_transfer
=
can?
(
current_user
,
:change_namespace
,
project
)
||
role
==
:admin
if
allowed_transfer
&&
namespace_id
.
present?
if
namespace_id
==
Namespace
.
global_id
if
project
.
namespace
.
present?
# Transfer to global namespace from anyone
project
.
transfer
(
nil
)
end
elsif
namespace_id
.
to_i
!=
project
.
namespace_id
# Transfer to someone namespace
namespace
=
Namespace
.
find
(
namespace_id
)
project
.
transfer
(
namespace
)
end
end
project
.
update_attributes
(
params
[
:project
],
as:
role
)
end
end
app/contexts/projects/create_context.rb
0 → 100644
浏览文件 @
232d61d5
module
Projects
class
CreateContext
<
BaseContext
def
execute
# get namespace id
namespace_id
=
params
[
:project
].
delete
(
:namespace_id
)
@project
=
Project
.
new
(
params
[
:project
])
# Parametrize path for project
#
# Ex.
# 'GitLab HQ'.parameterize => "gitlab-hq"
#
@project
.
path
=
@project
.
name
.
dup
.
parameterize
if
namespace_id
# Find matching namespace and check if it allowed
# for current user if namespace_id passed.
if
allowed_namespace?
(
current_user
,
namespace_id
)
@project
.
namespace_id
=
namespace_id
unless
namespace_id
==
Namespace
.
global_id
else
deny_namespace
return
@project
end
else
# Set current user namespace if namespace_id is nil
@project
.
namespace_id
=
current_user
.
id
end
Project
.
transaction
do
@project
.
creator
=
current_user
@project
.
save!
# Add user as project master
@project
.
users_projects
.
create!
(
project_access:
UsersProject
::
MASTER
,
user:
current_user
)
# when project saved no team member exist so
# project repository should be updated after first user add
@project
.
update_repository
end
@project
rescue
=>
ex
@project
.
errors
.
add
(
:base
,
"Can't save project. Please try again later"
)
@project
end
protected
def
deny_namespace
@project
.
errors
.
add
(
:namespace
,
"is not valid"
)
end
def
allowed_namespace?
(
user
,
namespace_id
)
if
namespace_id
==
Namespace
.
global_id
return
user
.
admin
else
namespace
=
Namespace
.
find_by_id
(
namespace_id
)
current_user
.
can?
(
:manage_namespace
,
namespace
)
end
end
end
end
app/contexts/projects/update_context.rb
0 → 100644
浏览文件 @
232d61d5
module
Projects
class
UpdateContext
<
BaseContext
def
execute
(
role
=
:default
)
namespace_id
=
params
[
:project
].
delete
(
:namespace_id
)
params
[
:project
].
delete
(
:public
)
unless
can?
(
current_user
,
:change_public_mode
,
project
)
allowed_transfer
=
can?
(
current_user
,
:change_namespace
,
project
)
||
role
==
:admin
if
allowed_transfer
&&
namespace_id
.
present?
if
namespace_id
==
Namespace
.
global_id
if
project
.
namespace
.
present?
# Transfer to global namespace from anyone
project
.
transfer
(
nil
)
end
elsif
namespace_id
.
to_i
!=
project
.
namespace_id
# Transfer to someone namespace
namespace
=
Namespace
.
find
(
namespace_id
)
project
.
transfer
(
namespace
)
end
end
project
.
update_attributes
(
params
[
:project
],
as:
role
)
end
end
end
app/controllers/admin/projects_controller.rb
浏览文件 @
232d61d5
...
...
@@ -29,7 +29,7 @@ class Admin::ProjectsController < AdminController
end
def
update
status
=
ProjectUpdateContext
.
new
(
project
,
current_user
,
params
).
execute
(
:admin
)
status
=
Project
s
::
UpdateContext
.
new
(
project
,
current_user
,
params
).
execute
(
:admin
)
if
status
redirect_to
[
:admin
,
@project
],
notice:
'Project was successfully updated.'
...
...
app/controllers/projects_controller.rb
浏览文件 @
232d61d5
...
...
@@ -19,7 +19,7 @@ class ProjectsController < ProjectResourceController
end
def
create
@project
=
Project
.
create_by_user
(
params
[
:project
],
current_user
)
@project
=
Project
s
::
CreateContext
.
new
(
nil
,
current_user
,
params
).
execute
respond_to
do
|
format
|
flash
[
:notice
]
=
'Project was successfully created.'
if
@project
.
saved?
...
...
@@ -35,7 +35,7 @@ class ProjectsController < ProjectResourceController
end
def
update
status
=
ProjectUpdateContext
.
new
(
project
,
current_user
,
params
).
execute
status
=
Project
s
::
UpdateContext
.
new
(
project
,
current_user
,
params
).
execute
respond_to
do
|
format
|
if
status
...
...
app/helpers/namespaces_helper.rb
浏览文件 @
232d61d5
module
NamespacesHelper
def
namespaces_options
(
selected
=
:current_user
,
scope
=
:default
)
groups
=
current_user
.
owned_groups
.
select
{
|
n
|
n
.
type
==
'Group'
}
users
=
if
scope
==
:all
Namespace
.
root
if
current_user
.
admin
groups
=
Group
.
all
users
=
Namespace
.
root
else
current_user
.
namespaces
.
reject
{
|
n
|
n
.
type
==
'Group'
}
groups
=
current_user
.
owned_groups
.
select
{
|
n
|
n
.
type
==
'Group'
}
users
=
current_user
.
namespaces
.
reject
{
|
n
|
n
.
type
==
'Group'
}
end
global_opts
=
[
"Global"
,
[[
'/'
,
Namespace
.
global_id
]]
]
group_opts
=
[
"Groups"
,
groups
.
map
{
|
g
|
[
g
.
human_name
,
g
.
id
]}
]
users_opts
=
[
"Users"
,
users
.
map
{
|
u
|
[
u
.
human_name
,
u
.
id
]}
]
...
...
app/models/ability.rb
浏览文件 @
232d61d5
...
...
@@ -7,7 +7,7 @@ class Ability
when
"Note"
then
note_abilities
(
object
,
subject
)
when
"Snippet"
then
snippet_abilities
(
object
,
subject
)
when
"MergeRequest"
then
merge_request_abilities
(
object
,
subject
)
when
"Group"
then
group_abilities
(
object
,
subject
)
when
"Group"
,
"Namespace"
then
group_abilities
(
object
,
subject
)
else
[]
end
end
...
...
@@ -102,7 +102,8 @@ class Ability
# Only group owner and administrators can manage group
if
group
.
owner
==
user
||
user
.
admin?
rules
<<
[
:manage_group
:manage_group
,
:manage_namespace
]
end
...
...
app/models/project.rb
浏览文件 @
232d61d5
...
...
@@ -116,55 +116,6 @@ class Project < ActiveRecord::Base
end
end
def
create_by_user
(
params
,
user
)
namespace_id
=
params
.
delete
(
:namespace_id
)
project
=
Project
.
new
params
Project
.
transaction
do
# Parametrize path for project
#
# Ex.
# 'GitLab HQ'.parameterize => "gitlab-hq"
#
project
.
path
=
project
.
name
.
dup
.
parameterize
project
.
creator
=
user
# Apply namespace if user has access to it
# else fallback to user namespace
if
namespace_id
!=
Namespace
.
global_id
project
.
namespace_id
=
user
.
namespace_id
if
namespace_id
group
=
Group
.
find_by_id
(
namespace_id
)
if
user
.
can?
:manage_group
,
group
project
.
namespace_id
=
namespace_id
end
end
end
project
.
save!
# Add user as project master
project
.
users_projects
.
create!
(
project_access:
UsersProject
::
MASTER
,
user:
user
)
# when project saved no team member exist so
# project repository should be updated after first user add
project
.
update_repository
end
project
rescue
Gitlab
::
Gitolite
::
AccessDenied
=>
ex
project
.
error_code
=
:gitolite
project
rescue
=>
ex
project
.
error_code
=
:db
project
.
errors
.
add
(
:base
,
"Can't save project. Please try again later"
)
project
end
def
access_options
UsersProject
.
access_roles
end
...
...
app/models/user.rb
浏览文件 @
232d61d5
...
...
@@ -152,11 +152,8 @@ class User < ActiveRecord::Base
namespaces
<<
self
.
namespace
if
self
.
namespace
# Add groups you can manage
namespaces
+=
if
admin
Group
.
all
else
groups
.
all
end
namespaces
+=
groups
.
all
namespaces
end
...
...
@@ -234,6 +231,10 @@ class User < ActiveRecord::Base
end
end
def
can_select_namespace?
several_namespaces?
||
admin
end
def
can?
action
,
subject
abilities
.
allowed?
(
self
,
action
,
subject
)
end
...
...
app/views/dashboard/_sidebar.html.haml
浏览文件 @
232d61d5
...
...
@@ -9,6 +9,6 @@
%hr
.gitlab-promo
=
link_to
"Homepage"
,
"http://gitlab
hq.com
"
=
link_to
"Blog"
,
"http://blog.gitlab
hq.com
"
=
link_to
"Homepage"
,
"http://gitlab
.org
"
=
link_to
"Blog"
,
"http://blog.gitlab
.org
"
=
link_to
"@gitlabhq"
,
"https://twitter.com/gitlabhq"
app/views/profiles/show.html.haml
浏览文件 @
232d61d5
...
...
@@ -6,6 +6,11 @@
%small
=
@user
.
email
.right
=
link_to
destroy_user_session_path
,
class:
"logout"
,
method: :delete
do
%small
%i
.icon-signout
Logout
%hr
=
form_for
@user
,
url:
profile_path
,
method: :put
,
html:
{
class:
"edit_user form-horizontal"
}
do
|
f
|
...
...
app/views/projects/_form.html.haml
浏览文件 @
232d61d5
...
...
@@ -9,20 +9,12 @@
Project name is
.input
=
f
.
text_field
:name
,
placeholder:
"Example Project"
,
class:
"xxlarge"
%fieldset
%legend
Advanced settings:
.control-group
=
f
.
label
:path
do
Repository
.controls
=
text_field_tag
:ppath
,
@repository
.
path_to_repo
,
class:
"xxlarge"
,
readonly:
true
-
unless
@repository
.
heads
.
empty?
.clearfix
=
f
.
label
:default_branch
,
"Default Branch"
.input
=
f
.
select
(
:default_branch
,
@repository
.
heads
.
map
(
&
:name
),
{},
style:
"width:210px;"
)
%fieldset
.features
%legend
Features:
...
...
@@ -87,4 +79,4 @@
-
unless
@project
.
new_record?
-
if
can?
(
current_user
,
:remove_project
,
@project
)
.right
=
link_to
'Remove'
,
@project
,
confirm:
'Removed project can not be restored! Are you sure?'
,
method: :delete
,
class:
"btn danger"
=
link_to
'Remove
Project
'
,
@project
,
confirm:
'Removed project can not be restored! Are you sure?'
,
method: :delete
,
class:
"btn danger"
app/views/projects/_new_form.html.haml
浏览文件 @
232d61d5
...
...
@@ -9,10 +9,10 @@
=
f
.
text_field
:name
,
placeholder:
"Example Project"
,
class:
"xxlarge"
=
f
.
submit
'Create project'
,
class:
"btn success project-submit"
-
if
current_user
.
several_namespaces
?
-
if
current_user
.
can_select_namespace
?
.clearfix
=
f
.
label
:namespace_id
do
%span
.cgray
Namespace
%span
Namespace
.input
=
f
.
select
:namespace_id
,
namespaces_options
(
params
[
:namespace_id
]
||
:current_user
),
{},
{
class:
'chosen'
}
%hr
...
...
app/views/projects/create.js.haml
浏览文件 @
232d61d5
...
...
@@ -2,11 +2,9 @@
:plain
location.href = "
#{
project_path
(
@project
)
}
";
-
else
-
if
@project
.
git_error?
location.href = "
#{
errors_githost_path
}
";
-
else
:plain
$('.project_new_holder').show();
$("#new_project").replaceWith("
#{
escape_javascript
(
render
(
'new_form'
))
}
");
$('.save-project-loader').hide();
new Projects();
$('select.chosen').chosen()
features/project/project.feature
浏览文件 @
232d61d5
Feature
:
Project
s
Feature
:
Project
Feature
Background
:
Given
I sign in as a user
And
I own project
"Shop"
...
...
features/steps/project/project.rb
浏览文件 @
232d61d5
class
Project
s
<
Spinach
::
FeatureSteps
class
Project
Feature
<
Spinach
::
FeatureSteps
include
SharedAuthentication
include
SharedProject
include
SharedPaths
...
...
features/steps/shared/project.rb
浏览文件 @
232d61d5
...
...
@@ -47,7 +47,6 @@ module SharedProject
Then
'I should see project settings'
do
current_path
.
should
==
edit_project_path
(
@project
)
page
.
should
have_content
(
"Project name is"
)
page
.
should
have_content
(
"Advanced settings:"
)
page
.
should
have_content
(
"Features:"
)
end
...
...
lib/api/projects.rb
浏览文件 @
232d61d5
...
...
@@ -43,7 +43,7 @@ module Gitlab
:wall_enabled
,
:merge_requests_enabled
,
:wiki_enabled
]
@project
=
Project
.
create_by_user
(
attrs
,
current_user
)
@project
=
Project
s
::
CreateContext
.
new
(
nil
,
attrs
,
current_user
).
execute
if
@project
.
saved?
present
@project
,
with:
Entities
::
Project
else
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录