API-GitForge

 view release on metacpan or  search on metacpan

lib/API/GitForge.pm  view on Meta::CPAN


=head2 remote_forge_info $remote

Look at the URL for git remote C<$remote>, as returned by C<git remote
get-url>, assume that this remote is a git forge, and return the
domain name of that forge and the path to the repository.

    system qw(git remote add salsa https://salsa.debian.org/spwhitton/foo);
    my ($forge_domain, $forge_repo) = API::GitForge::remote_forge_info("salsa");

    say $forge_domain;          # outputs 'salsa.debian.org'
    say $forge_repo;            # outputs 'spwhitton/foo'

=head1 STATUS

Unstable.  Interface may change.

=head1 AUTHOR

Sean Whitton <spwhitton@spwhitton.name>

=head1 COPYRIGHT AND LICENSE

lib/API/GitForge/Role/GitForge.pm  view on Meta::CPAN

    my $fork_uri = $self->_ensure_fork($_[0]);

    my $temp = tempdir CLEANUP => 1;
    my $git = Git::Wrapper->new($temp);
    $git->init;
    my @fork_branches
      = map { m#refs/heads/#; $' } $git->ls_remote("--heads", $fork_uri);
    return $fork_uri if grep /\Agitforge\z/, @fork_branches;

    open my $fh, ">", catfile $temp, "README.md";
    say $fh "This repository exists only in order to submit pull request(s).";
    close $fh;
    $git->add("README.md");
    $git->commit({ message => "Temporary fork for pull request(s)" });

    # We should be able to just say
    #
    #     $git->push($fork_uri, "master:gitforge");
    #
    # but that hangs indefinitely when pushing to (at least) Debian's
    # GitLab instance.  So just bypass Git::Wrapper and do the push

lib/App/git/nuke_forge_fork.pm  view on Meta::CPAN

    } catch {
        die "pwd doesn't look like a git repository ..\n";
    };
    #>>>
    GetOptions "upstream=s" => \$upstream;

    my @fork_branches
      = grep !/\Agitforge\z/,
      map { m#refs/heads/#; $' } $git->ls_remote(qw(--heads fork));
    if (@fork_branches) {
        say "Would delete the following branches:";
        say "  $_" for @fork_branches;
        print "\n";
        exit unless $term->ask_yn(prompt => "Are you sure?");
    }

    my ($forge_domain, $upstream_repo) = remote_forge_info $upstream;
    my $forge = new_from_domain
      domain       => $forge_domain,
      access_token => forge_access_token $forge_domain;
    $forge->nuke_fork($upstream_repo);
    $git->remote(qw(rm fork));



( run in 1.649 second using v1.01-cache-2.11-cpan-5623c5533a1 )