diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 91582d8e2..86dc549ec 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -98,6 +98,14 @@ class RepositoriesController < ApplicationController # add by nwb # 增加对gitlab版本库的支持 + attrs = pickup_extra_info + @repository = Repository.factory('Git') + @repository.safe_attributes = params[:repository] + if attrs[:attrs_extra].keys.any? + @repository.merge_extra_info(attrs[:attrs_extra]) + end + @repository.project = @project + # 数据检测 if params[:repository][:identifier] == "" flash[:error] = l(:project_module_repository) + l(:blank) @@ -117,15 +125,7 @@ class RepositoriesController < ApplicationController return end - attrs = pickup_extra_info - @repository = Repository.factory('Git') - @repository.safe_attributes = params[:repository] - if attrs[:attrs_extra].keys.any? - @repository.merge_extra_info(attrs[:attrs_extra]) - end - @repository.project = @project - - # 判断gitlab用户是否存在,不存在则创建 + # 判断gitlab用户是否存在,不存在则创建 user = User.current gitlab_user = GitlabUser.find_by_user_id(user.id) if gitlab_user.nil? @@ -135,10 +135,12 @@ class RepositoriesController < ApplicationController render :action => 'newrepo', :layout =>'base_projects' return end + gitlab_user = GitlabUser.find_by_user_id(user.id) end # 创建gitlab版本库 repos = params[:repository][:identifier] - if !create_project_for_user(repos,@project.id,gitlab_user.gitlab_user_id) + temp = create_project_for_user(repos,@project.id,gitlab_user.gitlab_user_id) + if !temp[:result] # 创建gitlab项目失败 flash[:error] = l(:error_create_gitlab_project) render :action => 'newrepo', :layout =>'base_projects' @@ -146,6 +148,9 @@ class RepositoriesController < ApplicationController end # 连接创建成功后的gitlab版本库 + gitproject = GitlabProject.find_by_gitlab_project_id(temp[:gitprojectid]) + @repository.url = gitproject.repository_url + @repository.root_url = gitproject.repository_url if request.post? && @repository.save redirect_to settings_project_path(@project, :tab => 'repositories') else @@ -261,15 +266,15 @@ class RepositoriesController < ApplicationController redirect_to settings_project_path(@project, :tab => 'repositories') if(@repository.type=="Repository::Git") logger.info "destory the repository value"+"root path"+@root_path+"repo_name"+@repo_name+ - "repository_name"+@repository_name+"user group"+@middle - system "sed -i /"+@repo_name+"/{d} "+@root_path+"user.passwd" - system "sed -i /"+@middle+"/{d} "+@root_path+"group.passwd" - system "rm -r "+@root_path+"htdocs/"+@repository_name - # if(@sed_user&&@sed_group&&@remove) - # else - # logger.info "An error occured when destory the repository"+"delete form passwd: \n"+ - # @sed_user+"delete from group"+@sed_group+"delete from file"+@remove - # end + "repository_name"+@repository_name+"user group"+@middle + #system "sed -i /"+@repo_name+"/{d} "+@root_path+"user.passwd" + #system "sed -i /"+@middle+"/{d} "+@root_path+"group.passwd" + #system "rm -r "+@root_path+"htdocs/"+@repository_name + + gitlabproject = GitlabProject.find_by_repository_url(@repository.url) + if gitlabproject + gitlabproject.destroy + end end end diff --git a/app/helpers/gitlab_helper.rb b/app/helpers/gitlab_helper.rb index a52ceea6b..48e55841e 100644 --- a/app/helpers/gitlab_helper.rb +++ b/app/helpers/gitlab_helper.rb @@ -39,7 +39,7 @@ module GitlabHelper def login_check if GitlabHelper.gitlab_token.nil? - login_gitlab(GitlabHelper.LOGIN_USER,GitlabHelper.LOGIN_PASSWORD) + login_gitlab(LOGIN_USER,LOGIN_PASSWORD) end end @@ -60,6 +60,7 @@ module GitlabHelper return false end rescue =>err + logger.error "gitlab: error: #{err.message}" return false end end @@ -94,6 +95,7 @@ module GitlabHelper return false end rescue =>err + logger.error "gitlab: error: #{err.message}" return false end end @@ -104,9 +106,10 @@ module GitlabHelper # add by nwb def create_project_for_user(project_name,project_id,user_id) login_check - url = REPO_IP_ADDRESS + GITLAB_API + "/projects/user/" + user_id + url = REPO_IP_ADDRESS + GITLAB_API + "/projects/user/" + user_id.to_s uri = URI.parse(url) data = {user_id:user_id, name:project_name,private_token:GitlabHelper.gitlab_token} + tempResult = Hash.new begin res = Net::HTTP.post_form(uri, data) if res.code == '201' @@ -119,19 +122,22 @@ module GitlabHelper web_url['http://localhost'] = REPO_IP_ADDRESS # 保存数据 - gitproject =GitlabProject.new + gitproject = GitlabProject.new gitproject.project_id = project_id gitproject.gitlab_project_id = temp['id'] gitproject.repository_url = repository_url gitproject.web_url = web_url gitproject.save - return true + tempResult[:result]= true + tempResult[:gitprojectid]=gitproject.gitlab_project_id else - return false + tempResult[:result]= false end rescue =>err - return false + logger.error "gitlab: error: #{err.message}" + tempResult[:result]= false end + tempResult end # 创建用户 @@ -161,6 +167,7 @@ module GitlabHelper return false end rescue =>err + logger.error "gitlab: error: #{err.message}" return false end end @@ -188,6 +195,7 @@ module GitlabHelper return false end rescue =>err + logger.error "gitlab: error: #{err.message}" return false end end @@ -215,6 +223,7 @@ module GitlabHelper return false end rescue =>err + logger.error "gitlab: error: #{err.message}" return false end end @@ -239,6 +248,7 @@ module GitlabHelper return false end rescue =>err + logger.error "gitlab: error: #{err.message}" return false end end @@ -262,6 +272,7 @@ module GitlabHelper response = http.start { |http| http.request(request) } return JSON.parse response.body rescue =>err + logger.error "gitlab: error: #{err.message}" return nil end end @@ -285,6 +296,7 @@ module GitlabHelper response = http.start { |http| http.request request } return JSON.parse response.body rescue =>err + logger.error "gitlab: error: #{err.message}" return nil end end diff --git a/app/models/repository.rb b/app/models/repository.rb index 57a818270..6407d40eb 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -135,6 +135,23 @@ class Repository < ActiveRecord::Base end end + # 获取版本库地址 + def repos_url + if self.scm_name=="Git" + gitlabproject = GitlabProject.find_by_repository_url(self.url) + if gitlabproject.nil? + # 兼容老git模式 + ip = RepositoriesHelper::REPO_IP_ADDRESS + project_path_cut = RepositoriesHelper::PROJECT_PATH_CUT + "http://" + self.login.to_s + self.identifier.to_s + ip + self.url.slice(project_path_cut, self.url.length) + else + self.url + end + else + self.url + end + end + def <=>(repository) if is_default? -1 diff --git a/app/views/projects/settings/_repositories.html.erb b/app/views/projects/settings/_repositories.html.erb index bb42e7a54..4daa8e3ab 100644 --- a/app/views/projects/settings/_repositories.html.erb +++ b/app/views/projects/settings/_repositories.html.erb @@ -20,11 +20,7 @@