Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
gitlab-ce
Commits
232d61d5
Commit
232d61d5
authored
Jan 17, 2013
by
GitLab
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Refactor project creation. Added logout link to profile page
parent
c7c1a97c
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
126 additions
and
116 deletions
+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
No files found.
app/assets/stylesheets/sections/projects.scss
View file @
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
deleted
100644 → 0
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
232d61d5
module
NamespacesHelper
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
]]
]
group_opts
=
[
"Groups"
,
groups
.
map
{
|
g
|
[
g
.
human_name
,
g
.
id
]}
]
...
...
app/models/ability.rb
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
232d61d5
...
...
@@ -9,19 +9,11 @@
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;"
)
-
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
View file @
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
View file @
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
View file @
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
View file @
232d61d5
class
Project
s
<
Spinach
::
FeatureSteps
class
Project
Feature
<
Spinach
::
FeatureSteps
include
SharedAuthentication
include
SharedProject
include
SharedPaths
...
...
features/steps/shared/project.rb
View file @
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
View file @
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
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment