aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaarten Vanraes <alien@mageia.org>2016-08-06 14:33:08 +0200
committerMaarten Vanraes <alien@mageia.org>2016-08-06 14:33:08 +0200
commit10404b2a580be87ed7fbd5dbb25d0f71bedb56cd (patch)
tree02f9be2ba154ac47822b6e325884b395ce791d9b
parentb30d967dc49238fcb1e20156bc3d2f53111e17c8 (diff)
downloadmanatools-10404b2a580be87ed7fbd5dbb25d0f71bedb56cd.tar
manatools-10404b2a580be87ed7fbd5dbb25d0f71bedb56cd.tar.gz
manatools-10404b2a580be87ed7fbd5dbb25d0f71bedb56cd.tar.bz2
manatools-10404b2a580be87ed7fbd5dbb25d0f71bedb56cd.tar.xz
manatools-10404b2a580be87ed7fbd5dbb25d0f71bedb56cd.zip
Mountable: allow to get mountsource in order to match later
-rw-r--r--lib/ManaTools/Shared/disk_backend/Mountable.pm33
-rw-r--r--lib/ManaTools/Shared/disk_backend/Plugin/Btrfs.pm15
-rw-r--r--lib/ManaTools/Shared/disk_backend/Plugin/Extfs.pm11
-rw-r--r--lib/ManaTools/Shared/disk_backend/Plugin/Mount.pm11
4 files changed, 70 insertions, 0 deletions
diff --git a/lib/ManaTools/Shared/disk_backend/Mountable.pm b/lib/ManaTools/Shared/disk_backend/Mountable.pm
index 33cb1463..441333e2 100644
--- a/lib/ManaTools/Shared/disk_backend/Mountable.pm
+++ b/lib/ManaTools/Shared/disk_backend/Mountable.pm
@@ -61,6 +61,39 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
use Moose::Role;
+requires '_get_mount_source';
+
+has 'mountsource' => (
+ is => 'ro',
+ isa => 'Maybe[Str]',
+);
+
+around 'mountsource' => sub {
+ my $orig = shift;
+ my $self = shift;
+
+ return $self->_get_mount_source();
+};
+
+has 'mountsourcepath' => (
+ is => 'ro',
+ isa => 'Str',
+ default => '/',
+);
+
+sub mountsourcedevice {
+ my $self = shift;
+ my $mountsource = $self->mountsource();
+ my @s = stat($mountsource);
+ # check if found and blockdevice
+ return $mountsource if (scalar(@s) < 7 || ($s[2] >> 12) != 6);
+
+ # get the major and minor
+ my $minor = $s[6] % 256;
+ my $major = int (($s[6] - $minor) / 256);
+ return $major .':'. $minor;
+}
+
#=============================================================
=head2 find_path
diff --git a/lib/ManaTools/Shared/disk_backend/Plugin/Btrfs.pm b/lib/ManaTools/Shared/disk_backend/Plugin/Btrfs.pm
index 508a298d..9ee2a06e 100644
--- a/lib/ManaTools/Shared/disk_backend/Plugin/Btrfs.pm
+++ b/lib/ManaTools/Shared/disk_backend/Plugin/Btrfs.pm
@@ -228,6 +228,21 @@ extends 'ManaTools::Shared::disk_backend::Part';
use MooseX::ClassAttribute;
+with 'ManaTools::Shared::disk_backend::Mountable';
+
+sub _get_mount_source {
+ my $self = shift;
+ my $fs = $self->fs();
+
+ # TODO: multiple parents
+ # get parent partlink (which should be a blockdevice anyway)
+ my $parent = $fs->find_part(undef, 'parent');
+ return undef if (!defined $parent);
+
+ # return parent's devicepath
+ return $parent->devicepath();
+}
+
class_has '+type' => (
default => 'BtrfsVol'
);
diff --git a/lib/ManaTools/Shared/disk_backend/Plugin/Extfs.pm b/lib/ManaTools/Shared/disk_backend/Plugin/Extfs.pm
index 4dc6de27..84f8aca4 100644
--- a/lib/ManaTools/Shared/disk_backend/Plugin/Extfs.pm
+++ b/lib/ManaTools/Shared/disk_backend/Plugin/Extfs.pm
@@ -181,6 +181,17 @@ use MooseX::ClassAttribute;
with 'ManaTools::Shared::disk_backend::Mountable';
+sub _get_mount_source {
+ my $self = shift;
+
+ # get parent partlink (which should be a blockdevice anyway)
+ my $parent = $self->find_part(undef, 'parent');
+ return undef if (!defined $parent);
+
+ # return parent's devicepath
+ return $parent->devicepath();
+}
+
class_has '+type' => (
default => 'Extfs'
);
diff --git a/lib/ManaTools/Shared/disk_backend/Plugin/Mount.pm b/lib/ManaTools/Shared/disk_backend/Plugin/Mount.pm
index f93c4e6d..96aa6227 100644
--- a/lib/ManaTools/Shared/disk_backend/Plugin/Mount.pm
+++ b/lib/ManaTools/Shared/disk_backend/Plugin/Mount.pm
@@ -567,6 +567,7 @@ extends 'ManaTools::Shared::disk_backend::Part';
use MooseX::ClassAttribute;
with 'ManaTools::Shared::disk_backend::FileSystem';
+with 'ManaTools::Shared::disk_backend::Mountable';
class_has '+type' => (
default => 'UnknownFS'
@@ -589,5 +590,15 @@ class_has '+restrictions' => (
}
);
+sub _get_mount_source {
+ my $self = shift;
+
+ # get parent partlink (which should be a blockdevice anyway)
+ my $parent = $self->find_part(undef, 'parent');
+ return undef if (!defined $parent);
+
+ # return parent's devicepath
+ return $parent->devicepath();
+}
1;