diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index cfa72b33a..2f1b53705 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -37,8 +37,8 @@ class RepositoriesController < ApplicationController accept_rss_auth :revisions # hidden repositories filter // 隐藏代码过滤器 before_filter :check_hidden_repo, :only => [:show, :stats, :revisions, :revision, :diff ] - helper :repositories include RepositoriesHelper + helper :repositories include GitlabHelper #@root_path = RepositoriesHelper::ROOT_PATH @@ -244,17 +244,24 @@ class RepositoriesController < ApplicationController private :pickup_extra_info def committers - @committers = @repository.committers - @users = @project.users - additional_user_ids = @committers.collect(&:last).collect(&:to_i) - @users.collect(&:id) - @users += User.find_all_by_id(additional_user_ids) unless additional_user_ids.empty? - @users.compact! - @users.sort! - if request.post? && params[:committers].is_a?(Hash) - # Build a hash with repository usernames as keys and corresponding user ids as values - @repository.committer_ids = params[:committers].values.inject({}) {|h, c| h[c.first] = c.last; h} - flash[:notice] = l(:notice_successful_update) - redirect_to settings_project_path(@project, :tab => 'repositories') + gitlab_project = GitlabProject.find_by_repository_url(@repository.url) + if gitlab_project + # gitlab项目 + + else + # 老模式 + @committers = @repository.committers + @users = @project.users + additional_user_ids = @committers.collect(&:last).collect(&:to_i) - @users.collect(&:id) + @users += User.find_all_by_id(additional_user_ids) unless additional_user_ids.empty? + @users.compact! + @users.sort! + if request.post? && params[:committers].is_a?(Hash) + # Build a hash with repository usernames as keys and corresponding user ids as values + @repository.committer_ids = params[:committers].values.inject({}) {|h, c| h[c.first] = c.last; h} + flash[:notice] = l(:notice_successful_update) + redirect_to settings_project_path(@project, :tab => 'repositories') + end end end diff --git a/app/helpers/gitlab_helper.rb b/app/helpers/gitlab_helper.rb index 48e55841e..31fa574df 100644 --- a/app/helpers/gitlab_helper.rb +++ b/app/helpers/gitlab_helper.rb @@ -200,6 +200,35 @@ module GitlabHelper end end + # 获取指定gitlab项目用户列表 + # project_id:gitlab项目编号 + # add by nwb + def get_project_users(project_id) + login_check + url = REPO_IP_ADDRESS + GITLAB_API + "/projects/" + project_id.to_s + "/members" + uri = URI.parse(url) + uri.query = URI.encode_www_form(params) + http = Net::HTTP.new uri.host, uri.port + #https协议额外解析 + if uri.scheme == 'https' + http.verify_mode = OpenSSL::SSL::VERIFY_NONE + http.use_ssl = true + end + begin + request = Net::HTTP::Get.new uri.request_uri + res = http.start { |http| http.request request } + if res.code == '200' + temp = ActiveSupport::JSON.decode(res.body) + return true + else + return false + end + rescue =>err + logger.error "gitlab: error: #{err.message}" + return nil + end + end + # 给用户添加一个可操作的项目 # 若用户已在该项目中,权限级别取新权限与现有权限的最大值 # project_id:项目在gitlab中的id user_id:用户在gitlab中的id diff --git a/app/models/repository.rb b/app/models/repository.rb index 6407d40eb..5ad85e186 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -142,7 +142,13 @@ class Repository < ActiveRecord::Base if gitlabproject.nil? # 兼容老git模式 ip = RepositoriesHelper::REPO_IP_ADDRESS + if ip.nil? + ip = Setting.repository_domain + end project_path_cut = RepositoriesHelper::PROJECT_PATH_CUT + if project_path_cut.nil? + project_path_cut = 40 + end "http://" + self.login.to_s + self.identifier.to_s + ip + self.url.slice(project_path_cut, self.url.length) else self.url