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 )