Skip to content

Fbe.unmask_repos yields the same repository twice when an exact-name mask overlaps a wildcard mask #616

Description

@morphqdd

Fbe.unmask_repos (lib/fbe/unmask_repos.rb:71-104) builds the repos array by iterating every non-exclusion mask independently and appending matches, with no deduplication anywhere in the pipeline (not after the inclusion loop, not after the exclusion loop, not before the final repos.each/return).

What happens: when options.repositories contains an exact repo name and a wildcard mask that also matches that same repo — e.g. "yegor256/factbase,Yegor256/*" — the repo is appended once by the exact-name branch (repos << mask; next) and again by the wildcard branch (re.match? loop over organization_repositories), and both copies survive to the end.

Reproduced directly:

opts = Judges::Options.new({'testing' => true, 'repositories' => 'yegor256/factbase,Yegor256/*'})
list = Fbe.unmask_repos(options: opts, global: {}, loog: Loog::NULL)
# => ["yegor256/judges", "yegor256/factbase", "yegor256/factbase"]
list.size      # => 3
list.uniq.size # => 2

yegor256/factbase appears twice. Since the method's block form does repos.each { |repo| ...; yield(repo) }, a caller using overlapping masks gets the same repository yielded (and processed — extra API calls, extra judge-fact writes, etc.) twice per run for no legitimate reason.

What should happen: repos should contain each matching repository exactly once regardless of how many masks (exact or wildcard) happen to match it — e.g. repos.uniq! before the emptiness check / return.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions