summaryrefslogtreecommitdiff
path: root/lib/API/GitForge
diff options
context:
space:
mode:
Diffstat (limited to 'lib/API/GitForge')
-rw-r--r--lib/API/GitForge/GitLab.pm28
-rw-r--r--lib/API/GitForge/Role/GitForge.pm4
2 files changed, 24 insertions, 8 deletions
diff --git a/lib/API/GitForge/GitLab.pm b/lib/API/GitForge/GitLab.pm
index 7ffd844..3f38bf7 100644
--- a/lib/API/GitForge/GitLab.pm
+++ b/lib/API/GitForge/GitLab.pm
@@ -70,12 +70,11 @@ sub _ensure_fork {
sub _assert_fork_has_parent {
my ($self, $upstream) = @_;
- my (undef, $repo) = _extract_project_id($upstream);
+ my ($path, $repo) = _extract_project_id($upstream);
my $user = $self->{_api}->current_user->{username};
my $fork = $self->{_api}->project("$user/$repo");
- $upstream =~ s/\.git$//;
- $fork->{forked_from_project}{path_with_namespace} eq $upstream
+ $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";
}
@@ -101,15 +100,28 @@ sub _clean_config_fork {
$self->{_api}->edit_project(
"$user/$repo",
{
- default_branch => "gitforge",
- description => "Temporary fork for merge request(s)",
+ default_branch => "gitforge",
+ description => "Temporary fork for merge request(s)",
+ issues_access_level => "disabled",
+ # merge requests have to be enabled in the fork in order
+ # to submit merge requests to the upstream repo from which
+ # we forked, it seems
+ merge_requests_access_level => "enabled",
});
-
- $self->_clean_config_repo("$user/$repo");
}
sub _ensure_repo {
- die "unimplemented";
+ my ($self, $target) = @_;
+ my ($ns, $repo) = _extract_project_id($target);
+
+ # first we are required to get the namespace id
+ my $namespace = $self->{_api}->namespace($ns)
+ or croak "invalid project namespace $ns";
+
+ # now create the project unless it already exists
+ return if $self->{_api}->project($target);
+ $self->{_api}
+ ->create_project({ name => $repo, namespace_id => $namespace->{id} });
}
sub _nuke_fork {
diff --git a/lib/API/GitForge/Role/GitForge.pm b/lib/API/GitForge/Role/GitForge.pm
index 933b166..bacc293 100644
--- a/lib/API/GitForge/Role/GitForge.pm
+++ b/lib/API/GitForge/Role/GitForge.pm
@@ -126,6 +126,10 @@ sub clean_fork {
$self->_clean_config_fork(@_);
+ # TODO use API to unprotect all branches in the fork. we still
+ # want to use git-push(1) to delete the branches, rather than
+ # using the API for that, because that's maximally compatible
+
# assume that if we had to create the gitforge branch, we just
# created the fork, so can go ahead and nuke all branches there.
# may fail if some branches are protected; that's okay.