Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
heptapod
heptapod
Commits
c75628a1d781
Commit
c75628a1
authored
Jan 04, 2013
by
Dmitriy Zaporozhets
Browse files
Continue refactoring. Use repostory and team
parent
c264e028f9a7
Changes
42
Hide whitespace changes
Inline
Side-by-side
app/contexts/notes/load_context.rb
View file @
c75628a1
...
...
@@ -9,7 +9,7 @@
@notes
=
case
target_type
when
"commit"
project
.
commit_notes
(
project
.
commit
(
target_id
)).
fresh
.
limit
(
20
)
project
.
commit_notes
(
project
.
repository
.
commit
(
target_id
)).
fresh
.
limit
(
20
)
when
"issue"
project
.
issues
.
find
(
target_id
).
notes
.
inc_author
.
fresh
.
limit
(
20
)
when
"merge_request"
...
...
app/contexts/test_hook_context.rb
View file @
c75628a1
class
TestHookContext
<
BaseContext
def
execute
hook
=
project
.
hooks
.
find
(
params
[
:id
])
commits
=
project
.
commits
(
project
.
default_branch
,
nil
,
3
)
commits
=
project
.
repository
.
commits
(
project
.
default_branch
,
nil
,
3
)
data
=
project
.
post_receive_data
(
commits
.
last
.
id
,
commits
.
first
.
id
,
"refs/heads/
#{
project
.
default_branch
}
"
,
current_user
)
hook
.
execute
(
data
)
end
...
...
app/controllers/admin/projects_controller.rb
View file @
c75628a1
...
...
@@ -10,6 +10,7 @@
end
def
show
@repository
=
@project
.
repository
@users
=
User
.
active
@users
=
@users
.
not_in_project
(
@project
)
if
@project
.
users
.
present?
@users
=
@users
.
all
...
...
@@ -19,7 +20,7 @@
end
def
team_update
@project
.
add_users_ids
_to_team
(
params
[
:user_ids
],
params
[
:project_access
])
@project
.
team
.
add_users_ids
(
params
[
:user_ids
],
params
[
:project_access
])
redirect_to
[
:admin
,
@project
],
notice:
'Project was successfully updated.'
end
...
...
@@ -36,7 +37,7 @@
def
destroy
# Delete team first in order to prevent multiple gitolite calls
@project
.
truncate
_team
@project
.
team
.
truncate
@project
.
destroy
...
...
app/controllers/merge_requests_controller.rb
View file @
c75628a1
...
...
@@ -83,8 +83,8 @@
end
def
branch_from
@commit
=
project
.
commit
(
params
[
:ref
])
@commit
=
@repository
.
commit
(
params
[
:ref
])
@commit
=
CommitDecorator
.
decorate
(
@commit
)
end
def
branch_to
...
...
@@ -87,8 +87,8 @@
@commit
=
CommitDecorator
.
decorate
(
@commit
)
end
def
branch_to
@commit
=
project
.
commit
(
params
[
:ref
])
@commit
=
@repository
.
commit
(
params
[
:ref
])
@commit
=
CommitDecorator
.
decorate
(
@commit
)
end
...
...
app/controllers/projects_controller.rb
View file @
c75628a1
...
...
@@ -2,6 +2,7 @@
class
ProjectsController
<
ProjectResourceController
skip_before_filter
:project
,
only:
[
:new
,
:create
]
skip_before_filter
:repository
,
only:
[
:new
,
:create
]
# Authorize
before_filter
:authorize_read_project!
,
except:
[
:index
,
:new
,
:create
]
...
...
@@ -58,7 +59,7 @@
respond_to
do
|
format
|
format
.
html
do
unless
@project
.
empty
_repo
?
if
@project
.
repository
&&
!
@project
.
repository
.
empty?
@last_push
=
current_user
.
recent_push
(
@project
.
id
)
render
:show
else
...
...
app/controllers/services_controller.rb
View file @
c75628a1
...
...
@@ -26,7 +26,7 @@
end
def
test
commits
=
project
.
commits
(
project
.
default_branch
,
nil
,
3
)
commits
=
project
.
repository
.
commits
(
project
.
default_branch
,
nil
,
3
)
data
=
project
.
post_receive_data
(
commits
.
last
.
id
,
commits
.
first
.
id
,
"refs/heads/
#{
project
.
default_branch
}
"
,
current_user
)
@service
=
project
.
gitlab_ci_service
...
...
app/controllers/team_members_controller.rb
View file @
c75628a1
...
...
@@ -16,10 +16,9 @@
end
def
create
@project
.
add_users_ids_to_team
(
params
[
:user_ids
],
params
[
:project_access
]
)
users
=
User
.
where
(
id:
params
[
:user_ids
])
@project
.
team
<<
[
users
,
params
[
:project_access
]]
if
params
[
:redirect_to
]
redirect_to
params
[
:redirect_to
]
...
...
@@ -50,7 +49,7 @@
def
apply_import
giver
=
Project
.
find
(
params
[
:source_project_id
])
status
=
UsersP
roject
.
import
_team
(
giver
,
project
)
status
=
@p
roject
.
team
.
import
(
giver
)
notice
=
status
?
"Succesfully imported"
:
"Import failed"
redirect_to
project_team_members_path
(
project
),
notice:
notice
...
...
app/helpers/application_helper.rb
View file @
c75628a1
...
...
@@ -53,7 +53,7 @@
def
last_commit
(
project
)
if
project
.
repo_exists?
time_ago_in_words
(
project
.
commit
.
committed_date
)
+
" ago"
time_ago_in_words
(
project
.
repository
.
commit
.
committed_date
)
+
" ago"
else
"Never"
end
...
...
@@ -102,7 +102,7 @@
]
project_nav
=
[]
if
@project
&&
!
@project
.
new_record?
if
@project
&&
@project
.
repository
&&
@project
.
repository
.
root_ref
project_nav
=
[
{
label:
"
#{
@project
.
name
}
Issues"
,
url:
project_issues_path
(
@project
)
},
{
label:
"
#{
@project
.
name
}
Commits"
,
url:
project_commits_path
(
@project
,
@ref
||
@project
.
repository
.
root_ref
)
},
...
...
@@ -142,6 +142,7 @@
event
.
last_push_to_non_root?
&&
!
event
.
rm_ref?
&&
event
.
project
&&
event
.
project
.
repository
&&
event
.
project
.
merge_requests_enabled
end
...
...
app/helpers/merge_requests_helper.rb
View file @
c75628a1
...
...
@@ -4,7 +4,7 @@
event
.
project
,
merge_request:
{
source_branch:
event
.
branch_name
,
target_branch:
event
.
project
.
root_ref
,
target_branch:
event
.
project
.
repository
.
root_ref
,
title:
event
.
branch_name
.
titleize
}
)
...
...
app/models/event.rb
View file @
c75628a1
...
...
@@ -204,7 +204,7 @@
# Max 20 commits from push DESC
def
commits
@commits
||=
data
[
:commits
].
map
{
|
commit
|
project
.
commit
(
commit
[
:id
])
}.
reverse
@commits
||=
data
[
:commits
].
map
{
|
commit
|
repository
.
commit
(
commit
[
:id
])
}.
reverse
end
def
commits_count
...
...
@@ -225,4 +225,8 @@
end
end
def
repository
project
.
repository
end
def
parent_commit
...
...
@@ -228,7 +232,7 @@
def
parent_commit
project
.
commit
(
commit_from
)
repository
.
commit
(
commit_from
)
rescue
=>
ex
nil
end
def
last_commit
...
...
@@ -230,9 +234,9 @@
rescue
=>
ex
nil
end
def
last_commit
project
.
commit
(
commit_to
)
repository
.
commit
(
commit_to
)
rescue
=>
ex
nil
end
...
...
app/models/note.rb
View file @
c75628a1
...
...
@@ -71,7 +71,7 @@
# override to return commits, which are not active record
def
noteable
if
for_commit?
project
.
commit
(
commit_id
)
project
.
repository
.
commit
(
commit_id
)
else
super
end
...
...
app/models/project.rb
View file @
c75628a1
...
...
@@ -166,7 +166,13 @@
end
def
repository
@repository
||=
Repository
.
new
(
path_with_namespace
,
default_branch
)
if
path
@repository
||=
Repository
.
new
(
path_with_namespace
,
default_branch
)
else
nil
end
rescue
Grit
::
NoSuchPathError
nil
end
def
git_error?
...
...
@@ -279,39 +285,6 @@
users_projects
.
find_by_user_id
(
user_id
)
end
# Update multiple project users
# to same access role by user ids
def
update_users_ids_to_role
(
users_ids
,
access_role
)
UsersProject
.
bulk_update
(
self
,
users_ids
,
access_role
)
end
# Delete multiple users from project by user ids
def
delete_users_ids_from_team
(
users_ids
)
UsersProject
.
bulk_delete
(
self
,
users_ids
)
end
def
repository_readers
repository_members
[
UsersProject
::
REPORTER
]
end
def
repository_writers
repository_members
[
UsersProject
::
DEVELOPER
]
end
def
repository_masters
repository_members
[
UsersProject
::
MASTER
]
end
def
repository_members
keys
=
Hash
.
new
{
|
h
,
k
|
h
[
k
]
=
[]
}
UsersProject
.
select
(
"keys.identifier, project_access"
).
joins
(
user: :keys
).
where
(
project_id:
id
).
each
{
|
row
|
keys
[
row
.
project_access
]
<<
[
row
.
identifier
]
}
keys
[
UsersProject
::
REPORTER
]
+=
deploy_keys
.
pluck
(
:identifier
)
keys
end
def
transfer
(
new_namespace
)
Project
.
transaction
do
old_namespace
=
namespace
...
...
@@ -441,7 +414,7 @@
#
def
post_receive_data
(
oldrev
,
newrev
,
ref
,
user
)
push_commits
=
commits_between
(
oldrev
,
newrev
)
push_commits
=
repository
.
commits_between
(
oldrev
,
newrev
)
# Total commits count
push_commits_count
=
push_commits
.
size
...
...
@@ -488,7 +461,7 @@
def
update_merge_requests
(
oldrev
,
newrev
,
ref
,
user
)
return
true
unless
ref
=~
/heads/
branch_name
=
ref
.
gsub
(
"refs/heads/"
,
""
)
c_ids
=
self
.
commits_between
(
oldrev
,
newrev
).
map
(
&
:id
)
c_ids
=
self
.
repository
.
commits_between
(
oldrev
,
newrev
).
map
(
&
:id
)
# Update code for merge requests
mrs
=
self
.
merge_requests
.
opened
.
find_all_by_branch
(
branch_name
).
all
...
...
@@ -510,7 +483,7 @@
end
def
empty_repo?
!
repository
||
repository
.
empty
_repo
?
!
repository
||
repository
.
empty?
end
def
satellite
...
...
app/models/protected_branch.rb
View file @
c75628a1
...
...
@@ -26,6 +26,6 @@
end
def
commit
project
.
commit
(
self
.
name
)
project
.
repository
.
commit
(
self
.
name
)
end
end
app/models/repository.rb
View file @
c75628a1
...
...
@@ -13,5 +13,5 @@
attr_accessor
:root_ref
def
initialize
(
path_with_namespace
,
root_ref
=
'master'
)
@root_ref
=
root_ref
@root_ref
=
root_ref
||
"master"
@path_with_namespace
=
path_with_namespace
...
...
@@ -17,5 +17,7 @@
@path_with_namespace
=
path_with_namespace
@repo
=
Grit
::
Repo
.
new
(
path_to_repo
)
# Init grit repo object
repo
end
def
raw
...
...
@@ -26,6 +28,10 @@
@path_to_repo
||=
File
.
join
(
Gitlab
.
config
.
gitolite
.
repos_path
,
"
#{
path_with_namespace
}
.git"
)
end
def
repo
@repo
||=
Grit
::
Repo
.
new
(
path_to_repo
)
end
def
commit
(
commit_id
=
nil
)
Commit
.
find_or_first
(
repo
,
commit_id
,
root_ref
)
end
...
...
@@ -114,7 +120,7 @@
false
end
def
empty
_repo
?
def
empty?
!
has_commits?
end
...
...
app/models/team.rb
View file @
c75628a1
...
...
@@ -3,7 +3,22 @@
def
initialize
(
project
)
@project
=
project
@roles
=
UsersProject
.
roles_hash
end
# Shortcut to add users
#
# Use:
# @team << [@user, :master]
# @team << [@users, :master]
#
def
<<
args
users
=
args
.
first
if
users
.
respond_to?
(
:each
)
add_users
(
users
,
args
.
second
)
else
add_user
(
users
,
args
.
second
)
end
end
def
add_user
(
user
,
access
)
...
...
@@ -14,7 +29,7 @@
add_users_ids
(
users
.
map
(
&
:id
),
access
)
end
def
add_users_ids
(
user
s
_ids
,
access
)
def
add_users_ids
(
user_ids
,
access
)
UsersProject
.
add_users_into_projects
(
[
project
.
id
],
user_ids
,
...
...
@@ -46,4 +61,58 @@
def
masters
members
.
masters
.
map
(
&
:user
)
end
def
repository_readers
repository_members
[
UsersProject
::
REPORTER
]
end
def
repository_writers
repository_members
[
UsersProject
::
DEVELOPER
]
end
def
repository_masters
repository_members
[
UsersProject
::
MASTER
]
end
def
repository_members
keys
=
Hash
.
new
{
|
h
,
k
|
h
[
k
]
=
[]
}
UsersProject
.
select
(
"keys.identifier, project_access"
).
joins
(
user: :keys
).
where
(
project_id:
project
.
id
).
each
{
|
row
|
keys
[
row
.
project_access
]
<<
[
row
.
identifier
]
}
keys
[
UsersProject
::
REPORTER
]
+=
project
.
deploy_keys
.
pluck
(
:identifier
)
keys
end
def
import
(
source_project
)
target_project
=
project
source_team
=
source_project
.
users_projects
.
all
target_team
=
target_project
.
users_projects
.
all
target_user_ids
=
target_team
.
map
(
&
:user_id
)
source_team
.
reject!
do
|
tm
|
# Skip if user already present in team
target_user_ids
.
include?
(
tm
.
user_id
)
end
source_team
.
map!
do
|
tm
|
new_tm
=
tm
.
dup
new_tm
.
id
=
nil
new_tm
.
project_id
=
target_project
.
id
new_tm
.
skip_git
=
true
new_tm
end
UsersProject
.
transaction
do
source_team
.
each
do
|
tm
|
tm
.
save
end
target_project
.
update_repository
end
true
rescue
false
end
end
app/models/user.rb
View file @
c75628a1
...
...
@@ -188,7 +188,7 @@
# Team membership in personal projects
def
tm_in_personal_projects
p
ers
onal_projects
.
users_projects
.
where
(
user_id:
self
.
id
)
Us
ers
Project
.
where
(
project_id:
personal_projects
.
map
(
&
:id
),
user_id:
self
.
id
)
end
# Returns a string for use as a Gitolite user identifier
...
...
app/models/users_project.rb
View file @
c75628a1
...
...
@@ -48,4 +48,17 @@
# access can be an integer representing a access code
# or symbol like :master representing role
#
# Ex.
# add_users_into_projects(
# project_ids,
# user_ids,
# UsersProject::MASTER
# )
#
# add_users_into_projects(
# project_ids,
# user_ids,
# :master
# )
#
def
add_users_into_projects
(
project_ids
,
user_ids
,
access
)
...
...
@@ -51,7 +64,7 @@
def
add_users_into_projects
(
project_ids
,
user_ids
,
access
)
project_access
=
if
@
roles
.
has_key?
(
access
)
@
roles
[
access
]
elsif
@
roles
.
values
.
include?
(
access
)
project_access
=
if
roles
_hash
.
has_key?
(
access
)
roles
_hash
[
access
]
elsif
roles
_hash
.
values
.
include?
(
access
.
to_i
)
access
else
raise
"Non valid access"
...
...
@@ -93,36 +106,6 @@
truncate_teams
[
project
.
id
]
end
def
import_team
(
source_project
,
target_project
)
source_team
=
source_project
.
users_projects
.
all
target_team
=
target_project
.
users_projects
.
all
target_user_ids
=
target_team
.
map
(
&
:user_id
)
source_team
.
reject!
do
|
tm
|
# Skip if user already present in team
target_user_ids
.
include?
(
tm
.
user_id
)
end
source_team
.
map!
do
|
tm
|
new_tm
=
tm
.
dup
new_tm
.
id
=
nil
new_tm
.
project_id
=
target_project
.
id
new_tm
.
skip_git
=
true
new_tm
end
UsersProject
.
transaction
do
source_team
.
each
do
|
tm
|
tm
.
save
end
target_project
.
update_repository
end
true
rescue
false
end
def
bulk_delete
(
project
,
user_ids
)
UsersProject
.
transaction
do
UsersProject
.
where
(
user_id:
user_ids
,
project_id:
project
.
id
).
each
do
|
users_project
|
...
...
app/views/admin/projects/_form.html.haml
View file @
c75628a1
...
...
@@ -22,7 +22,7 @@
-
if
project
.
repo_exists?
.clearfix
=
f
.
label
:default_branch
,
"Default Branch"
.input
=
f
.
select
(
:default_branch
,
project
.
heads
.
map
(
&
:name
),
{},
style:
"width:210px;"
)
.input
=
f
.
select
(
:default_branch
,
repository
.
heads
.
map
(
&
:name
),
{},
style:
"width:210px;"
)
%fieldset
.adv_settings
%legend
Features:
...
...
app/views/admin/projects/show.html.haml
View file @
c75628a1
...
...
@@ -4,11 +4,11 @@
%i
.icon-edit
Edit
-
if
@
project
.
has_commits?
-
if
!
@
project
.
has_post_receive_file?
-
if
@
repository
.
has_commits?
-
if
!
@
repository
.
has_post_receive_file?
%br
.alert.alert-error
%span
%strong
Project has commits but missing post-receive file.
%br
If you exported project manually - make a link of post-receive hook file from gitolite to project repository
...
...
@@ -9,10 +9,10 @@
%br
.alert.alert-error
%span
%strong
Project has commits but missing post-receive file.
%br
If you exported project manually - make a link of post-receive hook file from gitolite to project repository
-
elsif
!
@
project
.
valid_post_receive_file?
-
elsif
!
@
repository
.
valid_post_receive_file?
%br
.alert.alert-error
%span
...
...
@@ -76,7 +76,7 @@
%b
FS Path:
%td
%code
=
@
project
.
path_to_repo
%code
=
@
repository
.
path_to_repo
%tr
%td
%b
...
...
@@ -100,7 +100,7 @@
%b
Post Receive File:
%td
=
check_box_tag
:post_receive_file
,
1
,
@
project
.
has_post_receive_file?
,
disabled:
true
=
check_box_tag
:post_receive_file
,
1
,
@
repository
.
has_post_receive_file?
,
disabled:
true
%br
%h5
...
...
app/views/merge_requests/_form.html.haml
View file @
c75628a1
...
...
@@ -13,7 +13,7 @@
.mr_branch_box
%h5
From (Head Branch)
.body
.padded
=
f
.
select
(
:source_branch
,
@
project
.
heads
.
map
(
&
:name
),
{
include_blank:
"Select branch"
},
{
class:
'chosen span4'
})
.padded
=
f
.
select
(
:source_branch
,
@
repository
.
heads
.
map
(
&
:name
),
{
include_blank:
"Select branch"
},
{
class:
'chosen span4'
})
.mr_source_commit
.span2
...
...
@@ -22,7 +22,7 @@
.mr_branch_box
%h5
To (Base Branch)
.body
.padded
=
f
.
select
(
:target_branch
,
@
project
.
heads
.
map
(
&
:name
),
{
include_blank:
"Select branch"
},
{
class:
'chosen span4'
})
.padded
=
f
.
select
(
:target_branch
,
@
repository
.
heads
.
map
(
&
:name
),
{
include_blank:
"Select branch"
},
{
class:
'chosen span4'
})
.mr_target_commit
%h4
.cdark
2. Fill info
...
...
Prev
1
2
3
Next
Write
Preview
Supports
Markdown
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