Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/api/repositories.rb')
-rw-r--r--lib/api/repositories.rb75
1 files changed, 50 insertions, 25 deletions
diff --git a/lib/api/repositories.rb b/lib/api/repositories.rb
index 2dd0e40afba..fc976c23726 100644
--- a/lib/api/repositories.rb
+++ b/lib/api/repositories.rb
@@ -10,6 +10,32 @@ module API
helpers ::API::Helpers::HeadersHelpers
+ helpers do
+ params :release_params do
+ requires :version,
+ type: String,
+ regexp: Gitlab::Regex.unbounded_semver_regex,
+ desc: 'The version of the release, using the semantic versioning format'
+
+ optional :from,
+ type: String,
+ desc: 'The first commit in the range of commits to use for the changelog'
+
+ optional :to,
+ type: String,
+ desc: 'The last commit in the range of commits to use for the changelog'
+
+ optional :date,
+ type: DateTime,
+ desc: 'The date and time of the release'
+
+ optional :trailer,
+ type: String,
+ desc: 'The Git trailer to use for determining if commits are to be included in the changelog',
+ default: ::Repositories::ChangelogService::DEFAULT_TRAILER
+ end
+ end
+
before { authorize! :download_code, user_project }
feature_category :source_code_management
@@ -19,7 +45,7 @@ module API
end
resource :projects, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do
helpers do
- include ::Gitlab::RateLimitHelpers
+ include Gitlab::RepositoryArchiveRateLimiter
def handle_project_member_errors(errors)
if errors[:project_access].any?
@@ -124,8 +150,8 @@ module API
optional :path, type: String, desc: 'Subfolder of the repository to be downloaded'
end
get ':id/repository/archive', requirements: { format: Gitlab::PathRegex.archive_formats_regex } do
- if archive_rate_limit_reached?(current_user, user_project)
- render_api_error!({ error: ::Gitlab::RateLimitHelpers::ARCHIVE_RATE_LIMIT_REACHED_MESSAGE }, 429)
+ check_archive_rate_limit!(current_user, user_project) do
+ render_api_error!({ error: _('This archive has been requested too many times. Try again later.') }, 429)
end
not_acceptable! if Gitlab::HotlinkingDetector.intercept_hotlinking?(request)
@@ -208,36 +234,33 @@ module API
end
end
- desc 'Generates a changelog section for a release' do
- detail 'This feature was introduced in GitLab 13.9'
+ desc 'Generates a changelog section for a release and returns it' do
+ detail 'This feature was introduced in GitLab 14.6'
end
params do
- requires :version,
- type: String,
- regexp: Gitlab::Regex.unbounded_semver_regex,
- desc: 'The version of the release, using the semantic versioning format'
-
- optional :from,
- type: String,
- desc: 'The first commit in the range of commits to use for the changelog'
+ use :release_params
+ end
+ get ':id/repository/changelog' do
+ service = ::Repositories::ChangelogService.new(
+ user_project,
+ current_user,
+ **declared_params(include_missing: false)
+ )
+ changelog = service.execute(commit_to_changelog: false)
- optional :to,
- type: String,
- desc: 'The last commit in the range of commits to use for the changelog'
+ present changelog, with: Entities::Changelog
+ end
- optional :date,
- type: DateTime,
- desc: 'The date and time of the release'
+ desc 'Generates a changelog section for a release and commits it in a changelog file' do
+ detail 'This feature was introduced in GitLab 13.9'
+ end
+ params do
+ use :release_params
optional :branch,
type: String,
desc: 'The branch to commit the changelog changes to'
- optional :trailer,
- type: String,
- desc: 'The Git trailer to use for determining if commits are to be included in the changelog',
- default: ::Repositories::ChangelogService::DEFAULT_TRAILER
-
optional :file,
type: String,
desc: 'The file to commit the changelog changes to',
@@ -261,7 +284,7 @@ module API
**declared_params(include_missing: false)
)
- service.execute
+ service.execute(commit_to_changelog: true)
status(200)
rescue Gitlab::Changelog::Error => ex
render_api_error!("Failed to generate the changelog: #{ex.message}", 422)
@@ -269,3 +292,5 @@ module API
end
end
end
+
+API::Repositories.prepend_mod