Continue refactoring. Use repostory and team
This commit is contained in:
parent
39ba934c0a
commit
dccd8b6eaa
42 changed files with 219 additions and 179 deletions
|
@ -9,7 +9,7 @@ module Notes
|
||||||
|
|
||||||
@notes = case target_type
|
@notes = case target_type
|
||||||
when "commit"
|
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"
|
when "issue"
|
||||||
project.issues.find(target_id).notes.inc_author.fresh.limit(20)
|
project.issues.find(target_id).notes.inc_author.fresh.limit(20)
|
||||||
when "merge_request"
|
when "merge_request"
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
class TestHookContext < BaseContext
|
class TestHookContext < BaseContext
|
||||||
def execute
|
def execute
|
||||||
hook = project.hooks.find(params[:id])
|
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)
|
data = project.post_receive_data(commits.last.id, commits.first.id, "refs/heads/#{project.default_branch}", current_user)
|
||||||
hook.execute(data)
|
hook.execute(data)
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,6 +10,7 @@ class Admin::ProjectsController < AdminController
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
|
@repository = @project.repository
|
||||||
@users = User.active
|
@users = User.active
|
||||||
@users = @users.not_in_project(@project) if @project.users.present?
|
@users = @users.not_in_project(@project) if @project.users.present?
|
||||||
@users = @users.all
|
@users = @users.all
|
||||||
|
@ -19,7 +20,7 @@ class Admin::ProjectsController < AdminController
|
||||||
end
|
end
|
||||||
|
|
||||||
def team_update
|
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.'
|
redirect_to [:admin, @project], notice: 'Project was successfully updated.'
|
||||||
end
|
end
|
||||||
|
@ -36,7 +37,7 @@ class Admin::ProjectsController < AdminController
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
# Delete team first in order to prevent multiple gitolite calls
|
# Delete team first in order to prevent multiple gitolite calls
|
||||||
@project.truncate_team
|
@project.team.truncate
|
||||||
|
|
||||||
@project.destroy
|
@project.destroy
|
||||||
|
|
||||||
|
|
|
@ -83,12 +83,12 @@ class MergeRequestsController < ProjectResourceController
|
||||||
end
|
end
|
||||||
|
|
||||||
def branch_from
|
def branch_from
|
||||||
@commit = project.commit(params[:ref])
|
@commit = @repository.commit(params[:ref])
|
||||||
@commit = CommitDecorator.decorate(@commit)
|
@commit = CommitDecorator.decorate(@commit)
|
||||||
end
|
end
|
||||||
|
|
||||||
def branch_to
|
def branch_to
|
||||||
@commit = project.commit(params[:ref])
|
@commit = @repository.commit(params[:ref])
|
||||||
@commit = CommitDecorator.decorate(@commit)
|
@commit = CommitDecorator.decorate(@commit)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ require Rails.root.join('lib', 'gitlab', 'graph', 'json_builder')
|
||||||
|
|
||||||
class ProjectsController < ProjectResourceController
|
class ProjectsController < ProjectResourceController
|
||||||
skip_before_filter :project, only: [:new, :create]
|
skip_before_filter :project, only: [:new, :create]
|
||||||
|
skip_before_filter :repository, only: [:new, :create]
|
||||||
|
|
||||||
# Authorize
|
# Authorize
|
||||||
before_filter :authorize_read_project!, except: [:index, :new, :create]
|
before_filter :authorize_read_project!, except: [:index, :new, :create]
|
||||||
|
@ -58,7 +59,7 @@ class ProjectsController < ProjectResourceController
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html do
|
format.html do
|
||||||
unless @project.empty_repo?
|
if @project.repository && !@project.repository.empty?
|
||||||
@last_push = current_user.recent_push(@project.id)
|
@last_push = current_user.recent_push(@project.id)
|
||||||
render :show
|
render :show
|
||||||
else
|
else
|
||||||
|
|
|
@ -26,7 +26,7 @@ class ServicesController < ProjectResourceController
|
||||||
end
|
end
|
||||||
|
|
||||||
def test
|
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)
|
data = project.post_receive_data(commits.last.id, commits.first.id, "refs/heads/#{project.default_branch}", current_user)
|
||||||
|
|
||||||
@service = project.gitlab_ci_service
|
@service = project.gitlab_ci_service
|
||||||
|
|
|
@ -16,10 +16,9 @@ class TeamMembersController < ProjectResourceController
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@project.add_users_ids_to_team(
|
users = User.where(id: params[:user_ids])
|
||||||
params[:user_ids],
|
|
||||||
params[:project_access]
|
@project.team << [users, params[:project_access]]
|
||||||
)
|
|
||||||
|
|
||||||
if params[:redirect_to]
|
if params[:redirect_to]
|
||||||
redirect_to params[:redirect_to]
|
redirect_to params[:redirect_to]
|
||||||
|
@ -50,7 +49,7 @@ class TeamMembersController < ProjectResourceController
|
||||||
|
|
||||||
def apply_import
|
def apply_import
|
||||||
giver = Project.find(params[:source_project_id])
|
giver = Project.find(params[:source_project_id])
|
||||||
status = UsersProject.import_team(giver, project)
|
status = @project.team.import(giver)
|
||||||
notice = status ? "Succesfully imported" : "Import failed"
|
notice = status ? "Succesfully imported" : "Import failed"
|
||||||
|
|
||||||
redirect_to project_team_members_path(project), notice: notice
|
redirect_to project_team_members_path(project), notice: notice
|
||||||
|
|
|
@ -53,7 +53,7 @@ module ApplicationHelper
|
||||||
|
|
||||||
def last_commit(project)
|
def last_commit(project)
|
||||||
if project.repo_exists?
|
if project.repo_exists?
|
||||||
time_ago_in_words(project.commit.committed_date) + " ago"
|
time_ago_in_words(project.repository.commit.committed_date) + " ago"
|
||||||
else
|
else
|
||||||
"Never"
|
"Never"
|
||||||
end
|
end
|
||||||
|
@ -102,7 +102,7 @@ module ApplicationHelper
|
||||||
]
|
]
|
||||||
|
|
||||||
project_nav = []
|
project_nav = []
|
||||||
if @project && !@project.new_record?
|
if @project && @project.repository && @project.repository.root_ref
|
||||||
project_nav = [
|
project_nav = [
|
||||||
{ label: "#{@project.name} Issues", url: project_issues_path(@project) },
|
{ label: "#{@project.name} Issues", url: project_issues_path(@project) },
|
||||||
{ label: "#{@project.name} Commits", url: project_commits_path(@project, @ref || @project.repository.root_ref) },
|
{ 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.last_push_to_non_root? &&
|
||||||
!event.rm_ref? &&
|
!event.rm_ref? &&
|
||||||
event.project &&
|
event.project &&
|
||||||
|
event.project.repository &&
|
||||||
event.project.merge_requests_enabled
|
event.project.merge_requests_enabled
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ module MergeRequestsHelper
|
||||||
event.project,
|
event.project,
|
||||||
merge_request: {
|
merge_request: {
|
||||||
source_branch: event.branch_name,
|
source_branch: event.branch_name,
|
||||||
target_branch: event.project.root_ref,
|
target_branch: event.project.repository.root_ref,
|
||||||
title: event.branch_name.titleize
|
title: event.branch_name.titleize
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
@ -204,7 +204,7 @@ class Event < ActiveRecord::Base
|
||||||
|
|
||||||
# Max 20 commits from push DESC
|
# Max 20 commits from push DESC
|
||||||
def commits
|
def commits
|
||||||
@commits ||= data[:commits].map { |commit| project.commit(commit[:id]) }.reverse
|
@commits ||= data[:commits].map { |commit| repository.commit(commit[:id]) }.reverse
|
||||||
end
|
end
|
||||||
|
|
||||||
def commits_count
|
def commits_count
|
||||||
|
@ -225,14 +225,18 @@ class Event < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def repository
|
||||||
|
project.repository
|
||||||
|
end
|
||||||
|
|
||||||
def parent_commit
|
def parent_commit
|
||||||
project.commit(commit_from)
|
repository.commit(commit_from)
|
||||||
rescue => ex
|
rescue => ex
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
def last_commit
|
def last_commit
|
||||||
project.commit(commit_to)
|
repository.commit(commit_to)
|
||||||
rescue => ex
|
rescue => ex
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
|
@ -71,7 +71,7 @@ class Note < ActiveRecord::Base
|
||||||
# override to return commits, which are not active record
|
# override to return commits, which are not active record
|
||||||
def noteable
|
def noteable
|
||||||
if for_commit?
|
if for_commit?
|
||||||
project.commit(commit_id)
|
project.repository.commit(commit_id)
|
||||||
else
|
else
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
|
|
|
@ -166,7 +166,13 @@ class Project < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def repository
|
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
|
end
|
||||||
|
|
||||||
def git_error?
|
def git_error?
|
||||||
|
@ -279,39 +285,6 @@ class Project < ActiveRecord::Base
|
||||||
users_projects.find_by_user_id(user_id)
|
users_projects.find_by_user_id(user_id)
|
||||||
end
|
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)
|
def transfer(new_namespace)
|
||||||
Project.transaction do
|
Project.transaction do
|
||||||
old_namespace = namespace
|
old_namespace = namespace
|
||||||
|
@ -441,7 +414,7 @@ class Project < ActiveRecord::Base
|
||||||
#
|
#
|
||||||
def post_receive_data(oldrev, newrev, ref, user)
|
def post_receive_data(oldrev, newrev, ref, user)
|
||||||
|
|
||||||
push_commits = commits_between(oldrev, newrev)
|
push_commits = repository.commits_between(oldrev, newrev)
|
||||||
|
|
||||||
# Total commits count
|
# Total commits count
|
||||||
push_commits_count = push_commits.size
|
push_commits_count = push_commits.size
|
||||||
|
@ -488,7 +461,7 @@ class Project < ActiveRecord::Base
|
||||||
def update_merge_requests(oldrev, newrev, ref, user)
|
def update_merge_requests(oldrev, newrev, ref, user)
|
||||||
return true unless ref =~ /heads/
|
return true unless ref =~ /heads/
|
||||||
branch_name = ref.gsub("refs/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
|
# Update code for merge requests
|
||||||
mrs = self.merge_requests.opened.find_all_by_branch(branch_name).all
|
mrs = self.merge_requests.opened.find_all_by_branch(branch_name).all
|
||||||
|
@ -510,7 +483,7 @@ class Project < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def empty_repo?
|
def empty_repo?
|
||||||
!repository || repository.empty_repo?
|
!repository || repository.empty?
|
||||||
end
|
end
|
||||||
|
|
||||||
def satellite
|
def satellite
|
||||||
|
|
|
@ -26,6 +26,6 @@ class ProtectedBranch < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def commit
|
def commit
|
||||||
project.commit(self.name)
|
project.repository.commit(self.name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -13,9 +13,11 @@ class Repository
|
||||||
attr_accessor :root_ref
|
attr_accessor :root_ref
|
||||||
|
|
||||||
def initialize(path_with_namespace, root_ref = 'master')
|
def initialize(path_with_namespace, root_ref = 'master')
|
||||||
@root_ref = root_ref
|
@root_ref = root_ref || "master"
|
||||||
@path_with_namespace = path_with_namespace
|
@path_with_namespace = path_with_namespace
|
||||||
@repo = Grit::Repo.new(path_to_repo)
|
|
||||||
|
# Init grit repo object
|
||||||
|
repo
|
||||||
end
|
end
|
||||||
|
|
||||||
def raw
|
def raw
|
||||||
|
@ -26,6 +28,10 @@ class Repository
|
||||||
@path_to_repo ||= File.join(Gitlab.config.gitolite.repos_path, "#{path_with_namespace}.git")
|
@path_to_repo ||= File.join(Gitlab.config.gitolite.repos_path, "#{path_with_namespace}.git")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def repo
|
||||||
|
@repo ||= Grit::Repo.new(path_to_repo)
|
||||||
|
end
|
||||||
|
|
||||||
def commit(commit_id = nil)
|
def commit(commit_id = nil)
|
||||||
Commit.find_or_first(repo, commit_id, root_ref)
|
Commit.find_or_first(repo, commit_id, root_ref)
|
||||||
end
|
end
|
||||||
|
@ -114,7 +120,7 @@ class Repository
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
def empty_repo?
|
def empty?
|
||||||
!has_commits?
|
!has_commits?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,22 @@ class Team
|
||||||
|
|
||||||
def initialize(project)
|
def initialize(project)
|
||||||
@project = 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
|
end
|
||||||
|
|
||||||
def add_user(user, access)
|
def add_user(user, access)
|
||||||
|
@ -14,7 +29,7 @@ class Team
|
||||||
add_users_ids(users.map(&:id), access)
|
add_users_ids(users.map(&:id), access)
|
||||||
end
|
end
|
||||||
|
|
||||||
def add_users_ids(users_ids, access)
|
def add_users_ids(user_ids, access)
|
||||||
UsersProject.add_users_into_projects(
|
UsersProject.add_users_into_projects(
|
||||||
[project.id],
|
[project.id],
|
||||||
user_ids,
|
user_ids,
|
||||||
|
@ -46,4 +61,58 @@ class Team
|
||||||
def masters
|
def masters
|
||||||
members.masters.map(&:user)
|
members.masters.map(&:user)
|
||||||
end
|
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
|
end
|
||||||
|
|
|
@ -188,7 +188,7 @@ class User < ActiveRecord::Base
|
||||||
|
|
||||||
# Team membership in personal projects
|
# Team membership in personal projects
|
||||||
def tm_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
|
end
|
||||||
|
|
||||||
# Returns a string for use as a Gitolite user identifier
|
# Returns a string for use as a Gitolite user identifier
|
||||||
|
|
|
@ -48,10 +48,23 @@ class UsersProject < ActiveRecord::Base
|
||||||
# access can be an integer representing a access code
|
# access can be an integer representing a access code
|
||||||
# or symbol like :master representing role
|
# 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)
|
def add_users_into_projects(project_ids, user_ids, access)
|
||||||
project_access = if @roles.has_key?(access)
|
project_access = if roles_hash.has_key?(access)
|
||||||
@roles[access]
|
roles_hash[access]
|
||||||
elsif @roles.values.include?(access)
|
elsif roles_hash.values.include?(access.to_i)
|
||||||
access
|
access
|
||||||
else
|
else
|
||||||
raise "Non valid access"
|
raise "Non valid access"
|
||||||
|
@ -93,36 +106,6 @@ class UsersProject < ActiveRecord::Base
|
||||||
truncate_teams [project.id]
|
truncate_teams [project.id]
|
||||||
end
|
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)
|
def bulk_delete(project, user_ids)
|
||||||
UsersProject.transaction do
|
UsersProject.transaction do
|
||||||
UsersProject.where(user_id: user_ids, project_id: project.id).each do |users_project|
|
UsersProject.where(user_id: user_ids, project_id: project.id).each do |users_project|
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
- if project.repo_exists?
|
- if project.repo_exists?
|
||||||
.clearfix
|
.clearfix
|
||||||
= f.label :default_branch, "Default Branch"
|
= 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
|
%fieldset.adv_settings
|
||||||
%legend Features:
|
%legend Features:
|
||||||
|
|
|
@ -4,15 +4,15 @@
|
||||||
%i.icon-edit
|
%i.icon-edit
|
||||||
Edit
|
Edit
|
||||||
|
|
||||||
- if @project.has_commits?
|
- if @repository.has_commits?
|
||||||
- if !@project.has_post_receive_file?
|
- if !@repository.has_post_receive_file?
|
||||||
%br
|
%br
|
||||||
.alert.alert-error
|
.alert.alert-error
|
||||||
%span
|
%span
|
||||||
%strong Project has commits but missing post-receive file.
|
%strong Project has commits but missing post-receive file.
|
||||||
%br
|
%br
|
||||||
If you exported project manually - make a link of post-receive hook file from gitolite to project repository
|
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
|
%br
|
||||||
.alert.alert-error
|
.alert.alert-error
|
||||||
%span
|
%span
|
||||||
|
@ -76,7 +76,7 @@
|
||||||
%b
|
%b
|
||||||
FS Path:
|
FS Path:
|
||||||
%td
|
%td
|
||||||
%code= @project.path_to_repo
|
%code= @repository.path_to_repo
|
||||||
%tr
|
%tr
|
||||||
%td
|
%td
|
||||||
%b
|
%b
|
||||||
|
@ -100,7 +100,7 @@
|
||||||
%b
|
%b
|
||||||
Post Receive File:
|
Post Receive File:
|
||||||
%td
|
%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
|
%br
|
||||||
%h5
|
%h5
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
.mr_branch_box
|
.mr_branch_box
|
||||||
%h5 From (Head Branch)
|
%h5 From (Head Branch)
|
||||||
.body
|
.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
|
.mr_source_commit
|
||||||
|
|
||||||
.span2
|
.span2
|
||||||
|
@ -22,7 +22,7 @@
|
||||||
.mr_branch_box
|
.mr_branch_box
|
||||||
%h5 To (Base Branch)
|
%h5 To (Base Branch)
|
||||||
.body
|
.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
|
.mr_target_commit
|
||||||
|
|
||||||
%h4.cdark 2. Fill info
|
%h4.cdark 2. Fill info
|
||||||
|
|
|
@ -15,13 +15,13 @@
|
||||||
= f.label :path do
|
= f.label :path do
|
||||||
Repository
|
Repository
|
||||||
.controls
|
.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
|
.clearfix
|
||||||
= f.label :default_branch, "Default Branch"
|
= 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
|
%fieldset.features
|
||||||
%legend Features:
|
%legend Features:
|
||||||
|
|
|
@ -11,7 +11,7 @@ class PostReceive
|
||||||
|
|
||||||
# Ignore push from non-gitlab users
|
# Ignore push from non-gitlab users
|
||||||
user = if identifier.eql? Gitlab.config.gitolite.admin_key
|
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
|
User.find_by_email(email) if email
|
||||||
elsif /^[A-Z0-9._%a-z\-]+@(?:[A-Z0-9a-z\-]+\.)+[A-Za-z]{2,4}$/.match(identifier)
|
elsif /^[A-Z0-9._%a-z\-]+@(?:[A-Z0-9a-z\-]+\.)+[A-Za-z]{2,4}$/.match(identifier)
|
||||||
User.find_by_email(identifier)
|
User.find_by_email(identifier)
|
||||||
|
|
|
@ -16,7 +16,7 @@ class AdminGroups < Spinach::FeatureSteps
|
||||||
@project = create(:project, group: @group)
|
@project = create(:project, group: @group)
|
||||||
@event = create(:closed_issue_event, project: @project)
|
@event = create(:closed_issue_event, project: @project)
|
||||||
|
|
||||||
@project.add_access current_user, :admin
|
@project.team << [current_user, :master]
|
||||||
end
|
end
|
||||||
|
|
||||||
And 'Create gitlab user "John"' do
|
And 'Create gitlab user "John"' do
|
||||||
|
|
|
@ -61,7 +61,7 @@ class Dashboard < Spinach::FeatureSteps
|
||||||
|
|
||||||
And 'I own project "Shop"' do
|
And 'I own project "Shop"' do
|
||||||
@project = create :project, name: 'Shop'
|
@project = create :project, name: 'Shop'
|
||||||
@project.add_access(@user, :admin)
|
@project.team << [@user, :master]
|
||||||
end
|
end
|
||||||
|
|
||||||
And 'I have group with projects' do
|
And 'I have group with projects' do
|
||||||
|
@ -69,7 +69,7 @@ class Dashboard < Spinach::FeatureSteps
|
||||||
@project = create(:project, group: @group)
|
@project = create(:project, group: @group)
|
||||||
@event = create(:closed_issue_event, project: @project)
|
@event = create(:closed_issue_event, project: @project)
|
||||||
|
|
||||||
@project.add_access current_user, :admin
|
@project.team << [current_user, :master]
|
||||||
end
|
end
|
||||||
|
|
||||||
And 'project "Shop" has push event' do
|
And 'project "Shop" has push event' do
|
||||||
|
|
|
@ -13,7 +13,7 @@ class DashboardIssues < Spinach::FeatureSteps
|
||||||
|
|
||||||
And 'I have assigned issues' do
|
And 'I have assigned issues' do
|
||||||
project = create :project
|
project = create :project
|
||||||
project.add_access(@user, :read, :write)
|
project.team << [@user, :master]
|
||||||
|
|
||||||
2.times { create :issue, author: @user, assignee: @user, project: project }
|
2.times { create :issue, author: @user, assignee: @user, project: project }
|
||||||
end
|
end
|
||||||
|
|
|
@ -14,8 +14,8 @@ class DashboardMergeRequests < Spinach::FeatureSteps
|
||||||
project1 = create :project
|
project1 = create :project
|
||||||
project2 = create :project
|
project2 = create :project
|
||||||
|
|
||||||
project1.add_access(@user, :read, :write)
|
project1.team << [@user, :master]
|
||||||
project2.add_access(@user, :read, :write)
|
project2.team << [@user, :master]
|
||||||
|
|
||||||
merge_request1 = create :merge_request, author: @user, project: project1
|
merge_request1 = create :merge_request, author: @user, project: project1
|
||||||
merge_request2 = create :merge_request, author: @user, project: project2
|
merge_request2 = create :merge_request, author: @user, project: project2
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
class DashboardSearch < Spinach::FeatureSteps
|
class DashboardSearch < Spinach::FeatureSteps
|
||||||
include SharedAuthentication
|
include SharedAuthentication
|
||||||
include SharedPaths
|
include SharedPaths
|
||||||
|
include SharedProject
|
||||||
|
|
||||||
Given 'I search for "Sho"' do
|
Given 'I search for "Sho"' do
|
||||||
fill_in "dashboard_search", with: "Sho"
|
fill_in "dashboard_search", with: "Sho"
|
||||||
|
@ -11,11 +12,6 @@ class DashboardSearch < Spinach::FeatureSteps
|
||||||
page.should have_link "Shop"
|
page.should have_link "Shop"
|
||||||
end
|
end
|
||||||
|
|
||||||
And 'I own project "Shop"' do
|
|
||||||
@project = create(:project, :name => "Shop")
|
|
||||||
@project.add_access(@user, :admin)
|
|
||||||
end
|
|
||||||
|
|
||||||
Given 'I search for "Contibuting"' do
|
Given 'I search for "Contibuting"' do
|
||||||
fill_in "dashboard_search", with: "Contibuting"
|
fill_in "dashboard_search", with: "Contibuting"
|
||||||
click_button "Search"
|
click_button "Search"
|
||||||
|
|
|
@ -13,7 +13,7 @@ class Groups < Spinach::FeatureSteps
|
||||||
@project = create(:project, group: @group)
|
@project = create(:project, group: @group)
|
||||||
@event = create(:closed_issue_event, project: @project)
|
@event = create(:closed_issue_event, project: @project)
|
||||||
|
|
||||||
@project.add_access current_user, :admin
|
@project.team << [current_user, :master]
|
||||||
end
|
end
|
||||||
|
|
||||||
And 'I should see projects activity feed' do
|
And 'I should see projects activity feed' do
|
||||||
|
|
|
@ -84,18 +84,18 @@ class ProjectTeamManagement < Spinach::FeatureSteps
|
||||||
And '"Sam" is "Shop" developer' do
|
And '"Sam" is "Shop" developer' do
|
||||||
user = User.find_by_name("Sam")
|
user = User.find_by_name("Sam")
|
||||||
project = Project.find_by_name("Shop")
|
project = Project.find_by_name("Shop")
|
||||||
project.add_access(user, :write)
|
project.team << [user, :developer]
|
||||||
end
|
end
|
||||||
|
|
||||||
Given 'I own project "Website"' do
|
Given 'I own project "Website"' do
|
||||||
@project = create(:project, :name => "Website")
|
@project = create(:project, :name => "Website")
|
||||||
@project.add_access(@user, :admin)
|
@project.team << [@user, :master]
|
||||||
end
|
end
|
||||||
|
|
||||||
And '"Mike" is "Website" reporter' do
|
And '"Mike" is "Website" reporter' do
|
||||||
user = User.find_by_name("Mike")
|
user = User.find_by_name("Mike")
|
||||||
project = Project.find_by_name("Website")
|
project = Project.find_by_name("Website")
|
||||||
project.add_access(user, :read)
|
project.team << [user, :reporter]
|
||||||
end
|
end
|
||||||
|
|
||||||
And 'I click link "Import team from another project"' do
|
And 'I click link "Import team from another project"' do
|
||||||
|
|
|
@ -114,15 +114,15 @@ module SharedPaths
|
||||||
end
|
end
|
||||||
|
|
||||||
Given "I visit my project's files page" do
|
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
|
end
|
||||||
|
|
||||||
Given "I visit my project's commits page" do
|
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
|
end
|
||||||
|
|
||||||
Given "I visit my project's commits page for a specific path" do
|
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
|
end
|
||||||
|
|
||||||
Given 'I visit my project\'s commits stats page' do
|
Given 'I visit my project\'s commits stats page' do
|
||||||
|
@ -174,7 +174,7 @@ module SharedPaths
|
||||||
end
|
end
|
||||||
|
|
||||||
Given 'I visit project commits page' do
|
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
|
end
|
||||||
|
|
||||||
Given 'I visit project commits page for stable branch' do
|
Given 'I visit project commits page for stable branch' do
|
||||||
|
@ -182,7 +182,7 @@ module SharedPaths
|
||||||
end
|
end
|
||||||
|
|
||||||
Given 'I visit project source page' do
|
Given 'I visit project source page' do
|
||||||
visit project_tree_path(@project, @project.root_ref)
|
visit project_tree_path(@project, root_ref)
|
||||||
end
|
end
|
||||||
|
|
||||||
Given 'I visit blob file from repo' do
|
Given 'I visit blob file from repo' do
|
||||||
|
@ -240,4 +240,8 @@ module SharedPaths
|
||||||
Given 'I visit project wiki page' do
|
Given 'I visit project wiki page' do
|
||||||
visit project_wiki_path(@project, :index)
|
visit project_wiki_path(@project, :index)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def root_ref
|
||||||
|
@project.repository.root_ref
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,13 +4,13 @@ module SharedProject
|
||||||
# Create a project without caring about what it's called
|
# Create a project without caring about what it's called
|
||||||
And "I own a project" do
|
And "I own a project" do
|
||||||
@project = create(:project)
|
@project = create(:project)
|
||||||
@project.add_access(@user, :admin)
|
@project.team << [@user, :master]
|
||||||
end
|
end
|
||||||
|
|
||||||
# Create a specific project called "Shop"
|
# Create a specific project called "Shop"
|
||||||
And 'I own project "Shop"' do
|
And 'I own project "Shop"' do
|
||||||
@project = create(:project, :name => "Shop")
|
@project = create(:project, name: "Shop")
|
||||||
@project.add_access(@user, :admin)
|
@project.team << [@user, :master]
|
||||||
end
|
end
|
||||||
|
|
||||||
def current_project
|
def current_project
|
||||||
|
|
|
@ -82,7 +82,7 @@ module Gitlab
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy_project(project)
|
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)
|
conf.rm_repo(project.path_with_namespace)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -138,9 +138,9 @@ module Gitlab
|
||||||
::Gitolite::Config::Repo.new(repo_name)
|
::Gitolite::Config::Repo.new(repo_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
name_readers = project.repository_readers
|
name_readers = project.team.repository_readers
|
||||||
name_writers = project.repository_writers
|
name_writers = project.team.repository_writers
|
||||||
name_masters = project.repository_masters
|
name_masters = project.team.repository_masters
|
||||||
|
|
||||||
pr_br = project.protected_branches.map(&:name).join("$ ")
|
pr_br = project.protected_branches.map(&:name).join("$ ")
|
||||||
|
|
||||||
|
|
|
@ -170,7 +170,7 @@ module Gitlab
|
||||||
end
|
end
|
||||||
|
|
||||||
def reference_commit(identifier)
|
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]}"))
|
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
|
||||||
end
|
end
|
||||||
|
|
|
@ -31,7 +31,7 @@ module Gitlab
|
||||||
merge_repo.git.push({raise: true, timeout: true}, :origin, merge_request.target_branch)
|
merge_repo.git.push({raise: true, timeout: true}, :origin, merge_request.target_branch)
|
||||||
|
|
||||||
# remove source 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
|
# will raise CommandFailed when push fails
|
||||||
merge_repo.git.push({raise: true, timeout: true}, :origin, ":#{merge_request.source_branch}")
|
merge_repo.git.push({raise: true, timeout: true}, :origin, ":#{merge_request.source_branch}")
|
||||||
end
|
end
|
||||||
|
|
|
@ -75,35 +75,19 @@ describe Project do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "Respond to" do
|
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(:url_to_repo) }
|
||||||
it { should respond_to(:path_to_repo) }
|
it { should respond_to(:path_to_repo) }
|
||||||
it { should respond_to(:valid_repo?) }
|
it { should respond_to(:valid_repo?) }
|
||||||
it { should respond_to(:repo_exists?) }
|
it { should respond_to(:repo_exists?) }
|
||||||
|
|
||||||
# Repository Role
|
# 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(:satellite) }
|
||||||
it { should respond_to(:update_repository) }
|
it { should respond_to(:update_repository) }
|
||||||
it { should respond_to(:destroy_repository) }
|
it { should respond_to(:destroy_repository) }
|
||||||
it { should respond_to(:archive_repo) }
|
it { should respond_to(:archive_repo) }
|
||||||
|
|
||||||
# Authority Role
|
# Authority Role
|
||||||
it { should respond_to(:add_access) }
|
|
||||||
it { should respond_to(:reset_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(:allow_read_for?) }
|
||||||
it { should respond_to(:guest_access_for?) }
|
it { should respond_to(:guest_access_for?) }
|
||||||
it { should respond_to(:report_access_for?) }
|
it { should respond_to(:report_access_for?) }
|
||||||
|
|
14
spec/models/repository_spec.rb
Normal file
14
spec/models/repository_spec.rb
Normal file
|
@ -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
|
|
@ -56,7 +56,7 @@ describe SystemHook do
|
||||||
user = create(:user)
|
user = create(:user)
|
||||||
project = create(:project)
|
project = create(:project)
|
||||||
with_resque do
|
with_resque do
|
||||||
project.add_access(user, :admin)
|
project.team << [user, :master]
|
||||||
end
|
end
|
||||||
WebMock.should have_requested(:post, @system_hook.url).with(body: /user_add_to_team/).once
|
WebMock.should have_requested(:post, @system_hook.url).with(body: /user_add_to_team/).once
|
||||||
end
|
end
|
||||||
|
@ -64,7 +64,7 @@ describe SystemHook do
|
||||||
it "project_destroy hook" do
|
it "project_destroy hook" do
|
||||||
user = create(:user)
|
user = create(:user)
|
||||||
project = create(:project)
|
project = create(:project)
|
||||||
project.add_access(user, :admin)
|
project.team << [user, :master]
|
||||||
with_resque do
|
with_resque do
|
||||||
project.users_projects.clear
|
project.users_projects.clear
|
||||||
end
|
end
|
||||||
|
|
12
spec/models/team_spec.rb
Normal file
12
spec/models/team_spec.rb
Normal file
|
@ -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
|
||||||
|
|
|
@ -48,10 +48,10 @@ describe UsersProject do
|
||||||
@user_1 = create :user
|
@user_1 = create :user
|
||||||
@user_2 = create :user
|
@user_2 = create :user
|
||||||
|
|
||||||
@project_1.add_access @user_1, :write
|
@project_1.team << [ @user_1, :developer ]
|
||||||
@project_2.add_access @user_2, :read
|
@project_2.team << [ @user_2, :reporter ]
|
||||||
|
|
||||||
@status = UsersProject.import_team(@project_1, @project_2)
|
@status = @project_2.team.import(@project_1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it { @status.should be_true }
|
it { @status.should be_true }
|
||||||
|
@ -101,8 +101,8 @@ describe UsersProject do
|
||||||
@user_1 = create :user
|
@user_1 = create :user
|
||||||
@user_2 = create :user
|
@user_2 = create :user
|
||||||
|
|
||||||
@project_1.add_access @user_1, :write
|
@project_1.team << [ @user_1, :developer]
|
||||||
@project_2.add_access @user_2, :read
|
@project_2.team << [ @user_2, :reporter]
|
||||||
|
|
||||||
UsersProject.truncate_teams([@project_1.id, @project_2.id])
|
UsersProject.truncate_teams([@project_1.id, @project_2.id])
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,8 +7,7 @@ describe "Issues" do
|
||||||
login_as :user
|
login_as :user
|
||||||
user2 = create(:user)
|
user2 = create(:user)
|
||||||
|
|
||||||
project.add_access(@user, :read, :write)
|
project.team << [[@user, user2], :developer]
|
||||||
project.add_access(user2, :read, :write)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "Edit issue" do
|
describe "Edit issue" do
|
||||||
|
|
|
@ -6,7 +6,7 @@ describe "Projects" do
|
||||||
describe "GET /projects/show" do
|
describe "GET /projects/show" do
|
||||||
before do
|
before do
|
||||||
@project = create(:project, namespace: @user.namespace)
|
@project = create(:project, namespace: @user.namespace)
|
||||||
@project.add_access(@user, :read)
|
@project.team << [@user, :reporter]
|
||||||
|
|
||||||
visit project_path(@project)
|
visit project_path(@project)
|
||||||
end
|
end
|
||||||
|
@ -19,7 +19,7 @@ describe "Projects" do
|
||||||
describe "GET /projects/:id/edit" do
|
describe "GET /projects/:id/edit" do
|
||||||
before do
|
before do
|
||||||
@project = create(:project)
|
@project = create(:project)
|
||||||
@project.add_access(@user, :admin, :read)
|
@project.team << [@user, :master]
|
||||||
|
|
||||||
visit edit_project_path(@project)
|
visit edit_project_path(@project)
|
||||||
end
|
end
|
||||||
|
@ -38,7 +38,7 @@ describe "Projects" do
|
||||||
describe "PUT /projects/:id" do
|
describe "PUT /projects/:id" do
|
||||||
before do
|
before do
|
||||||
@project = create(:project, namespace: @user.namespace)
|
@project = create(:project, namespace: @user.namespace)
|
||||||
@project.add_access(@user, :admin, :read)
|
@project.team << [@user, :master]
|
||||||
|
|
||||||
visit edit_project_path(@project)
|
visit edit_project_path(@project)
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ describe "Projects" do
|
||||||
describe "DELETE /projects/:id" do
|
describe "DELETE /projects/:id" do
|
||||||
before do
|
before do
|
||||||
@project = create(:project, namespace: @user.namespace)
|
@project = create(:project, namespace: @user.namespace)
|
||||||
@project.add_access(@user, :read, :admin)
|
@project.team << [@user, :master]
|
||||||
visit edit_project_path(@project)
|
visit edit_project_path(@project)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,18 +1,6 @@
|
||||||
# Stubs out all Git repository access done by models so that specs can run
|
# 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.
|
# against fake repositories without Grit complaining that they don't exist.
|
||||||
class Project
|
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
|
def satellite
|
||||||
FakeSatellite.new
|
FakeSatellite.new
|
||||||
end
|
end
|
||||||
|
@ -27,3 +15,9 @@ class Project
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class Repository
|
||||||
|
def repo
|
||||||
|
@repo ||= Grit::Repo.new(Rails.root.join('tmp', 'repositories', 'gitlabhq'))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
Loading…
Reference in a new issue