Skip to content

[Rails5] Fix `TZInfo::InvalidTimezoneIdentifier` exception

What does this MR do?

In Rails 4.2.10 the ActiveSupport::TimeZone.find_tzinfo(timezone_name) method calls TZInfo::TimezoneProxy.new(timezone_name) which returns timezone_name if it is invalid.

But in Rails 5.0 the ActiveSupport::TimeZone.find_tzinfo(timezone_name) method now calls the TZInfo::Timezone.new(timezone_name) method which throws the TZInfo::InvalidTimezoneIdentifier: Invalid identifier exception if timezone_name is invalid.

This MR adds the rescue block to return timezone name if the exception is raised.

Also this change fixes the error:

  1) Ci::PipelineSchedule validations does not allow invalid cron patters
     Failure/Error: ActiveSupport::TimeZone.find_tzinfo(timezone).name
     
     TZInfo::InvalidTimezoneIdentifier:
       Invalid identifier
     # ./lib/gitlab/ci/cron_parser.rb:28:in `timezone_name'
     # ./lib/gitlab/ci/cron_parser.rb:9:in `initialize'
     # ./app/validators/cron_validator.rb:6:in `new'
     # ./app/validators/cron_validator.rb:6:in `validate_each'
     # ./spec/models/ci/pipeline_schedule_spec.rb:26:in `block (3 levels) in <top (required)>'

Are there points in the code the reviewer needs to double check?

No.

Why was this MR needed?

Migration to Rails 5.0

Screenshots (if relevant)

No.

Does this MR meet the acceptance criteria?

What are the relevant issue numbers?

#14286 (closed) and !12841 (closed)

Merge request reports