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
 |