diff options
Diffstat (limited to 'sboremove')
| -rwxr-xr-x | sboremove | 109 | 
1 files changed, 64 insertions, 45 deletions
@@ -17,12 +17,6 @@ use File::Basename;  my $self = basename ($0); -sub get_requires ($) { -	my $location = get_sbo_location($_[0]); -	my $requires = get_from_info (LOCATION => $location, GET => 'REQUIRES'); -	return $requires; -} -  sub show_usage () {  	print <<EOF  Usage: $self [options] sbo @@ -44,6 +38,8 @@ Note: optional dependencies need to be removed separately.  EOF  } + +  my ($help, $vers, $non_int, $no_reqs, $force, @excluded);  GetOptions ( @@ -67,7 +63,31 @@ my $remove_queue;  my %required_by;  my @confirmed; -# Determine dependencies +sub get_requires ($) { +	my $location = get_sbo_location($_[0]); +	my $requires = get_from_info (LOCATION => $location, GET => 'REQUIRES'); +	return $requires; +} + +sub get_required_by ($) { +	my $pkg = $_[0]; +	my @dep_of = (); +	if ( $required_by{$pkg} ) { +		for my $req_by (@{$required_by{$pkg}}) { +			unless ($req_by ~~ @confirmed) { +				push (@dep_of, $req_by); +			} +		} +	} +	return join(" ", @dep_of); +} + +sub confirm_remove ($) { +	unless ($_[0] ~~ @confirmed) { +		push(@confirmed, $_[0]); +	} +} +# Determine dependencies of root package  unless ($no_reqs) {  	$remove_queue = get_build_queue($rootpkg);  	@$remove_queue = reverse(@$remove_queue); @@ -75,9 +95,8 @@ unless ($no_reqs) {  	push(@$remove_queue, $rootpkg);  } -  my $inst_names; -# Determine required by +# Determine required by for all installed sbo's  unless ($force) {  	my $installed = get_installed_sbos;  	$inst_names = get_inst_names $installed; @@ -104,52 +123,52 @@ if ($inst_names) {  	}  	$remove_queue = \@temp;  } - -my $queue = join(" ", @$remove_queue); -say "Remove: $queue\n"; - -# separate ignored packages from confirmed.  -my $ignore; -my %ignore_data; -for my $pkg (@$remove_queue) { -	$ignore = 0; -	while ( my ($key, $value) = each(%required_by) ) { -		if ( $key eq $pkg ) { -			for my $v (@$value) { -				unless ($v ~~ @confirmed) { -					$ignore = 1; -					push(@{$ignore_data{$key}}, $v); -				} -			} -		} +if ( $non_int) { +	my $ignore; +	for my $pkg (@$remove_queue) { +		$ignore = 0; +		while ( my ($key, $value) = each(%required_by) ) { +			if ( $key eq $pkg ) { +	      			for my $v (@$value) { +	        			unless ($v ~~ @confirmed) { +	          				$ignore = 1; +	        			} +	      			} +	    		} +	  	} +	  	unless ($ignore) { +	    		confirm_remove $pkg; +	  	}  	} -	unless ($ignore) { -		push(@confirmed, $pkg); -	} -} - -# Show ignored packages -my $ignore_count = keys(%ignore_data); -if ($ignore_count) { -	say "Ignoring $ignore_count package(s)"; -	while ( my ($key, $value) = each(%ignore_data) ) { -		print "$key : required by"; -		for my $v (@$value) { -			print " $v"; +} else { +	for my $pkg (@$remove_queue) { +		say $pkg; +		my $req_by_line = get_required_by $pkg; +		my $default = "y"; +		if ( $req_by_line ) { +			say "required by : $req_by_line"; +			$default = "n";  +		} +		print "Remove? [$default] : "; +		my $userin = <STDIN>; +		chomp($userin); +		$userin = $default unless $userin; +		if ($userin =~ /^[Yy]/) { +			confirm_remove $pkg; +			say "* added $pkg to remove queue\n"; +		} else { +			say "* ignoring $pkg\n"  		} -		print "\n";  	} -	print "\n";  } -  # Show remove queue  my $remove_count = @confirmed;  if ($remove_count) {  	say "Removing $remove_count package(s)";  	for my $pkg (@confirmed) { -		print "$pkg\n"; +		print "$pkg ";  	} -	print "\n";	 +	say "\n";	  } else {  	say "Nothing to remove.";  	exit 0;  | 
