Adding upstream version 2.25.15.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
This commit is contained in:
parent
10737b110a
commit
b543f2e88d
485 changed files with 191459 additions and 0 deletions
137
lib/Devscripts/Salsa/update_repo.pm
Executable file
137
lib/Devscripts/Salsa/update_repo.pm
Executable file
|
@ -0,0 +1,137 @@
|
|||
# Updates projects
|
||||
package Devscripts::Salsa::update_repo; # update_projects
|
||||
|
||||
use strict;
|
||||
use Devscripts::Output;
|
||||
use GitLab::API::v4::Constants qw(:all);
|
||||
use Moo::Role;
|
||||
|
||||
with "Devscripts::Salsa::Repo";
|
||||
|
||||
our $prompt = 1;
|
||||
|
||||
sub update_repo {
|
||||
my ($self, @reponames) = @_;
|
||||
if ($ds_yes < 0 and $self->config->command eq 'update_repo') {
|
||||
ds_warn
|
||||
"update_projects can't be launched when --info is set, use update_safe";
|
||||
return 1;
|
||||
}
|
||||
unless (@reponames or $self->config->all or $self->config->all_archived) {
|
||||
ds_warn "Usage $0 update_projects <--all|--all-archived|names>";
|
||||
return 1;
|
||||
}
|
||||
if (@reponames and $self->config->all) {
|
||||
ds_warn "--all with a project name makes no sense";
|
||||
return 1;
|
||||
}
|
||||
if (@reponames and $self->config->all_archived) {
|
||||
ds_warn "--all-archived with a project name makes no sense";
|
||||
return 1;
|
||||
}
|
||||
return $self->_update_repo(@reponames);
|
||||
}
|
||||
|
||||
sub _update_repo {
|
||||
my ($self, @reponames) = @_;
|
||||
my $res = 0;
|
||||
# Common options
|
||||
my $configparams = {};
|
||||
# visibility can be modified only by group owners
|
||||
$configparams->{visibility} = 'public'
|
||||
if $self->access_level >= $GITLAB_ACCESS_LEVEL_OWNER;
|
||||
# get project list using Devscripts::Salsa::Repo
|
||||
my @repos = $self->get_repo($prompt, @reponames);
|
||||
return @repos unless (ref $repos[0]); # get_repo returns 1 when fails
|
||||
foreach my $repo (@repos) {
|
||||
my $id = $repo->[0];
|
||||
my $str = $repo->[1];
|
||||
ds_verbose "Configuring $str";
|
||||
eval {
|
||||
# apply new parameters
|
||||
$self->api->edit_project($id,
|
||||
{ %$configparams, $self->desc($str) });
|
||||
# Set project avatar
|
||||
my @avatar_file = $self->desc_multipart($str);
|
||||
$self->api->edit_project_multipart($id, {@avatar_file})
|
||||
if (@avatar_file and $self->config->avatar_path);
|
||||
# add hooks if needed
|
||||
$str =~ s#^.*/##;
|
||||
$self->add_hooks($id, $str);
|
||||
};
|
||||
if ($@) {
|
||||
ds_warn "update_projects has failed for $str\n";
|
||||
ds_verbose $@;
|
||||
$res++;
|
||||
unless ($self->config->no_fail) {
|
||||
ds_verbose "Use --no-fail to continue";
|
||||
return 1;
|
||||
}
|
||||
next;
|
||||
} elsif ($self->config->rename_head) {
|
||||
# 1 - creates new branch if --rename-head
|
||||
my $project = $self->api->project($id);
|
||||
if ($project->{default_branch} ne $self->config->dest_branch) {
|
||||
eval {
|
||||
$self->api->create_branch(
|
||||
$id,
|
||||
{
|
||||
ref => $self->config->source_branch,
|
||||
branch => $self->config->dest_branch,
|
||||
});
|
||||
};
|
||||
if ($@) {
|
||||
ds_debug $@ if ($@);
|
||||
$project = undef;
|
||||
}
|
||||
|
||||
eval {
|
||||
$self->api->edit_project($id,
|
||||
{ default_branch => $self->config->dest_branch });
|
||||
# delete old branch only if "create_branch" succeed
|
||||
if ($project) {
|
||||
$self->api->delete_branch($id,
|
||||
$self->config->source_branch);
|
||||
}
|
||||
};
|
||||
if ($@) {
|
||||
ds_warn "Branch rename has failed for $str\n";
|
||||
ds_verbose $@;
|
||||
$res++;
|
||||
unless ($self->config->no_fail) {
|
||||
ds_verbose "Use --no-fail to continue";
|
||||
return 1;
|
||||
}
|
||||
next;
|
||||
}
|
||||
} else {
|
||||
ds_verbose "Head already renamed for $str";
|
||||
}
|
||||
}
|
||||
ds_verbose "Project $str updated";
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
sub access_level {
|
||||
my ($self) = @_;
|
||||
my $user_id = $self->api->current_user()->{id};
|
||||
if ($self->group_id) {
|
||||
my $tmp = $self->api->all_group_members($self->group_id,
|
||||
{ user_ids => $user_id });
|
||||
unless ($tmp) {
|
||||
my $members
|
||||
= $self->api->paginator('all_group_members', $self->group_id,
|
||||
{ query => $user_id });
|
||||
while ($_ = $members->next) {
|
||||
return $_->{access_level} if ($_->{id} eq $user_id);
|
||||
}
|
||||
ds_warn "You're not member of this group";
|
||||
return 0;
|
||||
}
|
||||
return $tmp->[0]->{access_level};
|
||||
}
|
||||
return $GITLAB_ACCESS_LEVEL_OWNER;
|
||||
}
|
||||
|
||||
1;
|
Loading…
Add table
Add a link
Reference in a new issue