Work on repo management

This commit is contained in:
Jamie Cameron
2019-03-09 23:14:30 -08:00
parent 364426e542
commit 0fea5b9078
4 changed files with 99 additions and 1 deletions

View File

@@ -255,6 +255,7 @@ if ($has_repos) {
}
# Form to add a repo
# XXX
print &ui_tabs_end_tab("tab", "repos");
}

View File

@@ -129,4 +129,14 @@ system_csw=CSW (Blastwave)
system_webmin=Webmin module
system_usermin=Usermin module
system_tgz=Webmin or Usermin tar.gz
repos_err_disable=Failed to disable repositories
repos_err_enable=Failed to enable repositories
repos_err_delete=Failed to delete repositories
repos_ebutton=No button clicked!
repos_enone=None selected
repos_title=Delete Repositories
repos_rusure=Are you sure you want to delete the $1 selected package repositories? Packages installed from them will still be available, but may not be updatable.
repos_ok=Delete Now
__norefs=1

View File

@@ -0,0 +1,52 @@
#!/usr/local/bin/perl
# Delete, enable or disable repositories
require './package-updates-lib.pl';
&ReadParse();
$mode = $in{'disable'} ? 'disable' :
$in{'enable'} ? 'enable' :
$in{'delete'} ? 'delete' : undef;
$mode || &error($text{'repos_ebutton'});
&error_setup($text{'repos_err_'.$mode});
%d = map { $_, 1 } split(/\0/, $in{'d'});
# Get the repos being updated
@repos = &software::list_package_repos();
@delrepos = grep { $d{$_->{'id'}} } @repos;
@delrepos || &error($text{'repos_enone'});
@delrepos = sort { $b->{'line'} <=> $a->{'line'} } @delrepos;
if ($mode eq 'enable' || $mode eq 'disable') {
# Enable or disable
foreach my $repo (@delrepos) {
&software::enable_package_repo($repo, $mode eq 'enable');
}
&webmin_log($mode, 'repos', scalar(@delrepos));
&redirect("index.cgi?tab=repos");
}
else {
# Delete, but ask first
if ($in{'confirm'}) {
foreach my $repo (@delrepos) {
&software::delete_package_repo($repo);
}
&webmin_log('delete', 'repos', scalar(@delrepos));
&redirect("index.cgi?tab=repos");
}
else {
&ui_print_header(undef, $text{'repos_title'}, "");
print &ui_confirmation_form(
"save_repos.cgi",
&text('repos_rusure', scalar(@delrepos)),
[ [ 'delete', 1 ],
map { [ 'd', $_->{'id'} ] } @delrepos,
],
[ [ 'confirm', $text{'repos_ok'} ] ],
);
print &ui_form_end("index.cgi?tab=repos",
$text{'index_return'});
}
}

View File

@@ -389,7 +389,8 @@ foreach my $repo (@rv) {
$name =~ s/\s*\$[a-z0-9]+//gi;
$repo->{'name'} = $repo->{'id'}." (".$name.")";
$repo->{'url'} = $repo->{'raw'}->{'baseurl'};
$repo->{'enabled'} = $repo->{'raw'}->{'enabled'};
$repo->{'enabled'} = defined($repo->{'raw'}->{'enabled'}) ?
$repo->{'raw'}->{'enabled'} : 1;
}
return @rv;
@@ -399,8 +400,42 @@ sub create_package_repo
{
}
# delete_package_repo(&repo)
# Delete a repository from it's config file. Does not delete the file even if
# empty, to prevent it from being re-created if it came from an RPM package.
sub delete_package_repo
{
my ($repo) = @_;
&lock_file($repo->{'file'});
my $lref = &read_file_lines($repo->{'file'});
splice(@$lref, $repo->{'line'}, $repo->{'eline'}-$repo->{'line'}+1);
&flush_file_lines($repo->{'file'});
&unlock_file($repo->{'file'});
}
# enable_package_repo(&repo, enable?)
# Enable or disable a repository
sub enable_package_repo
{
my ($repo, $enable) = @_;
&lock_file($repo->{'file'});
my $lref = &read_file_lines($repo->{'file'});
my $e = "enabled=".($enable ? 1 : 0);
if (defined($repo->{'raw'}->{'enabled'})) {
# There's a line to update already
for(my $i=$repo->{'line'}; $i<=$repo->{'eline'}; $i++) {
if ($lref->[$i] =~ /^enabled=/) {
$lref->[$i] = $e;
last;
}
}
}
else {
# Need to add a line
splice(@$lref, $repo->{'eline'}, 0, $e);
}
&flush_file_lines($repo->{'file'});
&unlock_file($repo->{'file'});
}
1;