module Bundler

def setup(*groups)

def setup(*groups)
  # Just return if all groups are already loaded
  return @setup if defined?(@setup)
  definition.validate_ruby!
  if groups.empty?
    # Load all groups, but only once
    @setup = load.setup
  else
    @completed_groups ||= []
    # Figure out which groups haven't been loaded yet
    unloaded = groups - @completed_groups
    # Record groups that are now loaded
    @completed_groups = groups
    unloaded.any? ? load.setup(*groups) : load
  end
end