From efe47381c599b07e4c7bbdb2e91e8090a541c887 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 17:53:52 +0200 Subject: Adding upstream version 2.23.4+deb12u1. Signed-off-by: Daniel Baumann --- lib/Devscripts/Salsa/checkout.pm | 79 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 lib/Devscripts/Salsa/checkout.pm (limited to 'lib/Devscripts/Salsa/checkout.pm') diff --git a/lib/Devscripts/Salsa/checkout.pm b/lib/Devscripts/Salsa/checkout.pm new file mode 100644 index 0000000..c3b5fe5 --- /dev/null +++ b/lib/Devscripts/Salsa/checkout.pm @@ -0,0 +1,79 @@ +# Clones or updates a repository using gbp +# TODO: git-dpm ? +package Devscripts::Salsa::checkout; + +use strict; +use Devscripts::Output; +use Devscripts::Utils; +use Dpkg::IPC; +use Moo::Role; + +with "Devscripts::Salsa::Repo"; + +sub checkout { + my ($self, @repos) = @_; + unless (@repos or $self->config->all or $self->config->all_archived) { + ds_warn "Usage $0 checkout <--all|--all-archived|names>"; + return 1; + } + if (@repos and $self->config->all) { + ds_warn "--all with a reponame makes no sense"; + return 1; + } + if (@repos and $self->config->all_archived) { + ds_warn "--all-archived with a reponame makes no sense"; + return 1; + } + # If --all is asked, launch all projects + @repos = map { $_->[1] } $self->get_repo(0, @repos) unless (@repos); + my $cdir = `pwd`; + chomp $cdir; + my $res = 0; + foreach (@repos) { + my $path = $self->project2path($_); + s#.*/##; + if (-d $_) { + chdir $_; + ds_verbose "Updating existing checkout in $_"; + spawn( + exec => ['gbp', 'pull', '--pristine-tar'], + wait_child => 1, + nocheck => 1, + ); + if ($?) { + if ($self->config->no_fail) { + print STDERR "gbp pull fails in $_, " + . "continuing since --no-fail is set\n"; + $res++; + } else { + ds_warn "gbp pull failed in $_\n"; + return 1; + } + } + chdir $cdir; + } else { + spawn( + exec => [ + 'gbp', 'clone', + '--all', $self->config->git_server_url . $path . ".git" + ], + wait_child => 1, + nocheck => 1, + ); + if ($?) { + if ($self->config->no_fail) { + print STDERR "gbp clone fails in $_, " + . "continuing since --no-fail is set\n"; + $res++; + } else { + ds_warn "gbp clone failed for $_\n"; + return 1; + } + } + ds_warn "$_ ready in $_/"; + } + } + return $res; +} + +1; -- cgit v1.2.3