Class: Packs::CodeOwnershipPostProcessor

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Includes:
PerFileProcessorInterface
Defined in:
lib/packs/code_ownership_post_processor.rb

Instance Method Summary collapse

Constructor Details

#initializeCodeOwnershipPostProcessor

Returns a new instance of CodeOwnershipPostProcessor.



9
10
11
12
# File 'lib/packs/code_ownership_post_processor.rb', line 9

def initialize
  @teams = T.let([], T::Array[String])
  @did_move_files = T.let(false, T::Boolean)
end

Instance Method Details

#after_move_files!(file_move_operations) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/packs/code_ownership_post_processor.rb', line 44

def after_move_files!(file_move_operations)
  if @teams.any?
    Logging.section('Code Ownership') do
      Logging.print('This section contains info about the current ownership distribution of the moved files.')
      @teams.group_by { |team| team }.sort_by { |_team, instances| -instances.count }.each do |team, instances|
        Logging.print "  #{team} - #{instances.count} files"
      end
      if @did_move_files
        Logging.print 'Since the destination package has package-based ownership, file-annotations were removed from moved files.'
      end
    end
  end
end

#before_move_file!(file_move_operation) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/packs/code_ownership_post_processor.rb', line 15

def before_move_file!(file_move_operation)
  relative_path_to_origin = file_move_operation.origin_pathname
  relative_path_to_destination = file_move_operation.destination_pathname

  code_owners_allow_list_file = Pathname.new('config/code_ownership.yml')
  return if !code_owners_allow_list_file.exist?

  Packs.replace_in_file(
    file: code_owners_allow_list_file.to_s,
    find: relative_path_to_origin,
    replace_with: relative_path_to_destination
  )

  team = CodeOwnership.for_file(relative_path_to_origin.to_s)

  if team
    @teams << team.name
  else
    @teams << 'Unknown'
  end

  pack = Packs.find(file_move_operation.destination_pack.name)
  if pack && !CodeOwnership.for_package(pack).nil?
    CodeOwnership.remove_file_annotation!(relative_path_to_origin.to_s)
    @did_move_files = true
  end
end