class RepositoryMerger::CommitHistoryMerger
Attributes
commit_message_conversion[R]
configuration[R]
monorepo_head_commit[R]
original_references[R]
progress_title[R]
wants_to_abort[RW]
Public Class Methods
new(references, configuration:, commit_message_conversion: nil, progress_title: nil)
click to toggle source
# File lib/repository_merger/commit_history_merger.rb, line 10 def initialize(references, configuration:, commit_message_conversion: nil, progress_title: nil) @original_references = references @configuration = configuration @commit_message_conversion = commit_message_conversion @progress_title = progress_title end
Public Instance Methods
run()
click to toggle source
# File lib/repository_merger/commit_history_merger.rb, line 17 def run logger.verbose("Importing commits from #{original_references.map { |ref| "#{ref.name} (#{ref.repo.name})" }.join(', ')}", title: true) logger.start_tracking_progress_for('commits', total: unprocessed_original_commit_queue.size, title: progress_title) while (original_commit = unprocessed_original_commit_queue.next) process_commit(original_commit) break if wants_to_abort end monorepo_head_commit ensure repo_commit_map.merge!(branch_local_commit_map) repo_commit_map.save if repo_commit_map.path end
Private Instance Methods
already_imported_monorepo_commit_for(original_commit)
click to toggle source
# File lib/repository_merger/commit_history_merger.rb, line 58 def already_imported_monorepo_commit_for(original_commit) monorepo_commits = repo_commit_map.monorepo_commits_for(original_commit) monorepo_commits.find do |monorepo_commit| monorepo_commit.parents == parent_commits_in_monorepo_for(original_commit) end end
branch_local_commit_map()
click to toggle source
# File lib/repository_merger/commit_history_merger.rb, line 122 def branch_local_commit_map @branch_local_commit_map ||= BranchLocalCommitMap.new(monorepo: monorepo) end
commit_message_from(original_commit)
click to toggle source
# File lib/repository_merger/commit_history_merger.rb, line 96 def commit_message_from(original_commit) if commit_message_conversion commit_message_conversion.call(original_commit) else original_commit.message end end
import_commit_into_monorepo(original_commit)
click to toggle source
# File lib/repository_merger/commit_history_merger.rb, line 66 def import_commit_into_monorepo(original_commit) parent_commits_in_monorepo = parent_commits_in_monorepo_for(original_commit) monorepo.import_commit( original_commit, new_parents: parent_commits_in_monorepo, subdirectory: original_commit.repo.name, message: commit_message_from(original_commit) ) end
logger()
click to toggle source
# File lib/repository_merger/commit_history_merger.rb, line 126 def logger configuration.logger end
mainline?(original_commit)
click to toggle source
# File lib/repository_merger/commit_history_merger.rb, line 91 def mainline?(original_commit) original_reference = original_references_by_repo[original_commit.repo] original_reference.mainline?(original_commit) end
monorepo()
click to toggle source
# File lib/repository_merger/commit_history_merger.rb, line 114 def monorepo configuration.monorepo end
original_references_by_repo()
click to toggle source
# File lib/repository_merger/commit_history_merger.rb, line 108 def original_references_by_repo @original_references_by_repo ||= original_references.each_with_object({}) do |original_reference, hash| hash[original_reference.repo] = original_reference end end
parent_commits_in_monorepo_for(original_commit)
click to toggle source
# File lib/repository_merger/commit_history_merger.rb, line 77 def parent_commits_in_monorepo_for(original_commit) if original_commit.root? return [monorepo_head_commit].compact end original_commit.parents.map do |original_parent_commit| if mainline?(original_commit) && mainline?(original_parent_commit) monorepo_head_commit else branch_local_commit_map.monorepo_commit_for(original_parent_commit) end end end
process_commit(original_commit)
click to toggle source
# File lib/repository_merger/commit_history_merger.rb, line 36 def process_commit(original_commit) logger.verbose " #{original_commit.commit_time} [#{original_commit.repo.name}] #{original_commit.message.each_line.first}" if (monorepo_commit = already_imported_monorepo_commit_for(original_commit)) logger.verbose " Already imported as #{monorepo_commit.abbreviated_id}. Skipping." else monorepo_commit = import_commit_into_monorepo(original_commit) logger.verbose " Created commit #{monorepo_commit.abbreviated_id}." end branch_local_commit_map.register( monorepo_commit: monorepo_commit, original_commit: original_commit ) if mainline?(original_commit) @monorepo_head_commit = monorepo_commit end logger.increment_progress end
repo_commit_map()
click to toggle source
# File lib/repository_merger/commit_history_merger.rb, line 118 def repo_commit_map configuration.repo_commit_map end
unprocessed_original_commit_queue()
click to toggle source
# File lib/repository_merger/commit_history_merger.rb, line 104 def unprocessed_original_commit_queue @unprocessed_original_commit_queue ||= OriginalCommitQueue.new(original_references) end