NAME

File::Codeowners - Read and write CODEOWNERS files

VERSION

version 0.48

METHODS

new

    $codeowners = File::Codeowners->new;

Construct a new File::Codeowners.

parse

    $codeowners = File::Codeowners->parse('path/to/CODEOWNERS');
    $codeowners = File::Codeowners->parse($filehandle);
    $codeowners = File::Codeowners->parse(\@lines);
    $codeowners = File::Codeowners->parse(\$string);

Parse a CODEOWNERS file.

This is a shortcut for the parse_from_* methods.

parse_from_filepath

    $codeowners = File::Codeowners->parse_from_filepath('path/to/CODEOWNERS');

Parse a CODEOWNERS file from the filesystem.

parse_from_fh

    $codeowners = File::Codeowners->parse_from_fh($filehandle);

Parse a CODEOWNERS file from an open filehandle.

parse_from_array

    $codeowners = File::Codeowners->parse_from_array(\@lines);

Parse a CODEOWNERS file stored as lines in an array.

parse_from_string

    $codeowners = File::Codeowners->parse_from_string(\$string);
    $codeowners = File::Codeowners->parse_from_string($string);

Parse a CODEOWNERS file stored as a string. String should be UTF-8 encoded.

write_to_filepath

    $codeowners->write_to_filepath($filepath);

Write the contents of the file to the filesystem atomically.

write_to_fh

    $codeowners->write_to_fh($fh);

Format the file contents and write to a filehandle.

write_to_string

    $scalarref = $codeowners->write_to_string;

Format the file contents and return a reference to a formatted string.

write_to_array

    $lines = $codeowners->write_to_array;

Format the file contents as an arrayref of lines.

match

    $owners = $codeowners->match($filepath);

Match the given filepath against the available patterns and return just the owners for the matching pattern. Patterns are checked in the reverse order they were defined in the file.

Returns undef if no patterns match.

owners

    $owners = $codeowners->owners; # get all defined owners
    $owners = $codeowners->owners($pattern);

Get an arrayref of owners defined in the file. If a pattern argument is given, only owners for the given pattern are returned (or empty arrayref if the pattern does not exist). If no argument is given, simply returns all owners defined in the file.

patterns

    $patterns = $codeowners->patterns;
    $patterns = $codeowners->patterns($owner);

Get an arrayref of all patterns defined.

projects

    $projects = $codeowners->projects;

Get an arrayref of all projects defined.

update_owners

    $codeowners->update_owners($pattern => \@new_owners);

Set a new set of owners for a given pattern. If for some reason the file has multiple such patterns, they will all be updated.

Nothing happens if the file does not already have at least one such pattern.

update_owners_by_project

    $codeowners->update_owners_by_project($project => \@new_owners);

Set a new set of owners for all patterns under the given project.

Nothing happens if the file does not have a project with the given name.

rename_project

    $codeowners->rename_project($old_name => $new_name);

Rename a project.

Nothing happens if the file does not have a project with the old name.

append

    $codeowners->append(comment => $str);
    $codeowners->append(pattern => $pattern, owners => \@owners);
    $codeowners->append();     # blank line

Append a new line.

prepend

    $codeowners->prepend(comment => $str);
    $codeowners->prepend(pattern => $pattern, owners => \@owners);
    $codeowners->prepend();    # blank line

Prepend a new line.

unowned

    $filepaths = $codeowners->unowned;

Get the list of filepaths in the "unowned" section.

This parser supports an "extension" to the CODEOWNERS file format which lists unowned files at the end of the file. This list can be useful to have in order to figure out what files we know are unowned versus what files we don't know are unowned.

add_unowned

    $codeowners->add_unowned($filepath, ...);

Add one or more filepaths to the "unowned" list.

This method does not check to make sure the filepath(s) actually do not match any patterns in the file, so you might want to call "match" first.

See "unowned" for an explanation.

remove_unowned

    $codeowners->remove_unowned($filepath, ...);

Remove one or more filepaths from the "unowned" list.

Silently ignores filepaths that are already not listed.

See "unowned" for an explanation.

clear_unowned

    $codeowners->clear_unowned;

Remove all filepaths from the "unowned" list.

See "unowned" for an explanation.

BUGS

Please report any bugs or feature requests on the bugtracker website https://github.com/chazmcgarvey/git-codeowners/issues

When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.

AUTHOR

Charles McGarvey <chazmcgarvey@brokenzipper.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2019 by Charles McGarvey.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.