48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
module Gitlab
 | 
						|
  module Database
 | 
						|
    module Migrations
 | 
						|
      module MilestoneMixin
 | 
						|
        extend ActiveSupport::Concern
 | 
						|
        include Gitlab::ClassAttributes
 | 
						|
 | 
						|
        MilestoneNotSetError = Class.new(StandardError)
 | 
						|
 | 
						|
        class_methods do
 | 
						|
          def milestone(milestone_str = nil)
 | 
						|
            if milestone_str.present?
 | 
						|
              set_class_attribute(:migration_milestone, milestone_str)
 | 
						|
            else
 | 
						|
              get_class_attribute(:migration_milestone)
 | 
						|
            end
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        def type_from_path(path)
 | 
						|
          dir = File.dirname(path)
 | 
						|
          return :post if dir.match?(%r{db/(\w+/)?post_migrate})
 | 
						|
          return :regular if dir.match?(%r{db/(\w+/)?migrate})
 | 
						|
 | 
						|
          raise 'unknown migration path'
 | 
						|
        end
 | 
						|
 | 
						|
        def initialize(name = self.class.name, version = nil)
 | 
						|
          raise MilestoneNotSetError, "Milestone is not set for #{name}" if milestone.nil?
 | 
						|
 | 
						|
          super(name, version)
 | 
						|
          @version = Gitlab::Database::Migrations::Version.new(
 | 
						|
            version,
 | 
						|
            milestone,
 | 
						|
            type_from_path(self.class.instance_variable_get(:@_defining_file))
 | 
						|
          )
 | 
						|
        end
 | 
						|
 | 
						|
        def milestone
 | 
						|
          @milestone ||= self.class.milestone
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |