mirror of
https://github.com/webmin/webmin.git
synced 2026-05-04 14:20:31 +01:00
Work on repo management
This commit is contained in:
@@ -255,6 +255,7 @@ if ($has_repos) {
|
||||
}
|
||||
|
||||
# Form to add a repo
|
||||
# XXX
|
||||
|
||||
print &ui_tabs_end_tab("tab", "repos");
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
52
package-updates/save_repos.cgi
Normal file
52
package-updates/save_repos.cgi
Normal 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'});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user