0 for unlimited, disallow blank, feedback:

https://gitlab.com/gitlab-org/gitlab-ce/issues/27762#note_23520780
This commit is contained in:
Lin Jen-Shin 2017-02-16 23:40:13 +08:00
parent 37cc3aaefb
commit eede4ab1a2
8 changed files with 36 additions and 35 deletions

View File

@ -269,14 +269,6 @@ class ApplicationSetting < ActiveRecord::Base
self.repository_storages = [value]
end
def default_artifacts_expire_in=(value)
if value.present?
super(value.squish)
else
super(nil)
end
end
# Choose one of the available repository storage options. Currently all have
# equal weighting.
def pick_repository_storage
@ -306,10 +298,10 @@ class ApplicationSetting < ActiveRecord::Base
end
def check_default_artifacts_expire_in
if default_artifacts_expire_in &&
ChronicDuration.parse(default_artifacts_expire_in).nil?
errors.add(:default_artifacts_expiration,
"can't be 0. Leave it blank for no expiration")
if default_artifacts_expire_in.blank?
errors.add(:default_artifacts_expiration, "is not presented")
else
ChronicDuration.parse(default_artifacts_expire_in)
end
rescue ChronicDuration::DurationParseError
errors.add(:default_artifacts_expiration, "is invalid")

View File

@ -509,7 +509,7 @@ module Ci
def artifacts_expire_in=(value)
self.artifacts_expire_at =
if value
Time.now + ChronicDuration.parse(value)
ChronicDuration.parse(value)&.seconds&.from_now
end
end

View File

@ -219,10 +219,11 @@
.col-sm-10
= f.text_field :default_artifacts_expire_in, class: 'form-control'
.help-block
Set the default expiration time for each job's artifacts
Set the default expiration time for each job's artifacts.
0 for unlimited.
= surround '(', ')' do
= link_to 'syntax', help_page_path('ci/yaml/README', anchor: 'artifactsexpire_in')
= link_to icon('question-circle'), help_page_path('user/admin_area/settings/continuous_integration', anchor: 'default-artifacts-expiration-time')
= link_to icon('question-circle'), help_page_path('user/admin_area/settings/continuous_integration', anchor: 'default-artifacts-expiration')
- if Gitlab.config.registry.enabled
%fieldset

View File

@ -5,7 +5,7 @@ class AddDefaultArtifactsExpirationToApplicationSettings < ActiveRecord::Migrati
def change
add_column :application_settings,
:default_artifacts_expire_in,
:string, null: true
:default_artifacts_expire_in, :string,
null: false, default: '0'
end
end

View File

@ -111,7 +111,7 @@ ActiveRecord::Schema.define(version: 20170214111112) do
t.boolean "plantuml_enabled"
t.integer "max_pages_size", default: 100, null: false
t.integer "terminal_max_session_time", default: 0, null: false
t.string "default_artifacts_expire_in", limit: 255
t.string "default_artifacts_expire_in", default: '0', null: false
end
create_table "audit_events", force: :cascade do |t|
@ -1352,4 +1352,4 @@ ActiveRecord::Schema.define(version: 20170214111112) do
add_foreign_key "timelogs", "merge_requests", name: "fk_timelogs_merge_requests_merge_request_id", on_delete: :cascade
add_foreign_key "trending_projects", "projects", on_delete: :cascade
add_foreign_key "u2f_registrations", "users"
end
end

View File

@ -18,13 +18,13 @@ that this setting is set for each job.
[art-yml]: ../../../administration/build_artifacts
## Default artifacts expiration time
## Default artifacts expiration
The default expiration time of the [build artifacts][art-yml] can be set in
The default expiration time of the [job artifacts][art-yml] can be set in
the Admin area of your GitLab instance. The syntax of duration is described
in [artifacts:expire_in][duration-syntax]. The default is `30 days`. Note that
this setting is set for each job. Leave it blank if you don't want to set
default expiration time.
this setting is set for each job. Set it to 0 if you don't want default
expiration.
1. Go to **Admin area > Settings** (`/admin/application_settings`).

View File

@ -30,20 +30,16 @@ describe ApplicationSetting, models: true do
end
describe 'default_artifacts_expire_in' do
it 'sets an error if it is invalid' do
it 'sets an error if it cannot parse' do
setting.update(default_artifacts_expire_in: 'a')
expect(setting).to be_invalid
expect(setting.errors.messages)
.to have_key(:default_artifacts_expiration)
expect_invalid
end
it 'does not allow 0' do
setting.update(default_artifacts_expire_in: '0')
it 'sets an error if it is blank' do
setting.update(default_artifacts_expire_in: ' ')
expect(setting).to be_invalid
expect(setting.errors.messages)
.to have_key(:default_artifacts_expiration)
expect_invalid
end
it 'sets the value if it is valid' do
@ -53,11 +49,17 @@ describe ApplicationSetting, models: true do
expect(setting.default_artifacts_expire_in).to eq('30 days')
end
it 'does not set it if it is blank' do
setting.update(default_artifacts_expire_in: ' ')
it 'sets the value if it is 0' do
setting.update(default_artifacts_expire_in: '0')
expect(setting).to be_valid
expect(setting.default_artifacts_expire_in).to be_nil
expect(setting.default_artifacts_expire_in).to eq('0')
end
def expect_invalid
expect(setting).to be_invalid
expect(setting.errors.messages)
.to have_key(:default_artifacts_expiration)
end
end

View File

@ -166,6 +166,12 @@ describe Ci::Build, :models do
is_expected.to be_nil
end
it 'when setting to 0' do
build.artifacts_expire_in = '0'
is_expected.to be_nil
end
end
describe '#commit' do