Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 10 Nov 2005 08:59:03 -0800 (PST)
From:      "Michael C. Shultz" <ringworm01@gmail.com>
To:        FreeBSD-gnats-submit@FreeBSD.org
Cc:        gerard@seibercom.net, ricardo_bsd@yahoo.com.br
Subject:   ports/88800: [MAINTAINER] sysutils/portmanager update
Message-ID:  <20051110165903.0536B130C22@ringworm.mechee.com>
Resent-Message-ID: <200511101710.jAAHAPAJ064180@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         88800
>Category:       ports
>Synopsis:       [MAINTAINER] sysutils/portmanager update
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          maintainer-update
>Submitter-Id:   current-users
>Arrival-Date:   Thu Nov 10 17:10:24 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator:     Michael C. Shultz
>Release:        FreeBSD 5.4-STABLE i386
>Organization:
>Environment:
System: FreeBSD ringworm.mechee.com 5.4-STABLE FreeBSD 5.4-STABLE #0: Fri Nov 4 06:35:37 PST 2005 root@ringworm.mechee.com:/usr5/obj/usr5/src/sys/RINGWORM5 i386


>Description:

	sysutils/portmanager update to 0.3.3_3

	a. Adds ability to stop programs like postfix
	from running during upgrade then restarts them
	afterwards. See pm-020.conf-example or man page
	for instructions

	b. Fixes reported bug where -slid option removes
	the wrong port

	c. May fix a reported segfault at:

	MGPMrCreateAllUpdateStatusDb.c:162

	since user didn't include portmanager version or 
	uname -a output can't be certain fix is good


>How-To-Repeat:

	N/A

>Fix:


--- portmanager-0.3.3_3.diff begins here ---
diff -ruN portmanager/Makefile portmanager-0.3.3_3/Makefile
--- portmanager/Makefile	Thu Nov 10 08:17:52 2005
+++ portmanager-0.3.3_3/Makefile	Thu Nov 10 08:06:29 2005
@@ -7,7 +7,7 @@
 
 PORTNAME=	portmanager
 PORTVERSION=	0.3.3
-PORTREVISION=	2
+PORTREVISION=	3
 CATEGORIES=	sysutils
 MASTER_SITES=	http://portmanager.sunsite.dk/distfiles/ \
 		${MASTER_SITE_SOURCEFORGE}
