|
|
@ -31,10 +31,10 @@ class RepositoriesController < ApplicationController
|
|
|
|
default_search_scope :changesets
|
|
|
|
default_search_scope :changesets
|
|
|
|
|
|
|
|
|
|
|
|
before_filter :find_project_by_project_id, :only => [:new, :create, :newrepo]
|
|
|
|
before_filter :find_project_by_project_id, :only => [:new, :create, :newrepo]
|
|
|
|
before_filter :find_repository, :only => [:edit, :update, :destroy, :committers]
|
|
|
|
before_filter :find_repository, :only => [:edit, :update, :destroy, :committers, :forked]
|
|
|
|
before_filter :find_project_repository, :except => [:new, :create, :newcreate, :edit, :update, :destroy, :committers, :newrepo,:to_gitlab]
|
|
|
|
before_filter :find_project_repository, :except => [:new, :create, :newcreate, :edit, :update, :destroy, :committers, :newrepo,:to_gitlab]
|
|
|
|
before_filter :find_changeset, :only => [:revision, :add_related_issue, :remove_related_issue]
|
|
|
|
before_filter :find_changeset, :only => [:revision, :add_related_issue, :remove_related_issue]
|
|
|
|
before_filter :authorize , :except => [:newrepo,:newcreate,:fork, :to_gitlab]
|
|
|
|
before_filter :authorize , :except => [:newrepo,:newcreate,:fork, :to_gitlab, :forked]
|
|
|
|
accept_rss_auth :revisions
|
|
|
|
accept_rss_auth :revisions
|
|
|
|
# hidden repositories filter // 隐藏代码过滤器
|
|
|
|
# hidden repositories filter // 隐藏代码过滤器
|
|
|
|
before_filter :check_hidden_repo, :only => [:show, :stats, :revisions, :revision, :diff ]
|
|
|
|
before_filter :check_hidden_repo, :only => [:show, :stats, :revisions, :revision, :diff ]
|
|
|
@ -63,6 +63,72 @@ class RepositoriesController < ApplicationController
|
|
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def forked
|
|
|
|
|
|
|
|
# REDO: 那些人有权限forked项目
|
|
|
|
|
|
|
|
# g = Gitlab.client
|
|
|
|
|
|
|
|
# gproject = g.post ("/projects/fork/#{@project.gpid}")
|
|
|
|
|
|
|
|
if gproject
|
|
|
|
|
|
|
|
copy_project(@project, gproject)
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
# render :layout => 'base_projects'
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# copy a project for fork
|
|
|
|
|
|
|
|
def copy_project(project, gproject)
|
|
|
|
|
|
|
|
project = Project.new
|
|
|
|
|
|
|
|
project.name = @project.name
|
|
|
|
|
|
|
|
project.is_public = @project.is_public
|
|
|
|
|
|
|
|
project.status = @project.status
|
|
|
|
|
|
|
|
project.hidden_repo = @project.hidden_repo
|
|
|
|
|
|
|
|
project.user_id = User.current.id
|
|
|
|
|
|
|
|
project.project_type = 0
|
|
|
|
|
|
|
|
project.project_new_type = @project.project_new_type
|
|
|
|
|
|
|
|
project.gpid = gproject.id
|
|
|
|
|
|
|
|
if project.save
|
|
|
|
|
|
|
|
r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first
|
|
|
|
|
|
|
|
m = Member.new(:user => User.current, :roles => [r])
|
|
|
|
|
|
|
|
project_info = ProjectInfo.new(:user_id => User.current.id, :project_id => project.id)
|
|
|
|
|
|
|
|
user_grades = UserGrade.create(:user_id => User.current.id, :project_id => project.id)
|
|
|
|
|
|
|
|
Rails.logger.debug "UserGrade created: #{user_grades.to_json}"
|
|
|
|
|
|
|
|
project_status = ProjectStatus.create(:project_id => @project.id, :watchers_count => 0, :changesets_count => 0, :project_type => @project.project_type,:grade => 0)
|
|
|
|
|
|
|
|
Rails.logger.debug "ProjectStatus created: #{project_status.to_json}"
|
|
|
|
|
|
|
|
project.members << m
|
|
|
|
|
|
|
|
project.project_infos << project_info
|
|
|
|
|
|
|
|
repository = Repository.create(:project_id => project.id, :url =>'ddd222', :type => 'Repository::Gitlab', :identifier => 'ddd222', :is_default => true)
|
|
|
|
|
|
|
|
copy_repository(project, gproject)
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
|
|
|
|
format.html {
|
|
|
|
|
|
|
|
flash[:notice] = l(:notice_successful_create)
|
|
|
|
|
|
|
|
if params[:continue]
|
|
|
|
|
|
|
|
attrs = {:parent_id => project.parent_id}.reject {|k,v| v.nil?}
|
|
|
|
|
|
|
|
redirect_to new_project_url(attrs, :course => '0')
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
redirect_to settings_project_url(project)
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
format.api { render :action => 'show', :status => :created, :location => url_for(:controller => 'projects', :action => 'show', :id => project.id) }
|
|
|
|
|
|
|
|
format.js
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
|
|
|
|
format.html { render :action => 'forked', :layout => 'base_projects'}
|
|
|
|
|
|
|
|
format.api { render_validation_errors(@project) }
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def copy_repository(project, gproject)
|
|
|
|
|
|
|
|
# 避免
|
|
|
|
|
|
|
|
if is_sigle_identifier?(project.owner, gproject.name)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
repository = Repository.factory('Git')
|
|
|
|
|
|
|
|
repository.project_id = project.id
|
|
|
|
|
|
|
|
repository.type = 'Repository::Gitlab'
|
|
|
|
|
|
|
|
repository.url = gproject.name
|
|
|
|
|
|
|
|
repository.identifier = gproject.name
|
|
|
|
|
|
|
|
repository = repository.save
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
def newrepo
|
|
|
|
def newrepo
|
|
|
|
scm = params[:repository_scm] || (Redmine::Scm::Base.all & Setting.enabled_scm).first
|
|
|
|
scm = params[:repository_scm] || (Redmine::Scm::Base.all & Setting.enabled_scm).first
|
|
|
|