From deffb1b1cd2b2d593384969a5250ac9684e8f938 Mon Sep 17 00:00:00 2001 From: Maarten Vanraes Date: Wed, 18 May 2016 01:12:58 +0200 Subject: Swap: adjust to new PartLink system --- lib/ManaTools/Shared/disk_backend/Plugin/Swap.pm | 64 +++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/lib/ManaTools/Shared/disk_backend/Plugin/Swap.pm b/lib/ManaTools/Shared/disk_backend/Plugin/Swap.pm index 9f1da86f..3953dd44 100644 --- a/lib/ManaTools/Shared/disk_backend/Plugin/Swap.pm +++ b/lib/ManaTools/Shared/disk_backend/Plugin/Swap.pm @@ -98,7 +98,26 @@ override ('probe', sub { ; while (my $line = ) { my @fields = split(/[ \t\r\n]+/, $line); - my $part = $self->parent->mkpart('Swap', {path => $fields[0], plugin => $self}); + + # look or create the part + my $part = $self->parent->trypart(ManaTools::Shared::disk_backend::Part->LoadedState, sub { + my $part = shift; + my $parameters = shift; + return ($part->path() eq $parameters->{path}); + }, 'Swap', {path => $fields[0], plugin => $self, loaded => undef, saved => undef}); + + # look for the parent part if not set + if (!$part->has_link(undef, 'parent')) { + my @stat = stat($fields[0]); + if (($stat[2] >> 13) == 3) { + my $dev = $stat[6]; + my $minor = $dev % 256; + my $major = int (($dev - $minor) / 256); + my @parents = $self->parent->findpartprop(undef, 'dev', $major .':'. $minor); + $part->add_taglink($parents[0], 'parent') if (scalar(@parents) > 0); + } + } + $part->prop('filename', $fields[0]); $part->prop('swaptype', $fields[1]); $part->prop('size', $fields[2]); @@ -197,4 +216,47 @@ class_has '+out_restriction' => ( } ); +class_has '+order' => ( + default => sub { + sub { + my $self = shift; + my $part = shift; + return ($self->prop('priority') <=> $part->prop('priority')); + } + } +); + +class_has '+restrictions' => ( + default => sub { + return { + parent => sub { + my $self = shift; + my $part = shift; + return $part->does('ManaTools::Shared::disk_backend::BlockDevice') || $part->does('ManaTools::Shared::disk_backend::FileRole'); + }, + # TODO: memory Part? + child => sub { + my $self = shift; + my $part = shift; + return 0; + }, + sibling => sub { + my $self = shift; + my $part = shift; + return $part->isa('ManaTools::Shared::disk_backend::Part::Swap'); + }, + previous => sub { + my $self = shift; + my $part = shift; + return $part->isa('ManaTools::Shared::disk_backend::Part::Swap'); + }, + next => sub { + my $self = shift; + my $part = shift; + return $part->isa('ManaTools::Shared::disk_backend::Part::Swap'); + }, + } + } +); + 1; -- cgit v1.2.1