pf-tools commit: r695 [ccaillet-guest] - in /trunk: debian/changelog lib/PFTools/Net.pm lib/PFTools/Packages.pm lib/PFTools/Update.pm

parmelan-guest at users.alioth.debian.org parmelan-guest at users.alioth.debian.org
Tue Feb 10 15:36:38 UTC 2009


Author: ccaillet-guest
Date: Tue Feb 10 15:36:38 2009
New Revision: 695

URL: http://svn.debian.org/wsvn/pf-tools/?sc=1&rev=695
Log:
Integration of PFTools::Packages into Update.pm (need testing)

Modified:
    trunk/debian/changelog
    trunk/lib/PFTools/Net.pm
    trunk/lib/PFTools/Packages.pm
    trunk/lib/PFTools/Update.pm

Modified: trunk/debian/changelog
URL: http://svn.debian.org/wsvn/pf-tools/trunk/debian/changelog?rev=695&op=diff
==============================================================================
--- trunk/debian/changelog (original)
+++ trunk/debian/changelog Tue Feb 10 15:36:38 2009
@@ -28,8 +28,9 @@
     HOSTTYPE part
   * Introducing an abstraction layer for packages : Packages.pm. Need to
     integrate those functions into Update.pm
-
- -- Christophe Caillet <quadchris at free.fr>  Fri, 06 Feb 2009 17:20:22 +0100
+  * Integration of PFTools::Packages into Update.pm (need testing)
+
+ -- Christophe Caillet <quadchris at free.fr>  Tue, 10 Feb 2009 16:34:07 +0100
 
 pf-tools (0.33.1-1) unstable; urgency=low
 

Modified: trunk/lib/PFTools/Net.pm
URL: http://svn.debian.org/wsvn/pf-tools/trunk/lib/PFTools/Net.pm?rev=695&op=diff
==============================================================================
--- trunk/lib/PFTools/Net.pm (original)
+++ trunk/lib/PFTools/Net.pm Tue Feb 10 15:36:38 2009
@@ -80,18 +80,6 @@
 # Allowed deploymode
 my $ALLOWED_DEPLOYMODE = 'pf-tools|(debian|ubuntu)-installer' ;
 
