75 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
module Gitlab
 | 
						|
  module Git
 | 
						|
    class Changes
 | 
						|
      include Enumerable
 | 
						|
 | 
						|
      attr_reader :repository_data
 | 
						|
 | 
						|
      def initialize
 | 
						|
        @refs = Set.new
 | 
						|
        @items = []
 | 
						|
        @branches_index = []
 | 
						|
        @tags_index = []
 | 
						|
        @repository_data = []
 | 
						|
      end
 | 
						|
 | 
						|
      def includes_branches?
 | 
						|
        branches_index.any?
 | 
						|
      end
 | 
						|
 | 
						|
      def includes_tags?
 | 
						|
        tags_index.any?
 | 
						|
      end
 | 
						|
 | 
						|
      def add_branch_change(change)
 | 
						|
        @branches_index << add_change(change)
 | 
						|
        self
 | 
						|
      end
 | 
						|
 | 
						|
      def add_tag_change(change)
 | 
						|
        @tags_index << add_change(change)
 | 
						|
        self
 | 
						|
      end
 | 
						|
 | 
						|
      def each
 | 
						|
        items.each do |item|
 | 
						|
          yield item
 | 
						|
        end
 | 
						|
      end
 | 
						|
 | 
						|
      def refs
 | 
						|
        @refs.to_a
 | 
						|
      end
 | 
						|
 | 
						|
      def branch_changes
 | 
						|
        items.values_at(*branches_index)
 | 
						|
      end
 | 
						|
 | 
						|
      def tag_changes
 | 
						|
        items.values_at(*tags_index)
 | 
						|
      end
 | 
						|
 | 
						|
      private
 | 
						|
 | 
						|
      attr_reader :items, :branches_index, :tags_index
 | 
						|
 | 
						|
      def add_change(change)
 | 
						|
        # refs and repository_data are being cached when a change is added to
 | 
						|
        # the collection to remove the need to iterate through changes multiple
 | 
						|
        # times.
 | 
						|
        @refs << change[:ref]
 | 
						|
        @repository_data << build_change_repository_data(change)
 | 
						|
        @items << change
 | 
						|
 | 
						|
        @items.size - 1
 | 
						|
      end
 | 
						|
 | 
						|
      def build_change_repository_data(change)
 | 
						|
        DataBuilder::Repository.single_change(change[:oldrev], change[:newrev], change[:ref])
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |