Module: CodeOwnership

Extended by:
T::Sig
Defined in:
lib/code_ownership/version.rb,
lib/code_ownership.rb,
lib/code_ownership/cli.rb,
lib/code_ownership/private/team_finder.rb,
lib/code_ownership/private/file_path_finder.rb,
lib/code_ownership/private/file_path_team_cache.rb,
lib/code_ownership/private/for_file_output_builder.rb,
lib/code_ownership/private/permit_pack_owner_top_level_key.rb

Overview

typed: strict

Defined Under Namespace

Modules: Private Classes: Cli

Constant Summary collapse

GlobsToOwningTeamMap =
T.type_alias { T::Hash[String, CodeTeams::Team] }
VERSION =
'2.1.1'

Class Method Summary collapse

Class Method Details

.bust_caches!Object



316
317
318
# File 'lib/code_ownership.rb', line 316

def self.bust_caches!
  Private::FilePathTeamCache.bust_cache!
end

.first_owned_file_for_backtrace(backtrace, excluded_teams: []) ⇒ Object



297
298
299
# File 'lib/code_ownership.rb', line 297

def self.first_owned_file_for_backtrace(backtrace, excluded_teams: [])
  Private::TeamFinder.first_owned_file_for_backtrace(backtrace, excluded_teams: excluded_teams)
end

.for_backtrace(backtrace, excluded_teams: []) ⇒ Object



290
291
292
# File 'lib/code_ownership.rb', line 290

def self.for_backtrace(backtrace, excluded_teams: [])
  Private::TeamFinder.for_backtrace(backtrace, excluded_teams: excluded_teams)
end

.for_class(klass) ⇒ Object



302
303
304
# File 'lib/code_ownership.rb', line 302

def self.for_class(klass)
  Private::TeamFinder.for_class(klass)
end

.for_file(file, from_codeowners: true, allow_raise: false) ⇒ Object



63
64
65
66
67
68
69
# File 'lib/code_ownership.rb', line 63

def self.for_file(file, from_codeowners: true, allow_raise: false)
  if from_codeowners
    teams_for_files_from_codeowners([file], allow_raise: allow_raise).values.first
  else
    Private::TeamFinder.for_file(file, allow_raise: allow_raise)
  end
end

.for_file_verbose(file) ⇒ Object



158
159
160
# File 'lib/code_ownership.rb', line 158

def self.for_file_verbose(file)
  ::RustCodeOwners.for_file(file)
end

.for_package(package) ⇒ Object



307
308
309
# File 'lib/code_ownership.rb', line 307

def self.for_package(package)
  Private::TeamFinder.for_package(package)
end

.for_team(team) ⇒ Object



163
164
165
166
# File 'lib/code_ownership.rb', line 163

def self.for_team(team)
  team = T.must(CodeTeams.find(team)) if team.is_a?(String)
  ::RustCodeOwners.for_team(team.name)
end

.remove_file_annotation!(filename) ⇒ Object



267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
# File 'lib/code_ownership.rb', line 267

def self.remove_file_annotation!(filename)
  filepath = Pathname.new(filename)

  begin
    content = filepath.read
  rescue Errno::EISDIR, Errno::ENOENT
    # Ignore files that fail to read (directories, missing files, etc.)
    return
  end

  # Remove the team annotation and any trailing newlines after it
  team_pattern = %r{\A(?:#|//|-#) @team .*\n+}
  new_content = content.sub(team_pattern, '')

  filepath.write(new_content) if new_content != content
rescue ArgumentError => e
  # Handle invalid byte sequences gracefully
  raise unless e.message.include?('invalid byte sequence')
end

.teams_for_files_from_codeowners(files, allow_raise: false) ⇒ Object



114
115
116
# File 'lib/code_ownership.rb', line 114

def self.teams_for_files_from_codeowners(files, allow_raise: false)
  Private::TeamFinder.teams_for_files(files, allow_raise: allow_raise)
end

.validate!(autocorrect: true, stage_changes: true, files: nil) ⇒ Object



224
225
226
227
228
229
230
231
232
233
234
# File 'lib/code_ownership.rb', line 224

def self.validate!(
  autocorrect: true,
  stage_changes: true,
  files: nil
)
  if autocorrect
    ::RustCodeOwners.generate_and_validate(files, !stage_changes)
  else
    ::RustCodeOwners.validate(files)
  end
end

.versionObject



33
34
35
36
# File 'lib/code_ownership.rb', line 33

def self.version
  ["code_ownership version: #{VERSION}",
   "codeowners-rs version: #{::RustCodeOwners.version}"]
end