summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-01-04 08:43:25 +0200
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-01-04 08:43:25 +0200
commitdccd8b6eaa8b2e98b0245262a8e39df8fb8ae634 (patch)
tree541a40fb2e84b24ab0c4ae39fa18b1b720e5d7c2
parent39ba934c0a65f571214998e056e925b61f389360 (diff)
downloadgitlab-ce-dccd8b6eaa8b2e98b0245262a8e39df8fb8ae634.tar.gz
Continue refactoring. Use repostory and team
-rw-r--r--app/contexts/notes/load_context.rb2
-rw-r--r--app/contexts/test_hook_context.rb2
-rw-r--r--app/controllers/admin/projects_controller.rb5
-rw-r--r--app/controllers/merge_requests_controller.rb4
-rw-r--r--app/controllers/projects_controller.rb3
-rw-r--r--app/controllers/services_controller.rb2
-rw-r--r--app/controllers/team_members_controller.rb9
-rw-r--r--app/helpers/application_helper.rb5
-rw-r--r--app/helpers/merge_requests_helper.rb2
-rw-r--r--app/models/event.rb10
-rw-r--r--app/models/note.rb2
-rw-r--r--app/models/project.rb47
-rw-r--r--app/models/protected_branch.rb2
-rw-r--r--app/models/repository.rb12
-rw-r--r--app/models/team.rb73
-rw-r--r--app/models/user.rb2
-rw-r--r--app/models/users_project.rb49
-rw-r--r--app/views/admin/projects/_form.html.haml2
-rw-r--r--app/views/admin/projects/show.html.haml10
-rw-r--r--app/views/merge_requests/_form.html.haml4
-rw-r--r--app/views/projects/_form.html.haml6
-rw-r--r--app/workers/post_receive.rb2
-rw-r--r--features/steps/admin/admin_groups.rb2
-rw-r--r--features/steps/dashboard/dashboard.rb4
-rw-r--r--features/steps/dashboard/dashboard_issues.rb2
-rw-r--r--features/steps/dashboard/dashboard_merge_requests.rb4
-rw-r--r--features/steps/dashboard/dashboard_search.rb6
-rw-r--r--features/steps/group/group.rb2
-rw-r--r--features/steps/project/project_team_management.rb6
-rw-r--r--features/steps/shared/paths.rb14
-rw-r--r--features/steps/shared/project.rb6
-rw-r--r--lib/gitlab/backend/gitolite_config.rb8
-rw-r--r--lib/gitlab/markdown.rb2
-rw-r--r--lib/gitlab/satellite/merge_action.rb2
-rw-r--r--spec/models/project_spec.rb16
-rw-r--r--spec/models/repository_spec.rb14
-rw-r--r--spec/models/system_hook_spec.rb4
-rw-r--r--spec/models/team_spec.rb12
-rw-r--r--spec/models/users_project_spec.rb10
-rw-r--r--spec/requests/issues_spec.rb3
-rw-r--r--spec/requests/projects_spec.rb8
-rw-r--r--spec/support/stubbed_repository.rb18
42 files changed, 219 insertions, 179 deletions
diff --git a/app/contexts/notes/load_context.rb b/app/contexts/notes/load_context.rb
index 05626c31a25..907c7c7ade2 100644
--- a/app/contexts/notes/load_context.rb
+++ b/app/contexts/notes/load_context.rb
@@ -9,7 +9,7 @@ module Notes
@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"
diff --git a/app/contexts/test_hook_context.rb b/app/contexts/test_hook_context.rb
index cba5d1f87c2..d2d82a52cf5 100644
--- a/app/contexts/test_hook_context.rb
+++ b/app/contexts/test_hook_context.rb
@@ -1,7 +1,7 @@
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
diff --git a/app/controllers/admin/projects_controller.rb b/app/controllers/admin/projects_controller.rb
index e1982eee577..d5e6f3cdc0e 100644
--- a/app/controllers/admin/projects_controller.rb
+++ b/app/controllers/admin/projects_controller.rb
@@ -10,6 +10,7 @@ class Admin::ProjectsController < AdminController
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 @@ class Admin::ProjectsController < AdminController
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 @@ class Admin::ProjectsController < AdminController
def destroy
# Delete team first in order to prevent multiple gitolite calls
- @project.truncate_team
+ @project.team.truncate
@project.destroy
diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb
index fa4eaff8469..d2d92e60585 100644
--- a/app/controllers/merge_requests_controller.rb
+++ b/app/controllers/merge_requests_controller.rb
@@ -83,12 +83,12 @@ class MergeRequestsController < ProjectResourceController
end
def branch_from
- @commit = project.commit(params[:ref])
+ @commit = @repository.commit(params[:ref])
@commit = CommitDecorator.decorate(@commit)
end
def branch_to
- @commit = project.commit(params[:ref])
+ @commit = @repository.commit(params[:ref])
@commit = CommitDecorator.decorate(@commit)
end
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 47143624ec4..0df30220ebd 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -2,6 +2,7 @@ require Rails.root.join('lib', 'gitlab', 'graph', 'json_builder')
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 @@ class ProjectsController < ProjectResourceController
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
diff --git a/app/controllers/services_controller.rb b/app/controllers/services_controller.rb
index 50f7e97af9f..d0df469b967 100644
--- a/app/controllers/services_controller.rb
+++ b/app/controllers/services_controller.rb
@@ -26,7 +26,7 @@ class ServicesController < ProjectResourceController
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
diff --git a/app/controllers/team_members_controller.rb b/app/controllers/team_members_controller.rb
index 311af62b8db..8378a8458ff 100644
--- a/app/controllers/team_members_controller.rb
+++ b/app/controllers/team_members_controller.rb
@@ -16,10 +16,9 @@ class TeamMembersController < ProjectResourceController
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 @@ class TeamMembersController < ProjectResourceController
def apply_import
giver = Project.find(params[:source_project_id])
- status = UsersProject.import_team(giver, project)
+ status = @project.team.import(giver)
notice = status ? "Succesfully imported" : "Import failed"
redirect_to project_team_members_path(project), notice: notice
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 045929f9dd3..a1eea96be43 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -53,7 +53,7 @@ module ApplicationHelper
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 @@ module ApplicationHelper
]
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 @@ module ApplicationHelper
event.last_push_to_non_root? &&
!event.rm_ref? &&
event.project &&
+ event.project.repository &&
event.project.merge_requests_enabled
end
diff --git a/app/helpers/merge_requests_helper.rb b/app/helpers/merge_requests_helper.rb
index f48425bd6de..ca0a89c3749 100644
--- a/app/helpers/merge_requests_helper.rb
+++ b/app/helpers/merge_requests_helper.rb
@@ -4,7 +4,7 @@ module MergeRequestsHelper
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
}
)
diff --git a/app/models/event.rb b/app/models/event.rb
index a737bfb0626..d0ba61544d1 100644
--- a/app/models/event.rb
+++ b/app/models/event.rb
@@ -204,7 +204,7 @@ class Event < ActiveRecord::Base
# 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,14 +225,18 @@ class Event < ActiveRecord::Base
end
end
+ def repository
+ project.repository
+ end
+
def parent_commit
- project.commit(commit_from)
+ repository.commit(commit_from)
rescue => ex
nil
end
def last_commit
- project.commit(commit_to)
+ repository.commit(commit_to)
rescue => ex
nil
end
diff --git a/app/models/note.rb b/app/models/note.rb
index 100f72b6eac..abd89a8a46e 100644
--- a/app/models/note.rb
+++ b/app/models/note.rb
@@ -71,7 +71,7 @@ class Note < ActiveRecord::Base
# 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
diff --git a/app/models/project.rb b/app/models/project.rb
index f2ad390b5b6..850653988c9 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -166,7 +166,13 @@ class Project < ActiveRecord::Base
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 @@ class Project < ActiveRecord::Base
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 @@ class Project < ActiveRecord::Base
#
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 @@ class Project < ActiveRecord::Base
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 @@ class Project < ActiveRecord::Base
end
def empty_repo?
- !repository || repository.empty_repo?
+ !repository || repository.empty?
end
def satellite
diff --git a/app/models/protected_branch.rb b/app/models/protected_branch.rb
index f405a7bf7bc..3308caf360a 100644
--- a/app/models/protected_branch.rb
+++ b/app/models/protected_branch.rb
@@ -26,6 +26,6 @@ class ProtectedBranch < ActiveRecord::Base
end
def commit
- project.commit(self.name)
+ project.repository.commit(self.name)
end
end
diff --git a/app/models/repository.rb b/app/models/repository.rb
index a0351ce28c7..cf8ba4530a1 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -13,9 +13,11 @@ class Repository
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
- @repo = Grit::Repo.new(path_to_repo)
+
+ # Init grit repo object
+ repo
end
def raw
@@ -26,6 +28,10 @@ class Repository
@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 @@ class Repository
false
end
- def empty_repo?
+ def empty?
!has_commits?
end
diff --git a/app/models/team.rb b/app/models/team.rb
index 894361d1273..f235d20ebdb 100644
--- a/app/models/team.rb
+++ b/app/models/team.rb
@@ -3,7 +3,22 @@ class Team
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 @@ class Team
add_users_ids(users.map(&:id), access)
end
- def add_users_ids(users_ids, access)
+ def add_users_ids(user_ids, access)
UsersProject.add_users_into_projects(
[project.id],
user_ids,
@@ -46,4 +61,58 @@ class Team
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
diff --git a/app/models/user.rb b/app/models/user.rb
index d166ae4dc79..5e4815da865 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -188,7 +188,7 @@ class User < ActiveRecord::Base
# Team membership in personal projects
def tm_in_personal_projects
- personal_projects.users_projects.where(user_id: self.id)
+ UsersProject.where(project_id: personal_projects.map(&:id), user_id: self.id)
end
# Returns a string for use as a Gitolite user identifier
diff --git a/app/models/users_project.rb b/app/models/users_project.rb
index a8e14675cd7..450eb3d59fd 100644
--- a/app/models/users_project.rb
+++ b/app/models/users_project.rb
@@ -48,10 +48,23 @@ class UsersProject < ActiveRecord::Base
# 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)
- 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 @@ class UsersProject < ActiveRecord::Base
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|
diff --git a/app/views/admin/projects/_form.html.haml b/app/views/admin/projects/_form.html.haml
index 27c22872d50..534c42223b3 100644
--- a/app/views/admin/projects/_form.html.haml
+++ b/app/views/admin/projects/_form.html.haml
@@ -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:
diff --git a/app/views/admin/projects/show.html.haml b/app/views/admin/projects/show.html.haml
index ca9b9d3d444..1a4c5705892 100644
--- a/app/views/admin/projects/show.html.haml
+++ b/app/views/admin/projects/show.html.haml
@@ -4,15 +4,15 @@
%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
- - 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
diff --git a/app/views/merge_requests/_form.html.haml b/app/views/merge_requests/_form.html.haml
index 9606e2e53b3..37cde812298 100644
--- a/app/views/merge_requests/_form.html.haml
+++ b/app/views/merge_requests/_form.html.haml
@@ -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
diff --git a/app/views/projects/_form.html.haml b/app/views/projects/_form.html.haml
index 7044d1f20be..c8eacdc2a46 100644
--- a/app/views/projects/_form.html.haml
+++ b/app/views/projects/_form.html.haml
@@ -15,13 +15,13 @@
= f.label :path do
Repository
.controls
- = text_field_tag :ppath, @project.path_to_repo, class: "xxlarge", readonly: true
+ = text_field_tag :ppath, @repository.path_to_repo, class: "xxlarge", readonly: true
- - unless @project.heads.empty?
+ - unless @repository.heads.empty?
.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.features
%legend Features:
diff --git a/app/workers/post_receive.rb b/app/workers/post_receive.rb
index 1414ed490c9..9e3f32f835d 100644
--- a/app/workers/post_receive.rb
+++ b/app/workers/post_receive.rb
@@ -11,7 +11,7 @@ class PostReceive
# Ignore push from non-gitlab users
user = if identifier.eql? Gitlab.config.gitolite.admin_key
- email = project.commit(newrev).author.email rescue nil
+ email = project.repository.commit(newrev).author.email rescue nil
User.find_by_email(email) if email
elsif /^[A-Z0-9._%a-z\-]+@(?:[A-Z0-9a-z\-]+\.)+[A-Za-z]{2,4}$/.match(identifier)
User.find_by_email(identifier)
diff --git a/features/steps/admin/admin_groups.rb b/features/steps/admin/admin_groups.rb
index 4cd071657fe..cbca2daa701 100644
--- a/features/steps/admin/admin_groups.rb
+++ b/features/steps/admin/admin_groups.rb
@@ -16,7 +16,7 @@ class AdminGroups < Spinach::FeatureSteps
@project = create(:project, group: @group)
@event = create(:closed_issue_event, project: @project)
- @project.add_access current_user, :admin
+ @project.team << [current_user, :master]
end
And 'Create gitlab user "John"' do
diff --git a/features/steps/dashboard/dashboard.rb b/features/steps/dashboard/dashboard.rb
index 775a721f1a4..73e22673749 100644
--- a/features/steps/dashboard/dashboard.rb
+++ b/features/steps/dashboard/dashboard.rb
@@ -61,7 +61,7 @@ class Dashboard < Spinach::FeatureSteps
And 'I own project "Shop"' do
@project = create :project, name: 'Shop'
- @project.add_access(@user, :admin)
+ @project.team << [@user, :master]
end
And 'I have group with projects' do
@@ -69,7 +69,7 @@ class Dashboard < Spinach::FeatureSteps
@project = create(:project, group: @group)
@event = create(:closed_issue_event, project: @project)
- @project.add_access current_user, :admin
+ @project.team << [current_user, :master]
end
And 'project "Shop" has push event' do
diff --git a/features/steps/dashboard/dashboard_issues.rb b/features/steps/dashboard/dashboard_issues.rb
index 5ace88023f0..fcf4296ad11 100644
--- a/features/steps/dashboard/dashboard_issues.rb
+++ b/features/steps/dashboard/dashboard_issues.rb
@@ -13,7 +13,7 @@ class DashboardIssues < Spinach::FeatureSteps
And 'I have assigned issues' do
project = create :project
- project.add_access(@user, :read, :write)
+ project.team << [@user, :master]
2.times { create :issue, author: @user, assignee: @user, project: project }
end
diff --git a/features/steps/dashboard/dashboard_merge_requests.rb b/features/steps/dashboard/dashboard_merge_requests.rb
index 485a4ccc113..7cfa8a13ff8 100644
--- a/features/steps/dashboard/dashboard_merge_requests.rb
+++ b/features/steps/dashboard/dashboard_merge_requests.rb
@@ -14,8 +14,8 @@ class DashboardMergeRequests < Spinach::FeatureSteps
project1 = create :project
project2 = create :project
- project1.add_access(@user, :read, :write)
- project2.add_access(@user, :read, :write)
+ project1.team << [@user, :master]
+ project2.team << [@user, :master]
merge_request1 = create :merge_request, author: @user, project: project1
merge_request2 = create :merge_request, author: @user, project: project2
diff --git a/features/steps/dashboard/dashboard_search.rb b/features/steps/dashboard/dashboard_search.rb
index a34c14d0c5f..9c8c879479d 100644
--- a/features/steps/dashboard/dashboard_search.rb
+++ b/features/steps/dashboard/dashboard_search.rb
@@ -1,6 +1,7 @@
class DashboardSearch < Spinach::FeatureSteps
include SharedAuthentication
include SharedPaths
+ include SharedProject
Given 'I search for "Sho"' do
fill_in "dashboard_search", with: "Sho"
@@ -11,11 +12,6 @@ class DashboardSearch < Spinach::FeatureSteps
page.should have_link "Shop"
end
- And 'I own project "Shop"' do
- @project = create(:project, :name => "Shop")
- @project.add_access(@user, :admin)
- end
-
Given 'I search for "Contibuting"' do
fill_in "dashboard_search", with: "Contibuting"
click_button "Search"
diff --git a/features/steps/group/group.rb b/features/steps/group/group.rb
index e3364f09e34..04d8c874b3e 100644
--- a/features/steps/group/group.rb
+++ b/features/steps/group/group.rb
@@ -13,7 +13,7 @@ class Groups < Spinach::FeatureSteps
@project = create(:project, group: @group)
@event = create(:closed_issue_event, project: @project)
- @project.add_access current_user, :admin
+ @project.team << [current_user, :master]
end
And 'I should see projects activity feed' do
diff --git a/features/steps/project/project_team_management.rb b/features/steps/project/project_team_management.rb
index 6bde0b64dfa..91b3ffeee9a 100644
--- a/features/steps/project/project_team_management.rb
+++ b/features/steps/project/project_team_management.rb
@@ -84,18 +84,18 @@ class ProjectTeamManagement < Spinach::FeatureSteps
And '"Sam" is "Shop" developer' do
user = User.find_by_name("Sam")
project = Project.find_by_name("Shop")
- project.add_access(user, :write)
+ project.team << [user, :developer]
end
Given 'I own project "Website"' do
@project = create(:project, :name => "Website")
- @project.add_access(@user, :admin)
+ @project.team << [@user, :master]
end
And '"Mike" is "Website" reporter' do
user = User.find_by_name("Mike")
project = Project.find_by_name("Website")
- project.add_access(user, :read)
+ project.team << [user, :reporter]
end
And 'I click link "Import team from another project"' do
diff --git a/features/steps/shared/paths.rb b/features/steps/shared/paths.rb
index bd43ba6b3dc..22d1f335063 100644
--- a/features/steps/shared/paths.rb
+++ b/features/steps/shared/paths.rb
@@ -114,15 +114,15 @@ module SharedPaths
end
Given "I visit my project's files page" do
- visit project_tree_path(@project, @project.root_ref)
+ visit project_tree_path(@project, root_ref)
end
Given "I visit my project's commits page" do
- visit project_commits_path(@project, @project.root_ref, {limit: 5})
+ visit project_commits_path(@project, root_ref, {limit: 5})
end
Given "I visit my project's commits page for a specific path" do
- visit project_commits_path(@project, @project.root_ref + "/app/models/project.rb", {limit: 5})
+ visit project_commits_path(@project, root_ref + "/app/models/project.rb", {limit: 5})
end
Given 'I visit my project\'s commits stats page' do
@@ -174,7 +174,7 @@ module SharedPaths
end
Given 'I visit project commits page' do
- visit project_commits_path(@project, @project.root_ref, {limit: 5})
+ visit project_commits_path(@project, root_ref, {limit: 5})
end
Given 'I visit project commits page for stable branch' do
@@ -182,7 +182,7 @@ module SharedPaths
end
Given 'I visit project source page' do
- visit project_tree_path(@project, @project.root_ref)
+ visit project_tree_path(@project, root_ref)
end
Given 'I visit blob file from repo' do
@@ -240,4 +240,8 @@ module SharedPaths
Given 'I visit project wiki page' do
visit project_wiki_path(@project, :index)
end
+
+ def root_ref
+ @project.repository.root_ref
+ end
end
diff --git a/features/steps/shared/project.rb b/features/steps/shared/project.rb
index dfc8ce9d99c..12dae15edf9 100644
--- a/features/steps/shared/project.rb
+++ b/features/steps/shared/project.rb
@@ -4,13 +4,13 @@ module SharedProject
# Create a project without caring about what it's called
And "I own a project" do
@project = create(:project)
- @project.add_access(@user, :admin)
+ @project.team << [@user, :master]
end
# Create a specific project called "Shop"
And 'I own project "Shop"' do
- @project = create(:project, :name => "Shop")
- @project.add_access(@user, :admin)
+ @project = create(:project, name: "Shop")
+ @project.team << [@user, :master]
end
def current_project
diff --git a/lib/gitlab/backend/gitolite_config.rb b/lib/gitlab/backend/gitolite_config.rb
index a2bc4ca8d74..10e527eac73 100644
--- a/lib/gitlab/backend/gitolite_config.rb
+++ b/lib/gitlab/backend/gitolite_config.rb
@@ -82,7 +82,7 @@ module Gitlab
end
def destroy_project(project)
- FileUtils.rm_rf(project.path_to_repo)
+ FileUtils.rm_rf(project.repository.path_to_repo)
conf.rm_repo(project.path_with_namespace)
end
@@ -138,9 +138,9 @@ module Gitlab
::Gitolite::Config::Repo.new(repo_name)
end
- name_readers = project.repository_readers
- name_writers = project.repository_writers
- name_masters = project.repository_masters
+ name_readers = project.team.repository_readers
+ name_writers = project.team.repository_writers
+ name_masters = project.team.repository_masters
pr_br = project.protected_branches.map(&:name).join("$ ")
diff --git a/lib/gitlab/markdown.rb b/lib/gitlab/markdown.rb
index 859184b6c3a..59249a229eb 100644
--- a/lib/gitlab/markdown.rb
+++ b/lib/gitlab/markdown.rb
@@ -170,7 +170,7 @@ module Gitlab
end
def reference_commit(identifier)
- if @project.valid_repo? && commit = @project.commit(identifier)
+ if @project.valid_repo? && commit = @project.repository.commit(identifier)
link_to(identifier, project_commit_path(@project, commit), html_options.merge(title: CommitDecorator.new(commit).link_title, class: "gfm gfm-commit #{html_options[:class]}"))
end
end
diff --git a/lib/gitlab/satellite/merge_action.rb b/lib/gitlab/satellite/merge_action.rb
index 832db6621c4..556a1e2d52f 100644
--- a/lib/gitlab/satellite/merge_action.rb
+++ b/lib/gitlab/satellite/merge_action.rb
@@ -31,7 +31,7 @@ module Gitlab
merge_repo.git.push({raise: true, timeout: true}, :origin, merge_request.target_branch)
# remove source branch
- if merge_request.should_remove_source_branch && !project.root_ref?(merge_request.source_branch)
+ if merge_request.should_remove_source_branch && !project.repository.root_ref?(merge_request.source_branch)
# will raise CommandFailed when push fails
merge_repo.git.push({raise: true, timeout: true}, :origin, ":#{merge_request.source_branch}")
end
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index e09797acddc..8016c67ced0 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -75,35 +75,19 @@ describe Project do
end
describe "Respond to" do
- it { should respond_to(:public?) }
- it { should respond_to(:private?) }
it { should respond_to(:url_to_repo) }
it { should respond_to(:path_to_repo) }
it { should respond_to(:valid_repo?) }
it { should respond_to(:repo_exists?) }
# Repository Role
- it { should respond_to(:tree) }
- it { should respond_to(:root_ref) }
- it { should respond_to(:repo) }
- it { should respond_to(:tags) }
- it { should respond_to(:commit) }
- it { should respond_to(:commits) }
- it { should respond_to(:commits_between) }
- it { should respond_to(:commits_with_refs) }
- it { should respond_to(:commits_since) }
- it { should respond_to(:commits_between) }
it { should respond_to(:satellite) }
it { should respond_to(:update_repository) }
it { should respond_to(:destroy_repository) }
it { should respond_to(:archive_repo) }
# Authority Role
- it { should respond_to(:add_access) }
it { should respond_to(:reset_access) }
- it { should respond_to(:repository_writers) }
- it { should respond_to(:repository_masters) }
- it { should respond_to(:repository_readers) }
it { should respond_to(:allow_read_for?) }
it { should respond_to(:guest_access_for?) }
it { should respond_to(:report_access_for?) }
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb
new file mode 100644
index 00000000000..160fed17ecc
--- /dev/null
+++ b/spec/models/repository_spec.rb
@@ -0,0 +1,14 @@
+describe Repository do
+ describe "Respond to" do
+ it { should respond_to(:repo) }
+ it { should respond_to(:tree) }
+ it { should respond_to(:root_ref) }
+ it { should respond_to(:tags) }
+ it { should respond_to(:commit) }
+ it { should respond_to(:commits) }
+ it { should respond_to(:commits_between) }
+ it { should respond_to(:commits_with_refs) }
+ it { should respond_to(:commits_since) }
+ it { should respond_to(:commits_between) }
+ end
+end
diff --git a/spec/models/system_hook_spec.rb b/spec/models/system_hook_spec.rb
index 7ae483a4003..cc358a2ed3b 100644
--- a/spec/models/system_hook_spec.rb
+++ b/spec/models/system_hook_spec.rb
@@ -56,7 +56,7 @@ describe SystemHook do
user = create(:user)
project = create(:project)
with_resque do
- project.add_access(user, :admin)
+ project.team << [user, :master]
end
WebMock.should have_requested(:post, @system_hook.url).with(body: /user_add_to_team/).once
end
@@ -64,7 +64,7 @@ describe SystemHook do
it "project_destroy hook" do
user = create(:user)
project = create(:project)
- project.add_access(user, :admin)
+ project.team << [user, :master]
with_resque do
project.users_projects.clear
end
diff --git a/spec/models/team_spec.rb b/spec/models/team_spec.rb
new file mode 100644
index 00000000000..1e3c7f07c0a
--- /dev/null
+++ b/spec/models/team_spec.rb
@@ -0,0 +1,12 @@
+describe Team do
+ describe "Respond to" do
+ it { should respond_to(:developers) }
+ it { should respond_to(:masters) }
+ it { should respond_to(:reporters) }
+ it { should respond_to(:guests) }
+ it { should respond_to(:repository_writers) }
+ it { should respond_to(:repository_masters) }
+ it { should respond_to(:repository_readers) }
+ end
+end
+
diff --git a/spec/models/users_project_spec.rb b/spec/models/users_project_spec.rb
index f85e21ff3f1..e8f5b647ce0 100644
--- a/spec/models/users_project_spec.rb
+++ b/spec/models/users_project_spec.rb
@@ -48,10 +48,10 @@ describe UsersProject do
@user_1 = create :user
@user_2 = create :user
- @project_1.add_access @user_1, :write
- @project_2.add_access @user_2, :read
+ @project_1.team << [ @user_1, :developer ]
+ @project_2.team << [ @user_2, :reporter ]
- @status = UsersProject.import_team(@project_1, @project_2)
+ @status = @project_2.team.import(@project_1)
end
it { @status.should be_true }
@@ -101,8 +101,8 @@ describe UsersProject do
@user_1 = create :user
@user_2 = create :user
- @project_1.add_access @user_1, :write
- @project_2.add_access @user_2, :read
+ @project_1.team << [ @user_1, :developer]
+ @project_2.team << [ @user_2, :reporter]
UsersProject.truncate_teams([@project_1.id, @project_2.id])
end
diff --git a/spec/requests/issues_spec.rb b/spec/requests/issues_spec.rb
index 0814108523b..2e94ffd0020 100644
--- a/spec/requests/issues_spec.rb
+++ b/spec/requests/issues_spec.rb
@@ -7,8 +7,7 @@ describe "Issues" do
login_as :user
user2 = create(:user)
- project.add_access(@user, :read, :write)
- project.add_access(user2, :read, :write)
+ project.team << [[@user, user2], :developer]
end
describe "Edit issue" do
diff --git a/spec/requests/projects_spec.rb b/spec/requests/projects_spec.rb
index ea87e35ed94..8f613b458c0 100644
--- a/spec/requests/projects_spec.rb
+++ b/spec/requests/projects_spec.rb
@@ -6,7 +6,7 @@ describe "Projects" do
describe "GET /projects/show" do
before do
@project = create(:project, namespace: @user.namespace)
- @project.add_access(@user, :read)
+ @project.team << [@user, :reporter]
visit project_path(@project)
end
@@ -19,7 +19,7 @@ describe "Projects" do
describe "GET /projects/:id/edit" do
before do
@project = create(:project)
- @project.add_access(@user, :admin, :read)
+ @project.team << [@user, :master]
visit edit_project_path(@project)
end
@@ -38,7 +38,7 @@ describe "Projects" do
describe "PUT /projects/:id" do
before do
@project = create(:project, namespace: @user.namespace)
- @project.add_access(@user, :admin, :read)
+ @project.team << [@user, :master]
visit edit_project_path(@project)
@@ -59,7 +59,7 @@ describe "Projects" do
describe "DELETE /projects/:id" do
before do
@project = create(:project, namespace: @user.namespace)
- @project.add_access(@user, :read, :admin)
+ @project.team << [@user, :master]
visit edit_project_path(@project)
end
diff --git a/spec/support/stubbed_repository.rb b/spec/support/stubbed_repository.rb
index ad88dd77a4f..0e5628d05ff 100644
--- a/spec/support/stubbed_repository.rb
+++ b/spec/support/stubbed_repository.rb
@@ -1,18 +1,6 @@
# Stubs out all Git repository access done by models so that specs can run
# against fake repositories without Grit complaining that they don't exist.
class Project
- def path_to_repo
- if new_record? || path == 'newproject'
- # There are a couple Project specs and features that expect the Project's
- # path to be in the returned path, so let's patronize them.
- Rails.root.join('tmp', 'repositories', path)
- else
- # For everything else, just give it the path to one of our real seeded
- # repos.
- Rails.root.join('tmp', 'repositories', 'gitlabhq')
- end
- end
-
def satellite
FakeSatellite.new
end
@@ -27,3 +15,9 @@ class Project
end
end
end
+
+class Repository
+ def repo
+ @repo ||= Grit::Repo.new(Rails.root.join('tmp', 'repositories', 'gitlabhq'))
+ end
+end