-
-#=======================================================#
-#							#
-#	lib-net						#
-#							#
-#	Fonctions de configuration de la conf reseau	#
-#							#
-#	* Generation de fichier zone BIND		#
-#	* Generation de fichier zone DHCP		#
-#	* Generation de fichiers interfaces		#
-#							#
-#=======================================================#
 
 sub node2index {
     my ( $node, $pad ) = @_;

Modified: trunk/lib/PFTools/Packages.pm
URL: http://svn.debian.org/wsvn/pf-tools/trunk/lib/PFTools/Packages.pm?rev=695&op=diff
==============================================================================
--- trunk/lib/PFTools/Packages.pm (original)
+++ trunk/lib/PFTools/Packages.pm Tue Feb 10 15:36:38 2009
@@ -51,22 +51,24 @@
 $PKG_CMD->{'deb'}->{'compare'}	= 'LANG=C LC_ALL=C /usr/bin/dpkg --compare-versions' ;
 $PKG_CMD->{'rpm'}		= 'TODO' ;
 
+my $VERBOSE = 0 ;
+
 sub Get_pkg_status ($$) {
 	my ( $pkg_type, $pkg_name ) = @_ ;
 
 	my $result = {} ;
 	if ( ! defined $PKG_CMD->{$pkg_type} ) {
-		Warn ( $ERR_OPEN, "Unknown package type ".$pkg_type ) ;
-		return undef ;
-	}
-	elsif ( $pkg_type eq 'rpm' ) {
-		#TODO
-		Warn ( $ERR_OPEN, "Need to implement the RPM handler" ) ;
+		Warn ( $ERR_OPEN, "Unknown package type ".$pkg_type ) if ( $VERBOSE );
+		return undef ;
+	}
+	elsif ( $pkg_type eq 'rpm' ) {
+		#TODO
+		Warn ( $ERR_OPEN, "Need to implement the RPM handler" ) if ( $VERBOSE );
 		return undef ;
 	}
 	elsif ( $pkg_type eq 'deb' ) {
 		unless ( open ( PKG, $PKG_CMD->{$pkg_type}->{'status'}.' '.$pkg_name.' 2>/dev/null |' ) ) {
-			Warn ( $ERR_OPEN, "Unable to retrieve status for package ".$pkg_name ) ;
+			Warn ( $ERR_OPEN, "Unable to retrieve status for package ".$pkg_name ) if ( $VERBOSE );
 			return undef ;
 		}
 		while ( <PKG>) {
@@ -92,17 +94,17 @@
 	my ( $pkg_type ) = @_ ;
 
 	if ( ! defined $PKG_CMD->{$pkg_type} ) {
-		Warn ( $ERR_OPEN, "Unknown package type ".$pkg_type ) ;
-		return 0 ;
-	}
-	elsif ( $pkg_type eq 'rpm' ) {
-		#TODO
-		Warn ( $ERR_OPEN, "Need to implement the RPM handler" ) ;
+		Warn ( $ERR_OPEN, "Unknown package type ".$pkg_type ) if ( $VERBOSE );
+		return 0 ;
+	}
+	elsif ( $pkg_type eq 'rpm' ) {
+		#TODO
+		Warn ( $ERR_OPEN, "Need to implement the RPM handler" ) if ( $VERBOSE );
 		return 0 ;
 	}
 	elsif ( $pkg_type eq 'deb' ) {
 		if ( deferredlogsystem( $PKG_CMD->{$pkg_type}->{'update'} ) ) {
-			Warn( $ERR_OPEN, "Updating repository failed !" ) ;
+			Warn( $ERR_OPEN, "Updating repository failed !" ) if ( $VERBOSE );
 			return 0 ;
 		}
 	}
@@ -113,17 +115,17 @@
 	my ( $pkg_type, $pkg_name ) = @_ ;
 
 	if ( ! defined $PKG_CMD->{$pkg_type} ) {
-		Warn ( $ERR_OPEN, "Unknown package type ".$pkg_type ) ;
-		return 0 ;
-	}
-	elsif ( $pkg_type eq 'rpm' ) {
-		#TODO
-		Warn ( $ERR_OPEN, "Need to implement the RPM handler" ) ;
+		Warn ( $ERR_OPEN, "Unknown package type ".$pkg_type ) if ( $VERBOSE );
+		return 0 ;
+	}
+	elsif ( $pkg_type eq 'rpm' ) {
+		#TODO
+		Warn ( $ERR_OPEN, "Need to implement the RPM handler" ) if ( $VERBOSE );
 		return 0 ;
 	}
 	elsif ( $pkg_type eq 'deb' ) {
 		if ( deferredlogsystem ( $PKG_CMD->{$pkg_type}->{'purge'}." '".$pkg_name."'" ) ) {
-			Warn( $ERR_OPEN, "Purge du package ".$pkg_name." impossible" ) ;
+			Warn( $ERR_OPEN, "Unable to purge ".$pkg_name ) if ( $VERBOSE );
 			return 0 ;
 		}
 	}
@@ -135,17 +137,17 @@
 	my $dep_list ;
 
 	if ( ! defined $PKG_CMD->{$pkg_type} ) {
-		Warn ( $ERR_OPEN, "Unknown package type ".$pkg_type ) ;
-		return undef ;
-	}
-	elsif ( $pkg_type eq 'rpm' ) {
-		#TODO
-		Warn ( $ERR_OPEN, "Need to implement the RPM handler" ) ;
+		Warn ( $ERR_OPEN, "Unknown package type ".$pkg_type ) if ( $VERBOSE );
+		return undef ;
+	}
+	elsif ( $pkg_type eq 'rpm' ) {
+		#TODO
+		Warn ( $ERR_OPEN, "Need to implement the RPM handler" ) if ( $VERBOSE );
 		return undef ;
 	}
 	elsif ( $pkg_type eq 'deb' ) {
 		unless ( open( APTDEP, $PKG_CMD->{$pkg_type}->{'depends'}.' '.$pkg_name.' 2>/dev/null |' ) ) {
-			Warn ( $ERR_OPEN, "Unable to get depends for package ".$pkg_name ) ;
+			Warn ( $ERR_OPEN, "Unable to get depends for package ".$pkg_name ) if ( $VERBOSE );
 			return undef ;
 		}
 		while (<APTDEP>) {
@@ -177,17 +179,17 @@
 	my ( $installed, $available ) ;
 
 	if ( ! defined $PKG_CMD->{$pkg_type} ) {
-		Warn ( $ERR_OPEN, "Unknown package type ".$pkg_type ) ;
-		return undef ;
-	}
-	elsif ( $pkg_type eq 'rpm' ) {
-		#TODO
-		Warn ( $ERR_OPEN, "Need to implement the RPM handler" ) ;
+		Warn ( $ERR_OPEN, "Unknown package type ".$pkg_type ) if ( $VERBOSE );
+		return undef ;
+	}
+	elsif ( $pkg_type eq 'rpm' ) {
+		#TODO
+		Warn ( $ERR_OPEN, "Need to implement the RPM handler" ) if ( $VERBOSE );
 		return undef ;
 	}
 	elsif ( $pkg_type eq 'deb' ) {
 		unless ( open( APTPOLICY, $PKG_CMD->{$pkg_type}->{'policy'}.' '.$pkg_name.' 2>/dev/null |' ) ) {
-			Warn ( $ERR_OPEN, "Unable to get policy for package ".$pkg_name ) ;
+			Warn ( $ERR_OPEN, "Unable to get policy for package ".$pkg_name ) if ( $VERBOSE );
 			return undef ;
 		}
 		while ( <APTPOLICY> ) {
@@ -208,12 +210,12 @@
 	my ( $pkg_type, $pkg_name, $version1, $version2 ) = @_ ;
 
 	if ( ! defined $PKG_CMD->{$pkg_type} ) {
-		Warn ( $ERR_OPEN, "Unknown package type ".$pkg_type ) ;
-		return undef ;
-	}
-	elsif ( $pkg_type eq 'rpm' ) {
-		#TODO
-		Warn ( $ERR_OPEN, "Need to implement the RPM handler" ) ;
+		Warn ( $ERR_OPEN, "Unknown package type ".$pkg_type ) if ( $VERBOSE );
+		return undef ;
+	}
+	elsif ( $pkg_type eq 'rpm' ) {
+		#TODO
+		Warn ( $ERR_OPEN, "Need to implement the RPM handler" ) if ( $VERBOSE );
 		return undef ;
 	}
 	else {
@@ -235,18 +237,17 @@
 	my ( $pkg_type, $pkg_name ) = @_ ;
 
 	if ( ! defined $PKG_CMD->{$pkg_type} ) {
-		Warn ( $ERR_OPEN, "Unknown package type ".$pkg_type ) ;
-		return undef ;
-	}
-	elsif ( $pkg_type eq 'rpm' ) {
-		#TODO
-		Warn ( $ERR_OPEN, "Need to implement the RPM handler" ) ;
+		Warn ( $ERR_OPEN, "Unknown package type ".$pkg_type ) if ( $VERBOSE );
+		return undef ;
+	}
+	elsif ( $pkg_type eq 'rpm' ) {
+		#TODO
+		Warn ( $ERR_OPEN, "Need to implement the RPM handler" ) if ( $VERBOSE );
 		return undef ;
 	}
 	else {
 		if ( $pkg_type eq 'deb' ) {
 			if ( deferredlogsystem ( $PKG_CMD->{$pkg_type}->{'install'}." '".$pkg_name."'" ) ) {
-				Warn( $ERR_OPEN, "Installation de ".$pkg_name." impossible" ) ;
 				return 0 ;
 			}
 			return 1 ;

Modified: trunk/lib/PFTools/Update.pm
URL: http://svn.debian.org/wsvn/pf-tools/trunk/lib/PFTools/Update.pm?rev=695&op=diff
==============================================================================
--- trunk/lib/PFTools/Update.pm (original)
+++ trunk/lib/PFTools/Update.pm Tue Feb 10 15:36:38 2009
@@ -43,6 +43,7 @@
 
 use PFTools::Conf;
 use PFTools::Net;
+use PFTools::Packages;
 
 use Fcntl ':mode';
 
@@ -518,7 +519,9 @@
 };
 
 $FUNCTIONS{'dpkg-purge'} = sub {
-    my ( $S, $dest, $options ) = @_;
+    my ( $S, $dest, $options, $pkg_type ) = @_;
+
+    $pkg_type = 'deb' if ( ! defined $pkg_type ) ;
 
     my $name_filter = $S->{'name_filter'};
     if ($name_filter) {
@@ -536,25 +539,31 @@
 	$dest = $newdest;
     }
 
-    my $installed_version;
-
-    open( DPKG, $DPKG . ' -s ' . $dest . ' 2>/dev/null |' );
-    while (<DPKG>) {
-	if (/^Status:\s+/) {
-	    if ( !/^Status:\s+install\s+ok\s+installed\s*$/ ) {
-		$installed_version = 0;
-		last;
-	    }
-	}
-
-	if (/^Version:\s+(.+)\s*$/) {
-	    $installed_version = $1;
-	    last;
-	}
-    }
-    close(DPKG);
-
-    if ($installed_version) {
+#     my $installed_version;
+# 
+#     open( DPKG, $DPKG . ' -s ' . $dest . ' 2>/dev/null |' );
+#     while (<DPKG>) {
+# 	if (/^Status:\s+/) {
+# 	    if ( !/^Status:\s+install\s+ok\s+installed\s*$/ ) {
+# 		$installed_version = 0;
+# 		last;
+# 	    }
+# 	}
+# 
+# 	if (/^Version:\s+(.+)\s*$/) {
+# 	    $installed_version = $1;
+# 	    last;
+# 	}
+#     }
+#     close(DPKG);
+
+    my $status = Get_pkg_status ( $pkg_type, $dest ) ;
+    if ( ! defined $status ) {
+	Warn ( $ERR_OPEN, "Impossible d'obtenir le statut du paquet ".$dest ) ;
+	return 1;
+    }
+
+    if ( $status->{'installed'} ) {
 
 	if ( $options->{'verbose'} || $options->{'simul'} ) {
 	    Log("(action needed)");
@@ -565,10 +574,14 @@
 	Do_before_change( $S, $options ) && return 1;
 
 	if ( !$options->{'simul'} ) {
-	    if ( deferredlogsystem( $DPKG . " -P '" . $dest . "'" ) ) {
-		Warn( $ERR_OPEN,
-		    "Purge du package " . $dest . " impossible" );
-		return 1;
+# 	    if ( deferredlogsystem( $DPKG . " -P '" . $dest . "'" ) ) {
+# 		Warn( $ERR_OPEN,
+# 		    "Purge du package " . $dest . " impossible" );
+# 		return 1;
+# 	    }
+	    if ( ! Purge_pkg ( $pkg_type, $dest ) ) {
+		Warn ( $ERR_OPEN, "Une erreur est survenue lors de la purge du paquet ".$dest ) ;
+		return 1 ;
 	    }
 	}
 
@@ -595,29 +608,42 @@
 }
 
 $DEPENDS{'apt-get'} = sub {
-    my ( $S, $dest, $options ) = @_;
-
-    if ( aptupdate() ) {
+    my ( $S, $dest, $options, $pkg_type ) = @_;
+
+    $pkg_type = 'deb' if ( ! defined $pkg_type ) ;
+#     if ( aptupdate() ) {
+# 	return 1;
+#     }
+    if ( ! Update_pkg_repository ( $pkg_type ) ) {
 	return 1;
     }
 
-    open( APTDEP, $APT_GET_DEPENDS . ' install ' . $dest . ' 2>/dev/null |' );
-    while (<APTDEP>) {
-	if (m/^  (.*)$/) {
-	    my $pkg;
-	    foreach $pkg ( split( ' ', $1 ) ) {
-		if ( $pkg ne $dest ) {
-		    $S->{'depends'} .= " " . $pkg;
-		}
-	    }
-	}
-    }
-    close(APTDEP);
+#     open( APTDEP, $APT_GET_DEPENDS . ' install ' . $dest . ' 2>/dev/null |' );
+#     while (<APTDEP>) {
+# 	if (m/^  (.*)$/) {
+# 	    my $pkg;
+# 	    foreach $pkg ( split( ' ', $1 ) ) {
+# 		if ( $pkg ne $dest ) {
+# 		    $S->{'depends'} .= " " . $pkg;
+# 		}
+# 	    }
+# 	}
+#     }
+#     close(APTDEP);
+    my $deps = Get_pkg_depends ( $pkg_type, $dest ) ;
+    if ( ! defined $deps ) {
+	Warn ( $ERR_OPEN, "Impossible de recuperer les dependances du paquet ".$dest ) ;
+	return 1;
+    }
+    else {
+	$S->{'depends'} = $dest ;
+    }
 };
 
 $FUNCTIONS{'apt-get'} = sub {
-    my ( $S, $dest, $options ) = @_;
-
+    my ( $S, $dest, $options, $pkg_type ) = @_;
+
+    $pkg_type = 'deb' if ( ! defined $pkg_type ) ;
     my $installed_version;
     my $available_version;
     my $install;
@@ -640,36 +666,50 @@
 
     aptupdate();
 
-    open( APTPOLICY, $APT_POLICY . ' ' . $dest . ' 2>/dev/null |' );
-    while (<APTPOLICY>) {
-	if (m/^  Installed: (.*)$/) {
-	    $installed_version = $1;
-	    if ( $installed_version eq '' || $installed_version eq '(none)' )
-	    {
-		undef $installed_version;
-	    }
-	}
-	elsif (m/^  Candidate: (.*)$/) {
-	    $available_version = $1;
-	}
-    }
-    close(APTPOLICY);
-
-    if ( !defined($available_version) ) {
+#     open( APTPOLICY, $APT_POLICY . ' ' . $dest . ' 2>/dev/null |' );
+#     while (<APTPOLICY>) {
+# 	if (m/^  Installed: (.*)$/) {
+# 	    $installed_version = $1;
+# 	    if ( $installed_version eq '' || $installed_version eq '(none)' )
+# 	    {
+# 		undef $installed_version;
+# 	    }
+# 	}
+# 	elsif (m/^  Candidate: (.*)$/) {
+# 	    $available_version = $1;
+# 	}
+#     }
+#     close(APTPOLICY);
+
+    ( $installed_version, $available_version ) = Get_pkg_policy ( $pkg_type, $dest ) ;
+    
+#     if ( !defined($available_version) ) {
+# 	Warn( $ERR_OPEN, "Package " . $dest . " indisponible" );
+# 	return 1;
+#     }
+
+    if ( !defined ( $available_version ) ) {
 	Warn( $ERR_OPEN, "Package " . $dest . " indisponible" );
 	return 1;
     }
 
-    if (!defined($installed_version)
-	|| !deferredlogsystem(
-	          $DPKG
-		. ' --compare-versions '
-		. $installed_version . ' lt '
-		. $available_version
-	)
-	)
-    {
-	$install++;
+#     if (!defined($installed_version)
+# 	|| !deferredlogsystem(
+# 	          $DPKG
+# 		. ' --compare-versions '
+# 		. $installed_version . ' lt '
+# 		. $available_version
+# 	)
+# 	)
+#     {
+# 	$install++;
+#     }
+
+    if ( defined $installed_version ) {
+	my $compare = Cmp_pkg_version ( $pkg_type, $dest, $installed_version, $available_version ) ;
+	if ( defined $compare && $compare < 0 ) {
+	    $install++ ;
+	}
     }
 
     if ($install) {
@@ -734,12 +774,16 @@
 	}
 
 	if ( !$options->{'simul'} ) {
-	    if (deferredlogsystem(
-		    $install . " " . $APT_GET . " install '" . $dest . "'"
-		)
-		)
-	    {
-		Warn( $ERR_OPEN, "Installation de " . $dest . " impossible" );
+# 	    if (deferredlogsystem(
+# 		    $install . " " . $APT_GET . " install '" . $dest . "'"
+# 		)
+# 		)
+# 	    {
+# 		Warn( $ERR_OPEN, "Installation de " . $dest . " impossible" );
+# 		return 1;
+# 	    }
+	    if ( ! Install_pkg ( $pkg_type, $dest ) ) {
+	        Warn( $ERR_OPEN, "Installation de ".$dest." impossible" ) ;
 		return 1;
 	    }
 	}




More information about the pf-tools-commits mailing list