module GitBundle
  class CLI
    include GitBundle::Console

    def initialize
      @errors = []
      load_repositories
    end

    def invoke(args)
      case args[0]
        when nil, '--help', 'help'
          puts `git #{args.join(' ')}`.gsub('git', 'gitb')
        when 'push'
          GitBundle::Commands::Push.new(@repositories, args[1..-1]).invoke
        else
          GitBundle::Commands::Generic.new(@repositories, args).invoke
      end
    end

    private
    def load_repositories
      @repositories = []
      if Bundler.locked_gems
        Bundler.settings.local_overrides.each do |name, path|
          spec = Bundler.locked_gems.specs.find { |s| s.name == name }
          @repositories << GitBundle::Repository.new_dependant(spec.name, path, spec.source.branch, spec.source.revision) if spec
        end
      end

      @repositories << GitBundle::Repository.new_main(File.basename(Dir.getwd), Dir.getwd)
    end
  end
end