App-GitHub-FindRepository

 view release on metacpan or  search on metacpan

lib/App/GitHub/FindRepository.pm  view on Meta::CPAN

    --output <output>   One of (case insensitive):

                        Given "http://github.com/robertkrimen/aPp-giTHub-findRepoSitory.git"

                        URL      http://github.com/robertkrimen/App-GitHub-FindRepository.git
                        public   git://github.com/robertkrimen/App-GitHub-FindRepository.git
                        private  git\@github.com:robertkrimen/App-GitHub-FindRepository.git
                        base     robertkrimen/App-GitHub-FindRepository
                        name     App-GitHub-FindRepository
                        home     http://github.com/robertkrimen/App-GitHub-FindRepository

    --help, -h, -?      This help

    <repository>        The repository to test, can be like:

                        git://github.com/robertkrimen/App-GitHub-FindRepository.git
                        robertkrimen/App-GitHub-FindRepository.git
                        robertkrimen,App-GitHub-FindRepository

For example:

    github-find-repository --getter curl robertkrimen,aPp-giTHuB-findRepOsitory

_END_

    exit -1 if $error;
}

sub do_found ($$) {
    my $output = shift;
    my $repository = shift;
    if ($output) {
        print $repository->$output, "\n";
    }
    else {
        print "$repository\n";
    }
    exit 0;
}

sub do_not_found ($) {
    my $repository = shift;
    warn <<_END_;
$0: Repository \"$repository\" not found
_END_
    exit -1;
}

sub pinger {
    my $self = shift;
    return $ENV{GH_FR_PINGER} || _find_in_path 'git-ls-remote' || _find_in_path 'git-peek-remote';
}

sub _get_by_LWP {
    my $self = shift;
    return sub {
        my $url = shift;
        my $agent = LWP::UserAgent->new;
        my $response = $agent->get( $url );
        die $response->status_line, "\n" unless $response->is_success;
        return $response->decoded_content;
    };
}

sub _get_by_curl {
    my $self = shift;
    my $curl = shift;
    return sub {
        my $url = shift;
        return `$curl -s -L $url`;
    };
}
sub getter {
    my $self = shift;
    my $getter = shift;

    return $getter if ref $getter eq 'CODE';

    $getter = 'LWP' unless $getter;
        
    die "Oh my god no!\n" if $getter eq '^';

    my $command;
    if ($getter =~ m/^LWP$/i && eval "require LWP::UserAgent") {
        return $self->_get_by_LWP;
    }
    elsif ($command = _find_in_path 'curl') {
        return $self->_get_by_curl( $command );
    }

    return undef;
}

sub parse_repository {
    my $self = shift;
    return App::GitHub::FindRepository::Repository->parse( @_ );
}

sub find {
    my $self = shift;
    my $repository = $self->parse_repository( shift );
    my %given = @_;
    my $getter = $self->getter( $given{getter} );
    my $pinger = $given{pinger};

    die "No repository given\n" unless $repository;
    if (! $getter ) {
        warn "Unable to use/find LWP or curl\n";
        warn "Falling back to git protocol\n";
        return $self->find_by_git( $repository, pinger => $pinger );
    }

    my $url = $repository->home;
    my $base = $repository->base;

    my $content;
    eval {
        $content = $getter->( $url );
    };
    unless ($content) {
        my $error = $@ || "Unknown error";



( run in 2.065 seconds using v1.01-cache-2.11-cpan-5b529ec07f3 )