diff -ruN portmanager/files/patch-0.3.3_3 portmanager-0.3.3_3/files/patch-0.3.3_3
--- portmanager/files/patch-0.3.3_3	Wed Dec 31 16:00:00 1969
+++ portmanager-0.3.3_3/files/patch-0.3.3_3	Thu Nov 10 08:06:19 2005
@@ -0,0 +1,719 @@
+diff -ruN ../0.3.3_2/libMGPM/src/MGPMrCreateAllUpdateStatusDb.c ./libMGPM/src/MGPMrCreateAllUpdateStatusDb.c
+--- ../0.3.3_2/libMGPM/src/MGPMrCreateAllUpdateStatusDb.c	Tue Nov  8 17:05:25 2005
++++ ./libMGPM/src/MGPMrCreateAllUpdateStatusDb.c	Thu Nov 10 07:57:49 2005
+@@ -159,7 +159,9 @@
+ 	availablePortsDbIDX	= 1;
+ 	while( availablePortsDbIDX < availablePortsDbQTY )
+ 	{
+-		if( strncmp( MGdbGet( property->availablePortsDb, availablePortsDbIDX, property->fieldAvailablePortsDbFlag ), "0", 1 ) == 0 )
++		if( MGdbGet( property->availablePortsDb, availablePortsDbIDX, property->fieldAvailablePortsDbFlag )
++			&&
++			strncmp( MGdbGet( property->availablePortsDb, availablePortsDbIDX, property->fieldAvailablePortsDbFlag ), "0", 1 ) == 0 )
+ 		{
+ 			strcpy( availablePortDir, MGdbGet( property->availablePortsDb, availablePortsDbIDX, property->fieldAvailablePortsDbPortDir ) );
+ 			strcpy( availablePortName, MGdbGet( property->availablePortsDb, availablePortsDbIDX, property->fieldAvailablePortsDbPortName ) );
+diff -ruN ../0.3.3_2/libMGPM/src/MGPMrReadConfigure.c ./libMGPM/src/MGPMrReadConfigure.c
+--- ../0.3.3_2/libMGPM/src/MGPMrReadConfigure.c	Tue Nov  8 17:05:25 2005
++++ ./libMGPM/src/MGPMrReadConfigure.c	Wed Nov  9 20:01:21 2005
+@@ -93,6 +93,24 @@
+ 		strcat( command, property->configConfFileName );
+ 		system( command );
+ 	}
++	strcpy( command, "chmod 0600 " );
++	strcat( command, property->configConfFileName );
++	system( command );
++
++	strcpy( command, "chmod 0600 " );
++	strcat( command, property->configConfFileName );
++	strcat( command, ".SAMPLE " );
++	system( command );
++
++	strcpy( command, "chown root:wheel " );
++	strcat( command, property->configConfFileName );
++	system( command );
++
++	strcpy( command, "chown root:wheel " );
++	strcat( command, property->configConfFileName );
++	strcat( command, ".SAMPLE " );
++	system( command );
++
+ 	/*********************/
+ 	/* parse pm-020.conf */
+ 	/*********************/
+diff -ruN ../0.3.3_2/libMGPM/src/MGPMrShowLeavesDelete.c ./libMGPM/src/MGPMrShowLeavesDelete.c
+--- ../0.3.3_2/libMGPM/src/MGPMrShowLeavesDelete.c	Tue Nov  8 17:05:25 2005
++++ ./libMGPM/src/MGPMrShowLeavesDelete.c	Thu Nov 10 01:03:17 2005
+@@ -30,17 +30,17 @@
+ #include	<libMGPM.h>
+ #include	<sgtty.h>
+ 
+-int	nuke( char* leafPortDirPtr );
++int	nuke( char* leafPortDir );
+ int	rebuildDb( structProperty* property, int* installedPortsDbQTY );
+-int	removePort( structProperty* property, char* leafPortNamePtr, int installedPortsDbIDX );
++int	removePort( structProperty* property, char* leafPortName, int installedPortsDbIDX );
+ 
+ int	MGPMrShowLeavesDelete( structProperty* property )
+ {
+ 	char	exact[]			= "exact";
+ 	char	id[]			= "MGPMrShowLeavesDelete";
+ 	char*	command			= NULL;
+-	char*	leafPortDirPtr		= NULL;
+-	char*	leafPortNamePtr		= NULL;
++	char*	leafPortDir		= NULL;
++	char*	leafPortName		= NULL;
+ 	char*	pkgDescFile		= NULL;
+ 	char*	portDirPtr		= NULL;
+ 	char*	portTypePtr		= NULL;
+@@ -49,8 +49,10 @@
+ 	int	installedPortsDbQTY	= 0;
+ 	int	key			= 1;
+ 	
+-	pkgDescFile	= (char*)calloc( bufferSize, 1 );
+-	command		= (char*)calloc( bufferSize, 1 );
++	command		= calloc( bufferSize, 1 );
++	leafPortDir	= calloc( bufferSize, 1 );
++	leafPortName	= calloc( bufferSize, 1 );
++	pkgDescFile	= calloc( bufferSize, 1 );
+ 
+ 	if( ( property->ignoreDb = MGdbOpen( property->ignoreDbFileName ) ) == NULL )
+ 	{
+@@ -84,8 +86,8 @@
+ 	installedPortsDbIDX	= 1;
+ 	while( installedPortsDbIDX < installedPortsDbQTY )
+ 	{
+-		leafPortDirPtr	= MGdbGet( property->installedPortsDb, installedPortsDbIDX, property->fieldInstalledPortsDbPortDir );		
+-		leafPortNamePtr	= MGdbGet( property->installedPortsDb, installedPortsDbIDX, property->fieldInstalledPortsDbPortName );		
++		strcpy( leafPortDir, MGdbGet( property->installedPortsDb, installedPortsDbIDX, property->fieldInstalledPortsDbPortDir ) );
++		strcpy( leafPortName, MGdbGet( property->installedPortsDb, installedPortsDbIDX, property->fieldInstalledPortsDbPortName ) );		
+ 
+ 		/*
+ 		 * check for no run depends
+@@ -93,7 +95,7 @@
+ 		MGdbGoTop( property->dependencyPortsDb );
+ 		portDirPtr	= MGdbSeek( property->dependencyPortsDb,
+ 					property->fieldDependencyDbDependencyPortDir,
+-					leafPortDirPtr,
++					leafPortDir,
+ 					property->fieldDependencyDbDependencyPortDir,
+ 					exact );
+ 
+@@ -105,7 +107,7 @@
+ 			MGdbGoTop( property->availableDependenciesDb );
+ 			portTypePtr	= MGdbSeek( property->availableDependenciesDb,
+ 						property->fieldAvailableDependenciesDbDependencyDir,
+-						leafPortDirPtr,
++						leafPortDir,
+ 						property->fieldAvailableDependenciesDbDependType,
+ 						exact );
+ 
+@@ -113,7 +115,7 @@
+ 			{ 
+ 				portTypePtr	= MGdbSeek( property->availableDependenciesDb,
+ 							property->fieldAvailableDependenciesDbDependencyDir,
+-							leafPortDirPtr,
++							leafPortDir,
+ 							property->fieldAvailableDependenciesDbDependType,
+ 							exact );
+ 			}
+@@ -132,11 +134,11 @@
+ 				fprintf( stdout, "however, other ports may rely on these to build.\"\n" );
+ 				fprintf( stdout, "%s\n", SINGLE_LINES );
+ 
+-				fprintf( stdout, "%s dir -=> %s\n\n", leafPortNamePtr, leafPortDirPtr );
++				fprintf( stdout, "%s dir -=> %s\n\n", leafPortName, leafPortDir );
+ 				while( fflush( stdout ) );
+ 
+ 				strcpy( pkgDescFile, PORTSDIR );
+-				strcat( pkgDescFile, leafPortDirPtr );
++				strcat( pkgDescFile, leafPortDir );
+ 				strcat( pkgDescFile, "/pkg-descr" );
+ 
+ 				if( MGrIfFileExist( pkgDescFile ) )
+@@ -150,7 +152,7 @@
+ 				{
+ 					strcpy( command, "grep COMMENT " );
+ 					strcat( command, PORTSDIR );
+-					strcat( command, leafPortDirPtr );
++					strcat( command, leafPortDir );
+ 					strcat( command, "/Makefile" );
+ 					system( command );
+ 				}
+@@ -167,48 +169,48 @@
+ 				}
+ 				case	KEY_SPACE:
+ 				{
+-					MGdbAdd( property->ignoreDb, leafPortDirPtr, "-slid <SPACE> skipped", NULL );
+-					fprintf( stdout, "<SPACE> Skipping %s\n\n", leafPortNamePtr );
++					MGdbAdd( property->ignoreDb, leafPortDir, "-slid <SPACE> skipped", NULL );
++					fprintf( stdout, "<SPACE> Skipping %s\n\n", leafPortName );
+ 					break;
+ 				}
+ 				case	KEY_n:
+ 				{
+ 					/* nuke() */
+-					fprintf( stdout, "<n> Nuking %s\n\n", leafPortNamePtr );
+-					removePort( property, leafPortNamePtr, installedPortsDbIDX );
+-					nuke( leafPortDirPtr );
++					fprintf( stdout, "<n> Nuking %s\n\n", leafPortName );
++					removePort( property, leafPortName, installedPortsDbIDX );
++					nuke( leafPortDir );
+ 					rebuildDb( property, &installedPortsDbQTY );
+ 					break;
+ 				}
+ 				case	KEY_N:
+ 				{
+ 					/* nuke() */
+-					fprintf( stdout, "<N> Nuking %s\n\n", leafPortNamePtr );
+-					removePort( property, leafPortNamePtr, installedPortsDbIDX );
+-					nuke( leafPortDirPtr );
++					fprintf( stdout, "<N> Nuking %s\n\n", leafPortName );
++					removePort( property, leafPortName, installedPortsDbIDX );
++					nuke( leafPortDir );
+ 					rebuildDb( property, &installedPortsDbQTY );
+ 					break;
+ 				}
+ 				case	KEY_x:
+ 				{
+ 					/* delete() */
+-					fprintf( stdout, "<x> Removing %s\n\n", leafPortNamePtr );
+-					removePort( property, leafPortNamePtr, installedPortsDbIDX );
++					fprintf( stdout, "<x> Removing %s\n\n", leafPortName );
++					removePort( property, leafPortName, installedPortsDbIDX );
+ 					rebuildDb( property, &installedPortsDbQTY );
+ 					break;
+ 				}
+ 				case	KEY_X:
+ 				{
+ 					/* delete() */
+-					fprintf( stdout, "<X> Removing %s\n\n", leafPortNamePtr );
+-					removePort( property, leafPortNamePtr, installedPortsDbIDX );
++					fprintf( stdout, "<X> Removing %s\n\n", leafPortName );
++					removePort( property, leafPortName, installedPortsDbIDX );
+ 					rebuildDb( property, &installedPortsDbQTY );
+ 					break;
+ 				}
+ 				default:
+ 				{
+-					MGdbAdd( property->ignoreDb, leafPortDirPtr, "-slid <DEFAULT> skipped", NULL );
+-					fprintf( stdout, "Skipping %s\n\n", leafPortNamePtr );
++					MGdbAdd( property->ignoreDb, leafPortDir, "-slid <DEFAULT> skipped", NULL );
++					fprintf( stdout, "Skipping %s\n\n", leafPortName );
+ 					break;
+ 				}
+ 			}
+@@ -221,6 +223,9 @@
+ 	MGdbDestroy( property->ignoreDb );
+ 	MGdbDestroy( property->installedPortsDb );
+ 	free( command );
++	free( leafPortDir );
++	free( leafPortName );
++	free( pkgDescFile );
+ 	return(0);
+ }
+ 
+@@ -266,7 +271,7 @@
+ }
+ 
+ /***********************************************************************/
+-int	nuke( char* leafPortDirPtr )
++int	nuke( char* leafPortDir )
+ {
+ 	char*	command		= NULL;
+ 
+@@ -274,7 +279,7 @@
+ 
+ 	strcpy( command, "cd " );
+ 	strcat( command, PORTSDIR );
+-	strcat( command, leafPortDirPtr );
++	strcat( command, leafPortDir );
+ 	strcat( command, "; make distclean" );
+ 	fprintf( stdout, "\nexecuting: %s\n", command );
+ 	while( fflush( stdout ) );
+diff -ruN ../0.3.3_2/libMGPM/src/MGPMrUpdate.c ./libMGPM/src/MGPMrUpdate.c
+--- ../0.3.3_2/libMGPM/src/MGPMrUpdate.c	Wed Nov  9 13:24:45 2005
++++ ./libMGPM/src/MGPMrUpdate.c	Wed Nov  9 21:54:00 2005
+@@ -41,10 +41,15 @@
+ 	char*	buffer;
+ 	char*	command;
+ 	char*	commandRestart;
++	char*	installedPortName;
+ 	char*	newPortDir;
+ 	char*	newPortName;
+ 	char*	optionsCheck;
+ 	char*	optionsDir;
++	char*	startPortCmd;
++	char*	startPortDir;
++	char*	stopPortCmd;
++	char*	stopPortDir;
+ 	char*	workDir;
+ } structLocalProperty;
+ 
+@@ -58,6 +63,8 @@
+ 	char	BROKEN[]					= "BROKEN";
+ 	char	FORBIDDEN[]					= "FORBIDDEN";
+ 	char	IGNORE[]					= "IGNORE";
++	char	START[]						= "/START";
++	char	STOP[]						= "/STOP";
+ 	char	backUp[]					= "--back-up";
+ 	char	bu[]						= "-bu";
+ 	char	exact[]						= "exact";
+@@ -71,11 +78,12 @@
+ 	char*	availableDependenciesDbDependencyDirPtr		= NULL;
+ 	char*	availableDependenciesDbDependencyNamePtr	= NULL;
+ 	char*	bufferBase					= NULL;
+-	char*	installedPortsDbPortNamePtr			= NULL;
+ 	char*	ipPtr						= NULL;
+ 	char*	oldPortDirPtr					= NULL;
+ 	char*	options						= NULL;
+ 	char*	stinker						= NULL;
++	char*	startPortDirPtr					= NULL;
++	char*	stopPortDirPtr					= NULL;
+ 	char*	strikePtr					= NULL;
+ 	int	availableDependenciesDbIDX			= 0;
+ 	int	availableDependenciesDbQTY			= 0;
+@@ -99,12 +107,17 @@
+ 	localProperty.buffer			= (char*)calloc( bufferSize, 1 );
+ 	localProperty.command			= (char*)calloc( bufferSize, 1 );
+ 	localProperty.commandRestart		= (char*)calloc( bufferSize, 1 );
++	localProperty.installedPortName		= (char*)calloc( 511, 1 );
+ 	localProperty.newPortDir		= (char*)calloc( 511, 1 );
+ 	localProperty.newPortName		= (char*)calloc( 511, 1 );
+ 	localProperty.optionsCheck		= (char*)calloc( 511, 1 );
+ 	localProperty.optionsDir		= (char*)calloc( 511, 1 );
++	localProperty.startPortCmd		= (char*)calloc( 511, 1 );
++	localProperty.startPortDir		= (char*)calloc( 511, 1 );
++	localProperty.stopPortCmd		= (char*)calloc( 511, 1 );
++	localProperty.stopPortDir		= (char*)calloc( 511, 1 );
+ 	localProperty.workDir			= (char*)calloc( 511, 1 );
+-		
++
+ 	property->availableDependenciesDb	= MGdbOpen( property->availableDependenciesDbFileName );
+ 	property->availablePortsDb		= MGdbOpen( property->availablePortsDbFileName );
+ 	property->commandLineDb			= MGdbOpen( property->commandLineDbFileName );
+@@ -179,6 +192,63 @@
+ 	strcpy( localProperty.beforeOptionsFileSize, MGrIntToString( MGrFileSize( localProperty.optionsDir ) ) );	
+ 
+ 	/*
++	 * gather stop/start instructions if they exist
++	 */
++	MGdbGoTop( property->configDb );
++	while( MGdbSeek( property->configDb,
++			property->fieldConfigDbKey,
++			STOP,
++			property->fieldConfigDbKey,
++			exact )	
++		&&
++		strncmp( oldPortDir, 
++			MGdbGet( property->configDb,
++				MGdbGetRecno( property->configDb ) - 1,
++				property->fieldConfigDbValue ),
++			strlen( oldPortDir ) ) ==  0 )
++	{
++		stopPortDirPtr	= MGdbGet( property->configDb,  	
++					MGdbGetRecno( property->configDb ) - 1,
++					property->fieldConfigDbValue );
++		if( stopPortDirPtr[strlen( oldPortDir )] == SPACE )
++		{
++			strncpy( localProperty.stopPortDir, stopPortDirPtr, strlen( oldPortDir ) );
++			strcpy( localProperty.stopPortCmd, stopPortDirPtr + strlen( oldPortDir ) + 1 );
++			break;
++		}
++		else
++		{
++			break;
++		}
++	}					
++	MGdbGoTop( property->configDb );
++	while( MGdbSeek( property->configDb,
++			property->fieldConfigDbKey,
++			START,
++			property->fieldConfigDbKey,
++			exact )	
++		&&
++		strncmp( oldPortDir, 
++			MGdbGet( property->configDb,
++				MGdbGetRecno( property->configDb ) - 1,
++				property->fieldConfigDbValue ),
++			strlen( oldPortDir ) ) ==  0 )
++	{
++		startPortDirPtr	= MGdbGet( property->configDb,  	
++					MGdbGetRecno( property->configDb ) - 1,
++					property->fieldConfigDbValue );
++		if( startPortDirPtr[strlen( oldPortDir )] == SPACE )
++		{
++			strncpy( localProperty.startPortDir, startPortDirPtr, strlen( oldPortDir ) );
++			strcpy( localProperty.startPortCmd, startPortDirPtr + strlen( oldPortDir ) + 1 );
++		}
++		else
++		{
++			break;
++		}
++	}
++
++	/*
+ 	 *	Do update in interactive mode (command line switch -ui )
+ 	 */
+ 	if( property->interactive )
+@@ -346,6 +416,16 @@
+ 				 * options changed so need to purge oldPortDir's records
+ 				 * from availablePortsDb and availableDependenciesDb
+ 				 */
++				if( property->log )
++				{
++					strcpy( localProperty.command, "echo \"    options changed so returning " );
++					strcat( localProperty.command, oldPortName );
++					strcat( localProperty.command, " " );
++					strcat( localProperty.command, oldPortDir );
++					strcat( localProperty.command, " to out of date pool " );
++					strcat( localProperty.command, " \">> /var/log/portmanager.log" );
++					system( localProperty.command );
++				}
+ 				property->optionsChanged	= 1;
+ 				MGdbGoTop( property->availablePortsDb );
+ 				while( MGdbSeek( property->availablePortsDb,
+@@ -519,12 +599,13 @@
+ 				installedPortsDbQTY	= MGdbGetRecordQty( property->installedPortsDb );
+ 				while( installedPortsDbIDX < installedPortsDbQTY )
+ 				{
+-					installedPortsDbPortNamePtr	= MGdbGet( property->installedPortsDb, installedPortsDbIDX,
+-										property->fieldInstalledPortsDbPortName );
+-					stinker = strstr( bufferBase, installedPortsDbPortNamePtr );
++					strcpy( localProperty.installedPortName, MGdbGet( property->installedPortsDb,
++										installedPortsDbIDX,
++										property->fieldInstalledPortsDbPortName ) );
++					stinker = strstr( bufferBase, localProperty.installedPortName );
+ 					if( stinker )
+ 					{
+-						fprintf( stdout, "OK to remove conflicting port %s Yy/Nn/Aa [Y]\? ", installedPortsDbPortNamePtr );
++						fprintf( stdout, "OK to remove conflicting port %s Yy/Nn/Aa [Y]\? ", localProperty.installedPortName );
+ 						while( fflush( stdout ) );
+ 						if( property->autoConflicts == 0 )
+ 						{
+@@ -585,7 +666,7 @@
+ 							}
+ 						}
+ 						strcpy( localProperty.command, "pkg_delete -f " );
+-						strcat( localProperty.command, installedPortsDbPortNamePtr );		
++						strcat( localProperty.command, localProperty.installedPortName );		
+ 						fprintf( stdout, "executing: %s\n", localProperty.command );
+ 						while( fflush( stdout ) );
+ 						errorCode	= system( localProperty.command );
+@@ -918,6 +999,56 @@
+ 		}
+ 		else
+ 		{
++			/*
++			 * use localProperty.stopPortCmd if it is defined
++			 */
++			if( strcmp( oldPortDir, localProperty.stopPortDir ) == 0 )
++			{
++				fprintf( stdout, "%s %s info: running %s stop command %s\n",
++					id,
++					PACKAGE_VERSION,
++					localProperty.stopPortDir,
++					localProperty.stopPortCmd );
++				while( fflush( stdout ) );
++
++				localProperty.buffer[0]	= 0;
++ 				pHandle	= popen( localProperty.stopPortCmd, "r" );
++				fread( localProperty.buffer, bufferSize, 1, pHandle );
++				pclose( pHandle );
++/*
++				idx	= 0;
++				while( idx < bufferSize )
++				{
++					if( localProperty.buffer[idx] == LINEFEED 
++						||
++						localProperty.buffer[idx] == TAB 
++						|| 
++						localProperty.buffer[idx] == SPACE )
++					{
++						localProperty.buffer[idx]	= 0;
++						break;
++					}
++					idx++;
++				}
++*/
++				if( property->log )
++				{
++					strcpy( localProperty.command, "echo \"    stopping " );
++					strcat( localProperty.command, oldPortName );
++					strcat( localProperty.command, " " );
++					strcat( localProperty.command, oldPortDir );
++					strcat( localProperty.command, " execution by running " );
++					strcat( localProperty.command, localProperty.stopPortCmd );
++					strcat( localProperty.command, " \">> /var/log/portmanager.log" );
++					system( localProperty.command );
++				}
++				fprintf( stdout, "%s reply: %s\n", localProperty.stopPortCmd, localProperty.buffer );
++				while( fflush( stdout ) );
++			}
++
++			/*
++			 * remove old port
++			 */
+ 			strcpy( localProperty.command, "pkg_delete -f ");
+ 			strcat( localProperty.command, oldPortName);
+ 			fprintf( stdout, "%s\n", SINGLE_LINES );
+@@ -1041,6 +1172,54 @@
+ 			system( localProperty.command );
+ 		}
+ 	}
++
++	/*
++	 * use localProperty.startPortCmd if it is defined
++	 */
++	if( strcmp( oldPortDir, localProperty.startPortDir ) == 0 )
++	{
++		fprintf( stdout, "%s %s info: running %s start command %s\n",
++			id,
++			PACKAGE_VERSION,
++			localProperty.startPortDir,
++			localProperty.startPortCmd );
++		while( fflush( stdout ) );
++		localProperty.buffer[0]	= 0;
++ 		pHandle	= popen( localProperty.startPortCmd, "r" );
++		fread( localProperty.buffer, bufferSize, 1, pHandle );
++		pclose( pHandle );
++/*
++		idx	= 0;
++		while( idx < bufferSize )
++		{
++			if( localProperty.buffer[idx] == LINEFEED 
++				||
++				localProperty.buffer[idx] == TAB 
++				|| 
++				localProperty.buffer[idx] == SPACE )
++			{
++				localProperty.buffer[idx]	= 0;
++				break;
++			}
++			idx++;
++		}
++*/
++		if( property->log )
++		{
++			strcpy( localProperty.command, "echo \"    starting " );
++			strcat( localProperty.command, oldPortName );
++			strcat( localProperty.command, " " );
++			strcat( localProperty.command, oldPortDir );
++			strcat( localProperty.command, " execution by running " );
++			strcat( localProperty.command, localProperty.startPortCmd );
++			strcat( localProperty.command, " \">> /var/log/portmanager.log" );
++			system( localProperty.command );
++		}
++
++		fprintf( stdout, "%s reply: %s\n", localProperty.startPortCmd, localProperty.buffer );
++		while( fflush( stdout ) );
++	}
++
+ 	/************************************************************************/
+ 	/*			Command "13" make package			*/
+ 	/************************************************************************/
+@@ -1229,10 +1408,15 @@
+ 	free( localProperty->buffer );
+ 	free( localProperty->command );
+ 	free( localProperty->commandRestart );
++	free( localProperty->installedPortName );
+ 	free( localProperty->newPortDir );
+ 	free( localProperty->newPortName );
+ 	free( localProperty->optionsCheck );
+ 	free( localProperty->optionsDir );
++	free( localProperty->startPortCmd );
++	free( localProperty->startPortDir );
++	free( localProperty->stopPortCmd );
++	free( localProperty->stopPortDir );
+ 	free( localProperty->workDir );
+ 
+ 	return(0);
+diff -ruN ../0.3.3_2/portmanager/pm-020.conf.SAMPLE ./portmanager/pm-020.conf.SAMPLE
+--- ../0.3.3_2/portmanager/pm-020.conf.SAMPLE	Tue Nov  8 17:05:25 2005
++++ ./portmanager/pm-020.conf.SAMPLE	Wed Nov  9 14:22:48 2005
+@@ -1,42 +1,40 @@
+-#............................................
+-# port manager example configuration file	ver 0.2.0
+-#............................................................
+-# the format of portmanager.conf is critical!
+-#
+-# 1. Comments delimited with # should be ok
+-# 2. No leading white space( space or tabs )
+-# 3. Placement of "|" is critical here is the format:
+ #
+-# [port category dir/port dir] | [ all port build options go here ] |
++# port manager example configuration file	ver 0.2.0
+ #
+-# 4. white space between port options is ok, and between final "|" and
+-#	the start of a comment
++
++CATEGORY/PORT|OPTION=|		# do not delete this line!
++
+ #
+-# example:
+-#............................................................
+ # port	| options |
+-#............................................................
+-#x11-toolkits/vte|WITH_GLX=yes -DNOCLEAN|	# some comment.......
+-#java/jdk14|-DMINIMAL|    			# anothe comment....
+-#............................................................
+-CATEGORY/PORT|OPTION=|		# do not delete this line!
++#
+ 
+-#####################
+-# custom settings   #
+-# remove "#" to use #
+-#####################
+ #textproc/docproj|JADETEX=no|
+ #java/jdk14|-DMINIMAL|
+ #textproc/libxml2|THREADS=off SCHEMA=on MEM_DEBUG=off XMLLINT_HIST=off THREAD_ALLOC=off|
++
+ #
++# do not let portmanager update the following ports
+ #
+-##
+-##do not let portmanager update the following ports
++
+ #IGNORE|editors/openoffice-1.1|
+ #IGNORE|java/jdk14|
+ 
+-
+-
++#
++# STOP/START these programs if they are updated
++#
++# Stop command will be run after program is built, before
++# old installed version is removed
++#
++# Start command will be run after rebuilt program is
++# installed and successfully registerd
++#
++# note:
++# 	must have leading "/" in /{category}/{port dir}
++# 	anything after  /{category}/{port dir} is run as
++#	a sh shell command
++# 
++#STOP|/mail/postfix /usr/local/sbin/postfix stop|
++#START|/mail/postfix /usr/local/sbin/postfix start|
+ 
+ 
+ 
+diff -ruN ../0.3.3_2/portmanager/portmanager.1 ./portmanager/portmanager.1
+--- ../0.3.3_2/portmanager/portmanager.1	Tue Nov  8 17:05:25 2005
++++ ./portmanager/portmanager.1	Wed Nov  9 18:49:17 2005
+@@ -128,24 +128,6 @@
+ .sp
+ http://portmanager.sunsite.dk/
+ .sp
+- \fBMail lists\fR
+-.sp
+-portmanager-questions@sunsite.dk
+-.sp
+-To subscribe send an empty message to:
+- portmanager-questions-subscribe@sunsite.dk
+-.sp
+- archive: http://www.mail-archive.com/portmanager-questions%40sunsite.dk/
+-.sp
+-.sp
+-If you would like to joint portmanager's development team let us know at:
+-portmanager-devel@sunsite.dk
+-.sp
+-To subscribe send an empty message to:
+-  portmanager-devel-subscribe@sunsite.dk
+-.sp
+- archive: http://www.mail-archive.com/portmanager-devel%40sunsite.dk/
+-.sp
+ .\"=======================================================================
+ .\".Sh IMPLEMENTATION NOTES
+ .\"=======================================================================
+@@ -166,35 +148,44 @@
+ .sp
+  pm\&-020.conf example:
+ .sp
+- # the format of pm\&-020.conf is critical
+  #
+- # 1. Comments delimited with # should be ok
+- # 2. No leading white space( space or tabs )
+- # 3. Placement of \&"\&|\&" is critical here is the format:
+- #
+- # [port category dir/port dir] \&| [ all port build options go here ] \&|
+- #
+- # 4. white space between port options is ok, and between final \&"\&|\&" and
+- #       the start of a comment
+- #
+- # example:
+- #............................................................
+- # port  \&| options \&|
+- #............................................................
+- #x11\&-toolkits/vte\&|WITH_GLX=yes \&-DNOCLEAN\&|      # some comment.......
+- #java/jdk14\&|\&-DMINIMAL\&|                         # another comment....
+- #............................................................
+- CATEGORY/PORT\&|OPTION=\&|          # do not delete this line
+- #
+- devel/sdl12\&|WITH_NAS=yes\&|
+- editors/openoffice\&-1.1\&|WITH_TTF_BYTECODE_ENABLED=yes\&|
+- java/jdk14\&|WITH_IPV6=yes\&|
+- multimedia/avifile\&|WITH_OPTIMIZED_CFLAGS=yes\&|
+- local/sysutils/portmanager\&|PREFIX=/home/mike/TEMP\&|
+- #
+- #do not let portmanager update the following ports
+- IGNORE\&|editors/openoffice\&-1.1\&|
+- IGNORE\&|java/jdk14\&|
++ # port manager example configuration file	ver 0.2.0
++ #
++.sp
++ CATEGORY/PORT\&|OPTION=\&|		# do not delete this line!
++.sp
++ #
++ # port	\&| options \&|
++ #
++.sp
++ #textproc/docproj\&|JADETEX=no\&|
++ #java/jdk14\&|-DMINIMAL\&|
++ #textproc/libxml2\&|THREADS=off SCHEMA=on MEM_DEBUG=off THREAD_ALLOC=off\&|
++.sp
++ #
++ # do not let portmanager update the following ports
++ #
++.sp
++ #IGNORE\&|editors/openoffice-1.1\&|
++ #IGNORE\&|java/jdk14\&|
++.sp
++ #
++ # STOP/START these programs if they are updated
++ #
++ # Stop command will be run after program is built, before
++ # old installed version is removed
++ #
++ # Start command will be run after rebuilt program is
++ # installed and successfully registerd
++ #
++ # note:
++ # 	must have leading \&"/\&" in /{category}/{port dir}
++ # 	anything after  /{category}/{port dir} is run as
++ #	a sh shell command
++ # 
++ #STOP\&|/mail/postfix /usr/local/sbin/postfix stop\&|
++ #START\&|/mail/postfix /usr/local/sbin/postfix start\&|
++.sp
+ .\"=======================================================================
+ .Sh DIAGNOSTICS
+ Detail of how portmanager works
+diff -ruN ../0.3.3_2/programmer-notes.txt ./programmer-notes.txt
+--- ../0.3.3_2/programmer-notes.txt	Wed Nov  9 13:24:45 2005
++++ ./programmer-notes.txt	Wed Nov  9 22:32:39 2005
+@@ -275,6 +275,15 @@
+ 	A) Creates database of Installed ports, checks/handles installed ports
+ 	that are no longerin the ports tree.
+ 
++=====================================
++
++Bring Joy <clarity256@yahoo.com>
++
++It actually is a good idea, but not so simple to implement. The ports system only 
++knows what the current dist file so won't tell you if one is out of date, have to
++do some extra digging for that.  Still an option to clean old distfiles and old
++packages as you go would be really nice so I will add your iidea to the long term
++goals list.
+ 
+ ************** JAVA notes *******************
+ 	
--- portmanager-0.3.3_3.diff ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20051110165903.0536B130C22>