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 @@
...
@@ -42,9 +42,6 @@
line-height
:
20px
;
line-height
:
20px
;
padding
:
8px
;
padding
:
8px
;
}
}
label
{
color
:
#888
;
}
.btn
{
.btn
{
padding
:
6px
10px
;
padding
:
6px
10px
;
margin-left
:
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
...
@@ -29,7 +29,7 @@ class Admin::ProjectsController < AdminController
end
end
def
update
def
update
status
=
ProjectUpdateContext
.
new
(
project
,
current_user
,
params
).
execute
(
:admin
)
status
=
Project
s
::
UpdateContext
.
new
(
project
,
current_user
,
params
).
execute
(
:admin
)
if
status
if
status
redirect_to
[
:admin
,
@project
],
notice:
'Project was successfully updated.'
redirect_to
[
:admin
,
@project
],
notice:
'Project was successfully updated.'
...
...
app/controllers/projects_controller.rb
浏览文件 @
232d61d5
...
@@ -19,7 +19,7 @@ class ProjectsController < ProjectResourceController
...
@@ -19,7 +19,7 @@ class ProjectsController < ProjectResourceController
end
end
def
create
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
|
respond_to
do
|
format
|
flash
[
:notice
]
=
'Project was successfully created.'
if
@project
.
saved?
flash
[
:notice
]
=
'Project was successfully created.'
if
@project
.
saved?
...
@@ -35,7 +35,7 @@ class ProjectsController < ProjectResourceController
...
@@ -35,7 +35,7 @@ class ProjectsController < ProjectResourceController
end
end
def
update
def
update
status
=
ProjectUpdateContext
.
new
(
project
,
current_user
,
params
).
execute
status
=
Project
s
::
UpdateContext
.
new
(
project
,
current_user
,
params
).
execute
respond_to
do
|
format
|
respond_to
do
|
format
|
if
status
if
status
...
...
app/helpers/namespaces_helper.rb
浏览文件 @
232d61d5
module
NamespacesHelper
module
NamespacesHelper
def
namespaces_options
(
selected
=
:current_user
,
scope
=
:default
)
def
namespaces_options
(
selected
=
:current_user
,
scope
=
:default
)
groups
=
current_user
.
owned_groups
.
select
{
|
n
|
n
.
type
==
'Group'
}
if
current_user
.
admin
groups
=
Group
.
all
users
=
Namespace
.
root
else
groups
=
current_user
.
owned_groups
.
select
{
|
n
|
n
.
type
==
'Group'
}
users
=
current_user
.
namespaces
.
reject
{
|
n
|
n
.
type
==
'Group'
}
end
users
=
if
scope
==
:all
Namespace
.
root
else
current_user
.
namespaces
.
reject
{
|
n
|
n
.
type
==
'Group'
}
end
global_opts
=
[
"Global"
,
[[
'/'
,
Namespace
.
global_id
]]
]
global_opts
=
[
"Global"
,
[[
'/'
,
Namespace
.
global_id
]]
]
group_opts
=
[
"Groups"
,
groups
.
map
{
|
g
|
[
g
.
human_name
,
g
.
id
]}
]
group_opts
=
[
"Groups"
,
groups
.
map
{
|
g
|
[
g
.
human_name
,
g
.
id
]}
]
...
...
app/models/ability.rb
浏览文件 @
232d61d5
...
@@ -7,7 +7,7 @@ class Ability
...
@@ -7,7 +7,7 @@ class Ability
when
"Note"
then
note_abilities
(
object
,
subject
)
when
"Note"
then
note_abilities
(
object
,
subject
)
when
"Snippet"
then
snippet_abilities
(
object
,
subject
)
when
"Snippet"
then
snippet_abilities
(
object
,
subject
)
when
"MergeRequest"
then
merge_request_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
[]
else
[]
end
end
end
end
...
@@ -102,7 +102,8 @@ class Ability
...
@@ -102,7 +102,8 @@ class Ability
# Only group owner and administrators can manage group
# Only group owner and administrators can manage group
if
group
.
owner
==
user
||
user
.
admin?
if
group
.
owner
==
user
||
user
.
admin?
rules
<<
[
rules
<<
[
:manage_group
:manage_group
,
:manage_namespace
]
]
end
end
...
...
app/models/project.rb
浏览文件 @
232d61d5
...
@@ -116,55 +116,6 @@ class Project < ActiveRecord::Base
...
@@ -116,55 +116,6 @@ class Project < ActiveRecord::Base
end
end
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
def
access_options
UsersProject
.
access_roles
UsersProject
.
access_roles
end
end
...
...
app/models/user.rb
浏览文件 @
232d61d5
...
@@ -152,11 +152,8 @@ class User < ActiveRecord::Base
...
@@ -152,11 +152,8 @@ class User < ActiveRecord::Base
namespaces
<<
self
.
namespace
if
self
.
namespace
namespaces
<<
self
.
namespace
if
self
.
namespace
# Add groups you can manage
# Add groups you can manage
namespaces
+=
if
admin
namespaces
+=
groups
.
all
Group
.
all
else
groups
.
all
end
namespaces
namespaces
end
end
...
@@ -234,6 +231,10 @@ class User < ActiveRecord::Base
...
@@ -234,6 +231,10 @@ class User < ActiveRecord::Base
end
end
end
end
def
can_select_namespace?
several_namespaces?
||
admin
end
def
can?
action
,
subject
def
can?
action
,
subject
abilities
.
allowed?
(
self
,
action
,
subject
)
abilities
.
allowed?
(
self
,
action
,
subject
)
end
end
...
...
app/views/dashboard/_sidebar.html.haml
浏览文件 @
232d61d5
...
@@ -9,6 +9,6 @@
...
@@ -9,6 +9,6 @@
%hr
%hr
.gitlab-promo
.gitlab-promo
=
link_to
"Homepage"
,
"http://gitlab
hq.com
"
=
link_to
"Homepage"
,
"http://gitlab
.org
"
=
link_to
"Blog"
,
"http://blog.gitlab
hq.com
"
=
link_to
"Blog"
,
"http://blog.gitlab
.org
"
=
link_to
"@gitlabhq"
,
"https://twitter.com/gitlabhq"
=
link_to
"@gitlabhq"
,
"https://twitter.com/gitlabhq"
app/views/profiles/show.html.haml
浏览文件 @
232d61d5
...
@@ -6,6 +6,11 @@
...
@@ -6,6 +6,11 @@
%small
%small
=
@user
.
email
=
@user
.
email
.right
=
link_to
destroy_user_session_path
,
class:
"logout"
,
method: :delete
do
%small
%i
.icon-signout
Logout
%hr
%hr
=
form_for
@user
,
url:
profile_path
,
method: :put
,
html:
{
class:
"edit_user form-horizontal"
}
do
|
f
|
=
form_for
@user
,
url:
profile_path
,
method: :put
,
html:
{
class:
"edit_user form-horizontal"
}
do
|
f
|
...
...
app/views/projects/_form.html.haml
浏览文件 @
232d61d5
...
@@ -9,19 +9,11 @@
...
@@ -9,19 +9,11 @@
Project name is
Project name is
.input
.input
=
f
.
text_field
:name
,
placeholder:
"Example Project"
,
class:
"xxlarge"
=
f
.
text_field
:name
,
placeholder:
"Example Project"
,
class:
"xxlarge"
%fieldset
-
unless
@repository
.
heads
.
empty?
%legend
Advanced settings:
.clearfix
.control-group
=
f
.
label
:default_branch
,
"Default Branch"
=
f
.
label
:path
do
.input
=
f
.
select
(
:default_branch
,
@repository
.
heads
.
map
(
&
:name
),
{},
style:
"width:210px;"
)
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
%fieldset
.features
%legend
Features:
%legend
Features:
...
@@ -87,4 +79,4 @@
...
@@ -87,4 +79,4 @@
-
unless
@project
.
new_record?
-
unless
@project
.
new_record?
-
if
can?
(
current_user
,
:remove_project
,
@project
)
-
if
can?
(
current_user
,
:remove_project
,
@project
)
.right
.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 @@
...
@@ -9,10 +9,10 @@
=
f
.
text_field
:name
,
placeholder:
"Example Project"
,
class:
"xxlarge"
=
f
.
text_field
:name
,
placeholder:
"Example Project"
,
class:
"xxlarge"
=
f
.
submit
'Create project'
,
class:
"btn success project-submit"
=
f
.
submit
'Create project'
,
class:
"btn success project-submit"
-
if
current_user
.
several_namespaces
?
-
if
current_user
.
can_select_namespace
?
.clearfix
.clearfix
=
f
.
label
:namespace_id
do
=
f
.
label
:namespace_id
do
%span
.cgray
Namespace
%span
Namespace
.input
.input
=
f
.
select
:namespace_id
,
namespaces_options
(
params
[
:namespace_id
]
||
:current_user
),
{},
{
class:
'chosen'
}
=
f
.
select
:namespace_id
,
namespaces_options
(
params
[
:namespace_id
]
||
:current_user
),
{},
{
class:
'chosen'
}
%hr
%hr
...
...
app/views/projects/create.js.haml
浏览文件 @
232d61d5
...
@@ -2,11 +2,9 @@
...
@@ -2,11 +2,9 @@
:plain
:plain
location.href = "
#{
project_path
(
@project
)
}
";
location.href = "
#{
project_path
(
@project
)
}
";
-
else
-
else
-
if
@project
.
git_error?
location.href = "
#{
errors_githost_path
}
";
-
else
:plain
:plain
$('.project_new_holder').show();
$('.project_new_holder').show();
$("#new_project").replaceWith("
#{
escape_javascript
(
render
(
'new_form'
))
}
");
$("#new_project").replaceWith("
#{
escape_javascript
(
render
(
'new_form'
))
}
");
$('.save-project-loader').hide();
$('.save-project-loader').hide();
new Projects();
new Projects();
$('select.chosen').chosen()
features/project/project.feature
浏览文件 @
232d61d5
Feature
:
Project
s
Feature
:
Project
Feature
Background
:
Background
:
Given
I sign in as a user
Given
I sign in as a user
And
I own project
"Shop"
And
I own project
"Shop"
...
...
features/steps/project/project.rb
浏览文件 @
232d61d5
class
Project
s
<
Spinach
::
FeatureSteps
class
Project
Feature
<
Spinach
::
FeatureSteps
include
SharedAuthentication
include
SharedAuthentication
include
SharedProject
include
SharedProject
include
SharedPaths
include
SharedPaths
...
...
features/steps/shared/project.rb
浏览文件 @
232d61d5
...
@@ -47,7 +47,6 @@ module SharedProject
...
@@ -47,7 +47,6 @@ module SharedProject
Then
'I should see project settings'
do
Then
'I should see project settings'
do
current_path
.
should
==
edit_project_path
(
@project
)
current_path
.
should
==
edit_project_path
(
@project
)
page
.
should
have_content
(
"Project name is"
)
page
.
should
have_content
(
"Project name is"
)
page
.
should
have_content
(
"Advanced settings:"
)
page
.
should
have_content
(
"Features:"
)
page
.
should
have_content
(
"Features:"
)
end
end
...
...
lib/api/projects.rb
浏览文件 @
232d61d5
...
@@ -43,7 +43,7 @@ module Gitlab
...
@@ -43,7 +43,7 @@ module Gitlab
:wall_enabled
,
:wall_enabled
,
:merge_requests_enabled
,
:merge_requests_enabled
,
:wiki_enabled
]
:wiki_enabled
]
@project
=
Project
.
create_by_user
(
attrs
,
current_user
)
@project
=
Project
s
::
CreateContext
.
new
(
nil
,
attrs
,
current_user
).
execute
if
@project
.
saved?
if
@project
.
saved?
present
@project
,
with:
Entities
::
Project
present
@project
,
with:
Entities
::
Project
else
else
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录