NAME
    App::GitHub::FindRepository - Determine the right case for a GitHub
    repository

VERSION
    Version 0.05

SYNOPSIS
        github-find-repository git://github.com/robertkrimen/Doc-Simply.git
        # git://github.com/robertkrimen/doc-simply.git

        github-find-repository robertkrimen,Doc-Simply
        # git://github.com/robertkrimen/doc-simply.git

        github-find-repository --pinger=./bin/git-ls-remote ...

        # ... or ...

        use App::GitHub::FindRepository

        my $url = App::GitHub::FindRepository->find( robertkrimen/Doc-Simply )
        # git://github.com/robertkrimen/doc-simply.git

DESCRIPTION
    GitHub recently made a change that now allows mixed-case repository
    names. Unfortunately, their git daemon will not find the right
    repository given the wrong case.

    App::GitHub::FindRepository ("github-find-repository") will interrogate
    the repository home page (HTML), looking for the "right" repository name
    in a case insensitive manner

    If LWP is not installed and curl is not available, then the finder will
    fallback to using the git protocol (via git-ls-remote or
    git-peek-remote). It will first attempt to ping the mixed-case version,
    and, failing that, will attempt to ping the lowercase version.

    In either case, it will return/print the valid repository url, if any

CAVEAT
    When finding via the git protocol, the following applies:

    Given a mixed-case repository, the find routine will try the mixed-case
    once, then the lowercase. It will not find anything else

        github-find-repository --git-protocol robertkrimen/Doc-Simply

    ...will work, as long as the real repository is
    "robertkrimen/Doc-Simply.git" or "robertkrimen/doc-simply.git"

    If the real repository is "robertkrimen/dOc-sImPlY.git" then the finder
    will NOT see it

INSTALL
        cpan -i App::GitHub::FindRepository

    You can also try using the bash script below if you need a quick-fix

USAGE
  github-find-repository
    A commandline application that will print out the the repository with
    the right casing

        Usage: github-find-repository [--pinger <pinger>] [--getter <getter>] ... <repository>

            --pinger        The pinger to use (default is either git-ls-remote or git-peek-remote)

            --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

            <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

  $repository = AppGitHub::FindRepository->find( <repository> [, pinger => <pinger>, getter => <getter>] )
    Given a mixed-case repository URI, it will return the version with the
    right case

  $repository = AppGitHub::FindRepository->find_by_git( <repository> [, pinger => <pinger>] )
    Given a mixed-case repository URI, it will return the version with the
    right case, but only using the git protocol

    NOTE: This method will only check the given casing then lowercase. See
    CAVEAT

  A bash function as an alternative
    If you do not want to install App::GitHub::FindRepository, here is a
    bash equivalent (using the git protocol, see CAVEAT):

        #!/bin/bash

        function github-find-repository() {
            local pinger=`which git-ls-remote`
            if [ "$pinger" == "" ]; then pinger=`which git-peek-remote`; fi
            if [ "$pinger" == "" ]; then echo "Couldn't find pinger (git-ls-remote or git-peek-remote)"; return -1; fi
            local repository=$1
            if [ "`$pinger $repository 2>/dev/null`" ]; then echo $repository; return 0; fi
            repository=`echo $repository | tr "[:upper:]" "[:lower:]" `
            if [ "`$pinger $repository 2>/dev/null`" ]; then echo $repository; return 0; fi
            return -1
        }

        github-find-repository $*

AUTHOR
    Robert Krimen, "<rkrimen at cpan.org>"

BUGS
    Please report any bugs or feature requests to
    "bug-app-github-findrepository at rt.cpan.org", or through the web
    interface at
    <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=App-GitHub-FindRepositor
    y>. I will be notified, and then you'll automatically be notified of
    progress on your bug as I make changes.

SUPPORT
    You can find documentation for this module with the perldoc command.

        perldoc App::GitHub::FindRepository

    You can also look for information at:

    *   RT: CPAN's request tracker

        <http://rt.cpan.org/NoAuth/Bugs.html?Dist=App-GitHub-FindRepository>

    *   AnnoCPAN: Annotated CPAN documentation

        <http://annocpan.org/dist/App-GitHub-FindRepository>

    *   CPAN Ratings

        <http://cpanratings.perl.org/d/App-GitHub-FindRepository>

    *   Search CPAN

        <http://search.cpan.org/dist/App-GitHub-FindRepository/>

ACKNOWLEDGEMENTS
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.

