Feature #23894 » 0001-Planio-Add-a-read-only-API-for-repositories.patch
| app/controllers/repositories_controller.rb | ||
|---|---|---|
| 30 | 30 | |
| 31 | 31 |
before_action :find_project_by_project_id, :only => [:new, :create] |
| 32 | 32 |
before_action :find_repository, :only => [:edit, :update, :destroy, :committers] |
| 33 |
before_action :find_project_repository, :except => [:new, :create, :edit, :update, :destroy, :committers] |
|
| 33 |
before_action :find_project_repository, :except => [:new, :create, :edit, :update, :destroy, :committers, :index]
|
|
| 34 | 34 |
before_action :find_changeset, :only => [:revision, :add_related_issue, :remove_related_issue] |
| 35 |
before_action :authorize |
|
| 35 |
before_action :authorize, :except => [:index] |
|
| 36 |
before_action :authorize_global, :only => [:index] |
|
| 37 | ||
| 36 | 38 |
accept_rss_auth :revisions |
| 39 |
accept_api_auth :index |
|
| 37 | 40 | |
| 38 | 41 |
rescue_from Redmine::Scm::Adapters::CommandFailed, :with => :show_error_command_failed |
| 39 | 42 | |
| 43 |
def index |
|
| 44 |
klass = Repository.repository_class(params[:scm]) || Repository |
|
| 45 |
scope = klass.visible |
|
| 46 | ||
| 47 |
@offset, @limit = api_offset_and_limit |
|
| 48 | ||
| 49 |
respond_to do |format| |
|
| 50 |
format.html { render_404 }
|
|
| 51 |
format.api do |
|
| 52 |
@repository_count = scope.count |
|
| 53 |
@repositories = scope.offset(@offset).limit(@limit).order("#{Project.table_name}.identifier", "#{Repository.table_name}.identifier")
|
|
| 54 |
end |
|
| 55 |
end |
|
| 56 |
end |
|
| 57 | ||
| 40 | 58 |
def new |
| 41 | 59 |
scm = params[:repository_scm] || (Redmine::Scm::Base.all & Setting.enabled_scm).first |
| 42 | 60 |
@repository = Repository.factory(scm) |
| app/models/repository.rb | ||
|---|---|---|
| 48 | 48 |
validate :validate_repository_path |
| 49 | 49 |
attr_protected :id |
| 50 | 50 | |
| 51 |
scope :visible, lambda {|*args|
|
|
| 52 |
joins(:project).where(Project.allowed_to_condition(args.shift || User.current, :browse_repository, *args)) |
|
| 53 |
} |
|
| 54 | ||
| 51 | 55 |
safe_attributes 'identifier', |
| 52 | 56 |
'login', |
| 53 | 57 |
'password', |
| app/views/repositories/index.api.rsb | ||
|---|---|---|
| 1 |
api.array :repositories, api_meta(:total_count => @repository_count, :offset => @offset, :limit => @limit) do |
|
| 2 |
@repositories.each do |repository| |
|
| 3 |
api.repository do |
|
| 4 |
api.id repository.id |
|
| 5 |
api.project id: repository.project_id, |
|
| 6 |
name: repository.project.name |
|
| 7 |
api.name repository.name |
|
| 8 |
api.identifier repository.identifier |
|
| 9 |
api.is_default repository.is_default |
|
| 10 |
api.scm repository.scm_name |
|
| 11 | ||
| 12 |
Redmine::Hook.call_hook :api_repositories_index, { repository: repository, api: api }
|
|
| 13 | ||
| 14 |
api.array :branches do |
|
| 15 |
Array(repository.branches).each do |branch| |
|
| 16 |
api.branch name: branch |
|
| 17 |
end |
|
| 18 |
end if include_in_api_response?('branches')
|
|
| 19 | ||
| 20 |
api.created_on repository.created_on |
|
| 21 |
end |
|
| 22 |
end |
|
| 23 |
end |
|
| config/routes.rb | ||
|---|---|---|
| 179 | 179 |
get 'wiki/:id/:version/diff', :to => 'wiki#diff' |
| 180 | 180 |
end |
| 181 | 181 | |
| 182 |
resources :repositories, :only => [:index] |
|
| 183 | ||
| 182 | 184 |
resources :issues do |
| 183 | 185 |
member do |
| 184 | 186 |
# Used when updating the form of an existing issue |
| lib/redmine.rb | ||
|---|---|---|
| 162 | 162 | |
| 163 | 163 |
map.project_module :repository do |map| |
| 164 | 164 |
map.permission :view_changesets, {:repositories => [:show, :revisions, :revision]}, :read => true
|
| 165 |
map.permission :browse_repository, {:repositories => [:show, :browse, :entry, :raw, :annotate, :changes, :diff, :stats, :graph]}, :read => true
|
|
| 165 |
map.permission :browse_repository, {:repositories => [:show, :browse, :entry, :raw, :annotate, :changes, :diff, :stats, :graph, :index]}, :read => true
|
|
| 166 | 166 |
map.permission :commit_access, {}
|
| 167 | 167 |
map.permission :manage_related_issues, {:repositories => [:add_related_issue, :remove_related_issue]}
|
| 168 | 168 |
map.permission :manage_repository, {:repositories => [:new, :create, :edit, :update, :committers, :destroy]}, :require => :member
|
- « Previous
- 1
- 2
- Next »