App-GitHub-FindRepository
view release on metacpan or search on metacpan
lib/App/GitHub/FindRepository.pm view on Meta::CPAN
return $_ if -f && -r _ && -x _;
}
return undef;
}
sub do_usage (;$) {
my $error = shift;
warn $error if $error;
warn <<_END_;
Usage: github-find-repository [...] <repository>
--pinger <pinger> The pinger to use (default is either git-ls-remote or git-peek-remote)
--getter <getter> The getter to use (default is LWP then curl)
--git-protocol Don't try to determine the repository by sniffing HTML, just use git://
NOTE: This mode will only check the given casing then lowercase
--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 );
lib/App/GitHub/FindRepository.pm view on Meta::CPAN
return undef;
}
sub run {
my $self = shift;
my ($getter, $pinger, $git_protocol, $output, $help);
GetOptions(
'help|h|?' => \$help,
'getter=s' => \$getter,
'pinger=s' => \$pinger,
'output=s' => \$output,
'git-protocol' => \$git_protocol,
);
if ($help) {
do_usage;
exit 0;
}
$pinger = $self->pinger unless $pinger;
my $repository = join '', @ARGV;
do_usage <<_END_ unless $repository;
$0: You need to specify a repository
_END_
if ($output) {
$output = lc $output;
$output =~ m/^(base|public|private|url|name|home)$/ or do_usage <<_END_;
$0: Unrecogonized output option "$output"
_END_
}
eval {
my $repository = $repository;
if ($git_protocol) {
$repository = $self->find_by_git( $repository, pinger => $pinger );
}
else {
$repository = $self->find( $repository, getter => $getter, pinger => $pinger );
}
do_found $output, $repository if $repository;
};
if ($@ =~ m/No pinger!/) {
do_usage <<_END_;
$0: No pinger given and couldn't find git-ls-remote or git-peek-remote in \$PATH
_END_
}
elsif ($@) {
my $error = $@;
chomp $error;
do_usage <<_END_;
$0: There was an error: $error
_END_
}
do_not_found $repository;
}
=head1 AUTHOR
Robert Krimen, C<< <rkrimen at cpan.org> >>
=head1 BUGS
Please report any bugs or feature requests to C<bug-app-github-findrepository at rt.cpan.org>, or through
the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=App-GitHub-FindRepository>. I will be notified, and then you'll
automatically be notified of progress on your bug as I make changes.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc App::GitHub::FindRepository
You can also look for information at:
=over 4
=item * RT: CPAN's request tracker
L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=App-GitHub-FindRepository>
=item * AnnoCPAN: Annotated CPAN documentation
L<http://annocpan.org/dist/App-GitHub-FindRepository>
=item * CPAN Ratings
L<http://cpanratings.perl.org/d/App-GitHub-FindRepository>
=item * Search CPAN
L<http://search.cpan.org/dist/App-GitHub-FindRepository/>
=back
=head1 ACKNOWLEDGEMENTS
=head1 COPYRIGHT & LICENSE
Copyright 2009 Robert Krimen, all rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
=cut
__PACKAGE__; # End of App::GitHub::FindRepository
( run in 0.830 second using v1.01-cache-2.11-cpan-5623c5533a1 )