API-GitForge
view release on metacpan or search on metacpan
lib/API/GitForge/GitHub.pm view on Meta::CPAN
my ($self, $upstream) = @_;
my ($org, $repo) = _extract_repo($upstream);
my $repos = $self->{_api}->repos;
my $user = $self->{_api}->user->show->{login};
my @user_repos = $repos->list_user($user);
my $repo_exists = sub {
grep { $_->{name} eq $repo } @user_repos;
};
if (&$repo_exists) {
$self->_assert_fork_has_parent($upstream);
} else {
$repos->create_fork($org, $repo);
until (&$repo_exists) {
sleep 5;
@user_repos = $repos->list_user($user);
}
}
return "https://github.com/$user/$repo";
}
sub _assert_fork_has_parent {
my ($self, $upstream) = @_;
my (undef, $repo) = _extract_repo($upstream);
my $user = $self->{_api}->user->show->{login};
my $fork = $self->{_api}->repos->get($user, $repo);
$fork->{parent}{full_name} eq $upstream
or croak
"$user/$repo does not have parent $upstream; don't know what to do";
}
sub _clean_config_repo {
my ($self, $target) = @_;
my ($org, $repo) = _extract_repo($target);
my $repos = $self->{_api}->repos;
$repos->set_default_user_repo($org, $repo);
$repos->update({
name => "$repo",
has_wiki => 0,
lib/API/GitForge/GitHub.pm view on Meta::CPAN
until (&$repo_exists) {
sleep 5;
@list_repos = $repos->$list_method($org);
}
}
return "https://github.com/$org/$repo";
}
sub _nuke_fork {
my ($self, $upstream) = @_;
$self->_assert_fork_has_parent($upstream);
my (undef, $repo) = _extract_repo($upstream);
my $user = $self->{_api}->user->show->{login};
$self->{_api}->repos->delete($user, $repo);
}
sub _extract_repo {
$_[0] =~ m#^([^/]+)/(.+)(?:\.git)?$#;
($1, $2);
}
lib/API/GitForge/GitLab.pm view on Meta::CPAN
my @user_repos;
my $update_user_repos = sub {
@user_repos
= @{ $self->{_api}->projects({ search => "$user/$repo" }) };
};
my $repo_exists = sub {
grep { $_->{path_with_namespace} eq "$user/$repo" } @user_repos;
};
&$update_user_repos;
if (&$repo_exists) {
$self->_assert_fork_has_parent($upstream);
} else {
$self->{_api}->fork_project("$path/$repo");
until (&$repo_exists) {
sleep 5;
&$update_user_repos;
}
}
return "https://" . $self->{_domain} . "/$user/$repo.git";
}
sub _assert_fork_has_parent {
my ($self, $upstream) = @_;
my ($path, $repo) = _extract_project_id($upstream);
my $user = $self->{_api}->current_user->{username};
my $fork = $self->{_api}->project("$user/$repo");
$fork->{forked_from_project}{path_with_namespace} eq $path . "/" . $repo
or croak
"$user/$repo does not have parent $upstream; don't know what to do";
}
sub _clean_config_repo {
my ($self, $target) = @_;
my ($ns, $repo) = _extract_project_id($target);
$self->{_api}->edit_project(
"$ns/$repo",
{
issues_access_level => "disabled",
lib/API/GitForge/GitLab.pm view on Meta::CPAN
my ($ns, $repo) = _extract_project_id($target);
return if $self->{_api}->project($target);
my $namespace = $self->{_api}->namespace($ns)
or croak "invalid project namespace $ns";
$self->{_api}
->create_project({ name => $repo, namespace_id => $namespace->{id} });
}
sub _nuke_fork {
my ($self, $upstream) = @_;
$self->_assert_fork_has_parent($upstream);
my (undef, $repo) = _extract_project_id($upstream);
my $user = $self->{_api}->current_user->{username};
$self->{_api}->delete_project("$user/$repo");
}
sub _ensure_fork_branch_unprotected {
my ($self, $upstream, $branch) = @_;
my (undef, $repo) = _extract_project_id($upstream);
my $user = $self->{_api}->current_user->{username};
return unless $self->{_api}->protected_branch("$user/$repo", $branch);
( run in 0.261 second using v1.01-cache-2.11-cpan-a5abf4f5562 )