$OpenBSD: patch-lib_Rex_Pkg_OpenBSD_pm,v 1.1.1.1 2019/02/21 04:54:50 afresh1 Exp $

Index: lib/Rex/Pkg/OpenBSD.pm
--- lib/Rex/Pkg/OpenBSD.pm.orig
+++ lib/Rex/Pkg/OpenBSD.pm
@@ -11,18 +11,58 @@ use warnings;
 
 our $VERSION = '1.6.0'; # VERSION
 
-use Rex::Pkg::NetBSD;
+use Rex::Helper::Run;
+use Rex::Commands::File;
+use Rex::Pkg::Base;
+use base qw(Rex::Pkg::Base);
 
-use base qw(Rex::Pkg::NetBSD);
-
 sub new {
   my $that  = shift;
   my $proto = ref($that) || $that;
-  my $self  = $that->SUPER::new(@_);
+  my $self  = $proto->SUPER::new(@_);
 
   bless( $self, $proto );
 
+  $self->{commands} = {
+    install         => '/usr/sbin/pkg_add %s',
+    install_version => '/usr/sbin/pkg_add %s-%s',
+    remove          => '/usr/sbin/pkg_delete %s',
+  };
+
   return $self;
+}
+
+sub remove {
+  my ( $self, $pkg ) = @_;
+
+  my ($pkg_found) = grep { $_->{"name"} eq "$pkg" } $self->get_installed();
+  my $pkg_version = $pkg_found->{"version"};
+
+  return $self->SUPER::remove("$pkg-$pkg_version");
+}
+
+sub get_installed {
+  my ($self) = @_;
+
+  my @lines = i_run "/usr/sbin/pkg_info";
+
+  my @pkg;
+
+  for my $line (@lines) {
+    my ( $pkg_name_v, $descr ) = split( /\s/, $line, 2 );
+
+    my ( $pkg_name, $pkg_version ) = ( $pkg_name_v =~ m/^(.*)-(.*?)$/ );
+
+    push(
+      @pkg,
+      {
+        name    => $pkg_name,
+        version => $pkg_version,
+      }
+    );
+  }
+
+  return @pkg;
 }
 
 1;
