ports/88551: [PORT AUTHOR UPDATE] update sysutils/portmanager to 0.3.2_1
Michael C. Shultz
ringworm01 at gmail.com
Sun Nov 6 15:50:19 UTC 2005
>Number: 88551
>Category: ports
>Synopsis: [PORT AUTHOR UPDATE] update sysutils/portmanager to 0.3.2_1
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: update
>Submitter-Id: current-users
>Arrival-Date: Sun Nov 06 15:50:18 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 at ringworm.mechee.com:/usr5/obj/usr5/src/sys/RINGWORM5 i386
>Description:
update sysutils/portmanager to 0.3.2_1
adds ability to recalculate a port's dependencies if they are changed
during an update by the dreaded blue screen thingy
>How-To-Repeat:
rm -r /usr/db/ports/* then run portmanager -u, result isn't pretty
so don't really do this until after this patch is applied
>Fix:
--- portmanager-0.3.2_1.diff begins here ---
diff -ruN portmanager/Makefile portmanager-0.3.2_1/Makefile
--- portmanager/Makefile Sat Nov 5 05:49:10 2005
+++ portmanager-0.3.2_1/Makefile Sun Nov 6 06:15:42 2005
@@ -7,6 +7,7 @@
PORTNAME= portmanager
PORTVERSION= 0.3.2
+PORTREVISION= 1
CATEGORIES= sysutils
MASTER_SITES= http://portmanager.sunsite.dk/distfiles/ \
${MASTER_SITE_SOURCEFORGE}
@@ -45,11 +46,17 @@
CONFIGURE_ARGS+= --with-debug=yes
.endif
-post-patch:
+#
+# note to comitter: this is post-configure for a specific reason
+# please do not change to post-patch
+# also externVars.h is intentional, please do not change to
+# externVars.h.in, thank you -Mike Shultz
+#
+post-configure:
.if ${PORTREVISION} != 0
@${REINPLACE_CMD} -e \
's|PACKAGE_VERSION "${PORTVERSION}"|PACKAGE_VERSION "${PORTVERSION}_${PORTREVISION}"|g' \
- ${WRKSRC}/externVars.h.in
+ ${WRKSRC}/externVars.h
.endif
post-install:
diff -ruN portmanager/files/patch-0.3.2_1 portmanager-0.3.2_1/files/patch-0.3.2_1
--- portmanager/files/patch-0.3.2_1 Wed Dec 31 16:00:00 1969
+++ portmanager-0.3.2_1/files/patch-0.3.2_1 Sun Nov 6 06:15:42 2005
@@ -0,0 +1,1569 @@
+diff -ruN ../0.3.2/libMG/src/MGrFileSize.c ./libMG/src/MGrFileSize.c
+--- ../0.3.2/libMG/src/MGrFileSize.c Fri Nov 4 06:39:26 2005
++++ ./libMG/src/MGrFileSize.c Sun Nov 6 05:43:09 2005
+@@ -37,8 +37,11 @@
+ errorCode = stat( fileName, &status);
+ if( errorCode == -1 )
+ {
++/*
+ fprintf( stderr, "%s error: stat of %s returned an error\n", id, fileName );
+ perror( "system message" );
++*/
++
+ return( 0 );
+ }
+ fileSize = status.st_size;
+diff -ruN ../0.3.2/libMG/src/MGrFileTime.c ./libMG/src/MGrFileTime.c
+--- ../0.3.2/libMG/src/MGrFileTime.c Fri Nov 4 06:39:26 2005
++++ ./libMG/src/MGrFileTime.c Sun Nov 6 05:45:02 2005
+@@ -24,7 +24,7 @@
+
+ unsigned long int MGrFileTime( char* fileName )
+ {
+- char id[] = "MGrFileSize";
++ char id[] = "MGrFileTime";
+ unsigned long int fileTime = 0;
+ signed int errorCode = 0;
+ struct stat status;
+@@ -32,8 +32,10 @@
+ errorCode = stat( fileName, &status);
+ if( errorCode == -1 )
+ {
++/*
+ fprintf( stderr, "%s error: stat of %s returned an error\n", id, fileName );
+ perror( "system message" );
++*/
+ return( 0 );
+ }
+ fileTime = status.st_mtime;
+diff -ruN ../0.3.2/libMGPM/src/MGPMrCommandLine.c ./libMGPM/src/MGPMrCommandLine.c
+--- ../0.3.2/libMGPM/src/MGPMrCommandLine.c Fri Nov 4 08:53:17 2005
++++ ./libMGPM/src/MGPMrCommandLine.c Sat Nov 5 20:12:57 2005
+@@ -54,14 +54,15 @@
+ /*
+ * set default values here
+ */
+- property.autoConflicts = 0; /* 1 = yes to all */
+- property.autoMoved = 0; /* if 1 then remove moved ports is Y */
+- property.backUp = 0; /* 0 = no packages 1 = build backup packages */
+- property.forced = 0;
+- property.interactive = 0;
+- property.log = 0;
+- property.pmMode = 0; /* 0 = multiple port updates/1 = single */
+- property.resume = 0; /* 1 = portmanager updated itself, don't rebuild databases in -u -f mode */
++ property.autoConflicts = 0; /* 1 = yes to all */
++ property.autoMoved = 0; /* if 1 then remove moved ports is Y */
++ property.backUp = 0; /* 0 = no packages 1 = build backup packages */
++ property.forced = 0;
++ property.interactive = 0;
++ property.log = 0;
++ property.optionsChanged = 0; /* set by MGPMrUpdate for example to indicate a ports's options just changed */
++ property.pmMode = 0; /* 0 = multiple port updates/1 = single */
++ property.resume = 0; /* 1 = portmanager updated itself, don't rebuild databases in -u -f mode */
+
+ /*
+ * Make /usr/ports/packages of it is missing
+@@ -327,6 +328,8 @@
+ if( dirStream == 0 ) /* bad dir */
+ {
+ fprintf( stderr, "%s %s error: %s is not a valid port directory\n", id, PACKAGE_VERSION, path );
++ fprintf( stdout, "%s %s info:either you have used an invalid command line switch as the first option or you are trying to update a non existent port path, see man portmanager(1) \n",
++ id, PACKAGE_VERSION );
+ free( path );
+ return( 1 );
+ }
+@@ -345,6 +348,8 @@
+ if( ( errorCode = MGPMrController( property, path ) ) )
+ {
+ fprintf( stdout, "%s %s error: %s returned errorCode %d\n", id, PACKAGE_VERSION, "MGPMrControler", errorCode );
++ fprintf( stdout, "%s %s info:either you have used an invalid command line switch as the first option or you are trying to update a non existent port path, see man portmanager(1) \n",
++ id, PACKAGE_VERSION );
+ free( path );
+ return( 1 );
+ }
+diff -ruN ../0.3.2/libMGPM/src/MGPMrSinglePortCreateStatusDb.c ./libMGPM/src/MGPMrSinglePortCreateStatusDb.c
+--- ../0.3.2/libMGPM/src/MGPMrSinglePortCreateStatusDb.c Fri Nov 4 21:46:56 2005
++++ ./libMGPM/src/MGPMrSinglePortCreateStatusDb.c Sat Nov 5 21:12:54 2005
+@@ -37,7 +37,8 @@
+
+ int MGPMrSinglePortCreateStatusDb( structProperty* property, char* portDir )
+ {
+- FILE* dependencyDbStream = NULL;
++ FILE* dependencyDbStream = NULL;
++ char exact[] = "exact";
+ char id[] = "MGPMrSinglePortCreateStatusDb";
+ char* availablePortDir = NULL;
+ char* availablePortName = NULL;
+@@ -69,34 +70,37 @@
+ while( fflush( stdout ) );
+ strcpy( availablePortDir, portDir );
+
+- property->availablePortsDb = MGdbCreate(
+- property->availablePortsDbFileName,
+- property->fieldAvailablePortsDbPortName,
+- property->fieldAvailablePortsDbPortDir,
+- property->fieldAvailablePortsDbFlag,
+- NULL);
+-
+- dependencyDbStream = fopen( property->availableDependenciesDbFileName, "w" );
+- if( dependencyDbStream == 0 )
++ if( property->optionsChanged == 0 ) /* set by MGPMrUpdate for example to indicate a ports's options just changed */
+ {
+- fprintf( stdout, "%s %s error: could not open %s\n", id, PACKAGE_VERSION, property->availableDependenciesDbFileName );
+- perror( "system message" );
+- return( 1 );
+- }
++ property->availablePortsDb = MGdbCreate(
++ property->availablePortsDbFileName,
++ property->fieldAvailablePortsDbPortName,
++ property->fieldAvailablePortsDbPortDir,
++ property->fieldAvailablePortsDbFlag,
++ NULL);
+
+- /*
+- * creates dependencyDb with header record, same as MGdbCreate. In this case records will be added by
+- * fprint'ing to dependencyDbStream instead of using MGdbAdd because speed is important here so we don't
+- * want a dependencyDb object yet.
+- */
+- fprintf( dependencyDbStream, "%s%c%s%c%s%c%s%c%s%c%c", "fieldAvailableDependenciesDbPortDir", 0, "fieldAvailableDependenciesDbPortName", 0,
+- "fieldAvailableDependenciesDbDependencyDir", 0, "fieldAvailableDependenciesDbDependencyName", 0,
+- "fieldAvailableDependenciesDbDependType", 0, LINEFEED );
+- while( fflush( stdout ) );
+- fclose( dependencyDbStream );
++ dependencyDbStream = fopen( property->availableDependenciesDbFileName, "w" );
++ if( dependencyDbStream == 0 )
++ {
++ fprintf( stdout, "%s %s error: could not open %s\n", id, PACKAGE_VERSION, property->availableDependenciesDbFileName );
++ perror( "system message" );
++ return( 1 );
++ }
+
+- property->availableDependenciesDb = MGdbOpen( property->availableDependenciesDbFileName );
+- property->configDb = MGdbOpen( property->configDbFileName );
++ /*
++ * creates dependencyDb with header record, same as MGdbCreate. In this case records will be added by
++ * fprint'ing to dependencyDbStream instead of using MGdbAdd because speed is important here so we don't
++ * want a dependencyDb object yet.
++ */
++ fprintf( dependencyDbStream, "%s%c%s%c%s%c%s%c%s%c%c", "fieldAvailableDependenciesDbPortDir", 0, "fieldAvailableDependenciesDbPortName", 0,
++ "fieldAvailableDependenciesDbDependencyDir", 0, "fieldAvailableDependenciesDbDependencyName", 0,
++ "fieldAvailableDependenciesDbDependType", 0, LINEFEED );
++ while( fflush( stdout ) );
++ fclose( dependencyDbStream );
++
++ property->availableDependenciesDb = MGdbOpen( property->availableDependenciesDbFileName );
++ property->configDb = MGdbOpen( property->configDbFileName );
++ }
+
+ if( ( errorCode = rGetPortName( property, availablePortDir, availablePortName ) ) )
+ {
+@@ -104,7 +108,20 @@
+ return( 1 );
+ }
+
+- MGdbAdd( property->availablePortsDb, availablePortName, availablePortDir, "0", NULL);
++ MGdbGoTop( property->availablePortsDb );
++ if( MGdbSeek( property->availablePortsDb,
++ property->fieldAvailablePortsDbPortDir,
++ availablePortDir,
++ property->fieldAvailablePortsDbPortDir,
++ exact ) )
++ {
++ }
++ else
++ {
++ MGdbAdd( property->availablePortsDb, availablePortName, availablePortDir, "0", NULL);
++
++ }
++
+ if( ( errorCode = rFillDependencies( property, availablePortName, availablePortDir, counterPtr ) ) )
+ {
+ fprintf( stdout, "%s %s error: %s returned errorCode %d\n", id, PACKAGE_VERSION, "rFillDependencies", errorCode );
+@@ -129,9 +146,12 @@
+ }
+ idx++;
+ }
+- MGdbDestroy( property->availablePortsDb );
+- MGdbDestroy( property->availableDependenciesDb );
+- MGdbDestroy( property->configDb );
++ if( property->optionsChanged == 0 ) /* set by MGPMrUpdate for example to indicate a ports's options just changed */
++ {
++ MGdbDestroy( property->availablePortsDb );
++ MGdbDestroy( property->availableDependenciesDb );
++ MGdbDestroy( property->configDb );
++ }
+ free( availablePortDir );
+ free( availablePortName );
+ return( 0 );
+@@ -364,21 +384,38 @@
+ /*
+ * add dependency to availableDependenciesDb may contain dupes
+ */
+- fprintf( dependencyDbStream, "%s%c%s%c%s%c%s%c%s%c%c", availablePortDir, 0, availablePortName, 0, dependencyPortDir,
+- 0, dependencyPortName, 0, dependType, 0, LINEFEED );
+- MGdbGoTop( property->configDb );
+- optionsPtr = MGdbSeek( property->configDb, property->fieldConfigDbKey, dependencyPortDir, property->fieldConfigDbValue, exact );
+-/*
+- if( optionsPtr )
++ if( property->optionsChanged )
+ {
+- fprintf( stdout, "\t%s %s %s\n", dependencyPortName, dependencyPortDir, optionsPtr );
++ MGdbAdd( property->availableDependenciesDb,
++ availablePortDir,
++ availablePortName,
++ dependencyPortDir,
++ dependencyPortName,
++ dependType,
++ NULL );
++
++ MGdbGoTop( property->configDb );
++ optionsPtr = MGdbSeek( property->configDb,
++ property->fieldConfigDbKey,
++ dependencyPortDir,
++ property->fieldConfigDbValue,
++ exact );
++ if( optionsPtr )
++ {
++ fprintf( stdout, "\t%s %s %s\n", dependencyPortName, dependencyPortDir, optionsPtr );
++ }
++ else
++ {
++ fprintf( stdout, "\t%s %s\n", dependencyPortName, dependencyPortDir );
++ }
++ while( fflush( stdout ) );
++
+ }
+ else
+ {
+- fprintf( stdout, "\t%s %s\n", dependencyPortName, dependencyPortDir );
++ fprintf( dependencyDbStream, "%s%c%s%c%s%c%s%c%s%c%c", availablePortDir, 0, availablePortName, 0, dependencyPortDir,
++ 0, dependencyPortName, 0, dependType, 0, LINEFEED );
+ }
+- while( fflush( stdout ) );
+-*/
+ /*
+ * if dependency not in availablePortsDb add it
+ */
+diff -ruN ../0.3.2/libMGPM/src/MGPMrSinglePortStatus.c ./libMGPM/src/MGPMrSinglePortStatus.c
+--- ../0.3.2/libMGPM/src/MGPMrSinglePortStatus.c Fri Nov 4 13:02:23 2005
++++ ./libMGPM/src/MGPMrSinglePortStatus.c Sat Nov 5 09:07:12 2005
+@@ -203,6 +203,7 @@
+ */
+ else
+ {
++ counterPtr[0]++;
+ strcpy( installedPortsDbPortDir, availablePortsDbPortDirPtr );
+ MGdbGoTop( property->installedPortsDb );
+
+diff -ruN ../0.3.2/libMGPM/src/MGPMrUpdate.c ./libMGPM/src/MGPMrUpdate.c
+--- ../0.3.2/libMGPM/src/MGPMrUpdate.c Fri Nov 4 08:47:41 2005
++++ ./libMGPM/src/MGPMrUpdate.c Sun Nov 6 05:17:31 2005
+@@ -31,33 +31,54 @@
+ #define OK 0
+ #include <libMGPM.h>
+
++typedef struct
++{
++ char* afterOptionsFileSize;
++ char* afterOptionsFileTime;
++ char* beforeOptionsFileSize;
++ char* beforeOptionsFileTime;
++ char* buffer;
++ char* command;
++ char* commandRestart;
++ char* newPortDir;
++ char* newPortName;
++ char* optionsCheck;
++ char* optionsDir;
++ char* workDir;
++} structLocalProperty;
++
+ int rCleanDir( char* portDir, char* workDir );
+-int rCleanUp( structProperty* property, char* buffer, char* command, char* newPortDir, char* newPortName, char* workDir );
++int rCleanUp( structProperty* property, structLocalProperty* localProperty );
+ int rPortBrokeCheck( structProperty* property, char* options, char* oldPortDir, char* oldPortName, char* brokeCheckType );
+ int MGPMrUpdate( structProperty* property, char* oldPortDir, char* oldPortName )
+ {
++ FILE* fileStream = NULL;
+ FILE* pHandle = NULL;
++ char BROKEN[] = "BROKEN";
++ char FORBIDDEN[] = "FORBIDDEN";
++ char IGNORE[] = "IGNORE";
++ char backUp[] = "--back-up";
++ char bu[] = "-bu";
+ char exact[] = "exact";
+ char id[] = "MGPMrUpdate";
++ char ip[] = "-ip";
++ char l[] = "-l";
++ char log[] = "--log";
+ char strike[] = "0";
++ char y[] = "-y";
++ char yes[] = "--yes";
+ char* availableDependenciesDbDependencyDirPtr = NULL;
+ char* availableDependenciesDbDependencyNamePtr = NULL;
+ char* availablePortsFlagPtr = NULL;
+- char* buffer = NULL;
+ char* bufferBase = NULL;
+- char* command = NULL;
+- char* commandRestart = NULL;
+ char* dependencyDbDependencyPortDirPtr = NULL;
+ char* dependencyDbDependencyPortNamePtr = NULL;
+ char* installedPortsDbPortNamePtr = NULL;
+ char* ipPtr = NULL;
+- char* newPortDir = NULL;
+- char* newPortName = NULL;
+ char* oldPortDirPtr = NULL;
+ char* options = NULL;
+ char* stinker = NULL;
+ char* strikePtr = NULL;
+- char* workDir = NULL;
+ int availableDependenciesDbIDX = 0;
+ int availableDependenciesDbQTY = 0;
+ int availablePortsDbIDX = 0;
+@@ -69,49 +90,98 @@
+ int installedPortsDbIDX = 0;
+ int installedPortsDbQTY = 0;
+ int kkey = 1;
+-
+- buffer = (char*)calloc( bufferSize, 1 );
+- command = (char*)calloc( bufferSize, 1 );
+- commandRestart = (char*)calloc( bufferSize, 1 );
+- newPortDir = (char*)calloc( 255, 1 );
+- newPortName = (char*)calloc( 255, 1 );
+- workDir = (char*)calloc( bufferSize, 1 );
+-
+- property->commandLineDb = MGdbOpen( property->commandLineDbFileName );
+- property->configDb = MGdbOpen( property->configDbFileName );
+- property->ignoreDb = MGdbOpen( property->ignoreDbFileName );
+- property->installedPortsDb = MGdbOpen( property->installedPortsDbFileName );
+- property->strikesDb = MGdbOpen( property->strikesDbFileName );
+-
+- if( property->pmMode || property->forced )
+- {
+- property->availablePortsDb = MGdbOpen( property->availablePortsDbFileName );
+- property->availableDependenciesDb = MGdbOpen( property->availableDependenciesDbFileName );
+- }
+- else
++
++ structLocalProperty localProperty;
++
++ property->optionsChanged = 0;
++
++ localProperty.afterOptionsFileSize = (char*)calloc( 511, 1 );
++ localProperty.afterOptionsFileTime = (char*)calloc( 511, 1 );
++ localProperty.beforeOptionsFileSize = (char*)calloc( 511, 1 );
++ localProperty.beforeOptionsFileTime = (char*)calloc( 511, 1 );
++ localProperty.buffer = (char*)calloc( bufferSize, 1 );
++ localProperty.command = (char*)calloc( bufferSize, 1 );
++ localProperty.commandRestart = (char*)calloc( bufferSize, 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.workDir = (char*)calloc( 511, 1 );
++
++ property->availableDependenciesDb = MGdbOpen( property->availableDependenciesDbFileName );
++ property->availablePortsDb = MGdbOpen( property->availablePortsDbFileName );
++ property->commandLineDb = MGdbOpen( property->commandLineDbFileName );
++ property->configDb = MGdbOpen( property->configDbFileName );
++ property->dependencyPortsDb = MGdbOpen( property->dependencyPortsDbFileName );
++ property->ignoreDb = MGdbOpen( property->ignoreDbFileName );
++ property->installedPortsDb = MGdbOpen( property->installedPortsDbFileName );
++ property->strikesDb = MGdbOpen( property->strikesDbFileName );
++
++ /*
++ * store work directoy base
++ */
++ strcpy( localProperty.workDir, "cd " );
++ strcat( localProperty.workDir, PORTSDIR );
++ strcat( localProperty.workDir, oldPortDir );
++ strcat( localProperty.workDir, "; make -V WRKDIRPREFIX" );
++ localProperty.buffer[0] = 0;
++ pHandle = popen( localProperty.workDir, "r" );
++ fread( localProperty.buffer, 255, 1, pHandle );
++ pclose( pHandle );
++ idx = 0;
++ while( idx < 255 )
+ {
+- property->dependencyPortsDb = MGdbOpen( property->dependencyPortsDbFileName );
++ if( localProperty.buffer[idx] == LINEFEED || localProperty.buffer[idx] == TAB || localProperty.buffer[idx] == SPACE )
++ {
++ localProperty.buffer[idx] = 0;
++ break;
++ }
++ idx++;
+ }
++ strcpy( localProperty.workDir, localProperty.buffer );
+
+- strcpy( workDir, "cd " );
+- strcat( workDir, PORTSDIR );
+- strcat( workDir, oldPortDir );
+- strcat( workDir, "; make -V WRKDIRPREFIX" );
+- buffer[0] = 0;
+- pHandle = popen( workDir, "r" );
+- fread( buffer, 255, 1, pHandle );
++ /*
++ * store localProperty.optionsDir
++ */
++ strcpy( localProperty.optionsDir, "cd " );
++ strcat( localProperty.optionsDir, PORTSDIR );
++ strcat( localProperty.optionsDir, oldPortDir );
++ strcat( localProperty.optionsDir, "; make -V OPTIONSFILE" );
++ localProperty.buffer[0] = 0;
++ pHandle = popen( localProperty.optionsDir, "r" );
++ fread( localProperty.buffer, 255, 1, pHandle );
+ pclose( pHandle );
+ idx = 0;
+ while( idx < 255 )
+ {
+- if( buffer[idx] == LINEFEED || buffer[idx] == TAB || buffer[idx] == SPACE )
++ if( localProperty.buffer[idx] == LINEFEED || localProperty.buffer[idx] == TAB || localProperty.buffer[idx] == SPACE )
+ {
+- buffer[idx] = 0;
++ localProperty.buffer[idx] = 0;
+ break;
+ }
+ idx++;
+ }
+- strcpy( workDir, buffer );
++ strcpy( localProperty.optionsDir, localProperty.buffer );
++
++ /*
++ * BEFORE check for /var/db/ports/{oldPortDir} less sub dir
++ * if it exists get size/time of options file for later comparison
++ *
++ *
++ */
++
++ fileStream = fopen( localProperty.optionsDir, "r" );
++ if( fileStream == NULL ) /* no file */
++ {
++ localProperty.beforeOptionsFileTime[0] = 0;
++ localProperty.beforeOptionsFileSize[0] = 0;
++ }
++ else
++ {
++ fclose( fileStream );
++ }
++ strcpy( localProperty.beforeOptionsFileTime, MGrIntToString( (int)MGrFileTime( localProperty.optionsDir ) ) );
++ strcpy( localProperty.beforeOptionsFileSize, MGrIntToString( MGrFileSize( localProperty.optionsDir ) ) );
+
+ if( property->interactive )
+ {
+@@ -152,7 +222,7 @@
+ fprintf( stdout, "\nAdding %s %s to ignore list\n", oldPortName, oldPortDir );
+ MGdbAdd( property->ignoreDb, oldPortDir, "inteactivly skipped", NULL );
+ kkey = getc(stdin);
+- rCleanUp( property, buffer, command, newPortDir, newPortName, workDir );
++ rCleanUp( property, &localProperty );
+ return(0);
+ }
+ case KEY_n:
+@@ -160,7 +230,7 @@
+ fprintf( stdout, "\nAdding %s %s to ignore list\n", oldPortName, oldPortDir );
+ MGdbAdd( property->ignoreDb, oldPortDir, "inteactivly skipped", NULL );
+ kkey = getc(stdin);
+- rCleanUp( property, buffer, command, newPortDir, newPortName, workDir );
++ rCleanUp( property, &localProperty );
+ return(0);
+ }
+ default:
+@@ -185,15 +255,15 @@
+ MGdbAdd( property->ignoreDb, oldPortDir, "looping, 3rd attempt at make", NULL );
+ if( property->log )
+ {
+- strcpy( command, "echo \"make Strike 3 " );
+- strcat( command, oldPortName );
+- strcat( command, " " );
+- strcat( command, oldPortDir );
+- strcat( command, " marking port as ignore/looping " );
+- strcat( command, " \">> /var/log/portmanager.log" );
+- system( command );
++ strcpy( localProperty.command, "echo \"make Strike 3 " );
++ strcat( localProperty.command, oldPortName );
++ strcat( localProperty.command, " " );
++ strcat( localProperty.command, oldPortDir );
++ strcat( localProperty.command, " marking port as ignore/looping " );
++ strcat( localProperty.command, " \">> /var/log/portmanager.log" );
++ system( localProperty.command );
+ }
+- rCleanUp( property, buffer, command, newPortDir, newPortName, workDir );
++ rCleanUp( property, &localProperty );
+ return( 0 );
+ }
+ if( strike[0] == '1' )
+@@ -207,17 +277,18 @@
+ {
+ fprintf( stdout, "%s %s error: %s returned errorCode %d\n", id, PACKAGE_VERSION, "MGdbDelete", errorCode );
+ while( fflush( stdout ) );
++ rCleanUp( property, &localProperty );
+ return( 1 );
+ }
+ MGdbAdd( property->strikesDb, oldPortDir, "2", NULL );
+ if( property->log )
+ {
+- strcpy( command, "echo \"make Strike 2 " );
+- strcat( command, oldPortName );
+- strcat( command, " " );
+- strcat( command, oldPortDir );
+- strcat( command, " \">> /var/log/portmanager.log" );
+- system( command );
++ strcpy( localProperty.command, "echo \"make Strike 2 " );
++ strcat( localProperty.command, oldPortName );
++ strcat( localProperty.command, " " );
++ strcat( localProperty.command, oldPortDir );
++ strcat( localProperty.command, " \">> /var/log/portmanager.log" );
++ system( localProperty.command );
+ }
+ /*
+ dualOriginCheck( property, oldPortName );
+@@ -237,36 +308,36 @@
+ /************************************************************************/
+ if( options )
+ {
+- strcpy( command, "cd " );
+- strcat( command, PORTSDIR );
+- strcat( command, oldPortDir );
+- strcat( command, "; make check-conflicts " );
+- strcat( command, options );
++ strcpy( localProperty.command, "cd " );
++ strcat( localProperty.command, PORTSDIR );
++ strcat( localProperty.command, oldPortDir );
++ strcat( localProperty.command, "; make check-conflicts " );
++ strcat( localProperty.command, options );
+ }
+ else
+ {
+- strcpy( command, "cd " );
+- strcat( command, PORTSDIR );
+- strcat( command, oldPortDir );
+- strcat( command, "; make check-conflicts " );
++ strcpy( localProperty.command, "cd " );
++ strcat( localProperty.command, PORTSDIR );
++ strcat( localProperty.command, oldPortDir );
++ strcat( localProperty.command, "; make check-conflicts " );
+ }
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ fprintf( stdout, "checking for conflicts before building %s\n", oldPortName );
+- fprintf( stdout, "%s %s command: #1 of 8 %s\n", id, PACKAGE_VERSION, command );
++ fprintf( stdout, "%s %s command: #1 of 8 %s\n", id, PACKAGE_VERSION, localProperty.command );
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ while( fflush( stdout ) );
+- if( ( errorCode = system(command) ) )
++ if( ( errorCode = system(localProperty.command) ) )
+ {
+ /*
+ * We have a conflicting port installed, pkg_delete -f'ing the stinker
+ *
+ */
+- buffer[0] = 0;
+- pHandle = popen( command, "r" );
+- fread( buffer, bufferSize, 1, pHandle );
++ localProperty.buffer[0] = 0;
++ pHandle = popen( localProperty.command, "r" );
++ fread( localProperty.buffer, bufferSize, 1, pHandle );
+ if( feof( pHandle ) && !ferror( pHandle ) )
+ {
+- bufferBase = strstr( buffer, "conflicts with installed package" );
++ bufferBase = strstr( localProperty.buffer, "conflicts with installed package" );
+ if( bufferBase )
+ {
+ /*
+@@ -278,7 +349,7 @@
+ * linux_base-rh-9
+ *
+ */
+- bufferBase = buffer
++ bufferBase = localProperty.buffer
+ + strlen(oldPortName)
+ + strlen( "===> conflicts with installed package" );
+
+@@ -339,7 +410,7 @@
+ while( fflush( stdout ) );
+ MGdbAdd( property->ignoreDb, oldPortDir, "conflicts with another port", NULL );
+ kkey = getc(stdin);
+- rCleanUp( property, buffer, command, newPortDir, newPortName, workDir );
++ rCleanUp( property, &localProperty );
+ return(0);
+ }
+ case KEY_n:
+@@ -348,7 +419,7 @@
+ while( fflush( stdout ) );
+ MGdbAdd( property->ignoreDb, oldPortDir, "conflicts with another port", NULL );
+ kkey = getc(stdin);
+- rCleanUp( property, buffer, command, newPortDir, newPortName, workDir );
++ rCleanUp( property, &localProperty );
+ return(0);
+ }
+ default:
+@@ -359,19 +430,19 @@
+ }
+ }
+ }
+- strcpy( command, "pkg_delete -f " );
+- strcat( command, installedPortsDbPortNamePtr );
+- fprintf( stdout, "executing: %s\n", command );
++ strcpy( localProperty.command, "pkg_delete -f " );
++ strcat( localProperty.command, installedPortsDbPortNamePtr );
++ fprintf( stdout, "executing: %s\n", localProperty.command );
+ while( fflush( stdout ) );
+- errorCode = system( command );
++ errorCode = system( localProperty.command );
+ if( property->log )
+ {
+- strcpy( command, "echo \"removed conflicting port " );
+- strcat( command, oldPortName );
+- strcat( command, " " );
+- strcat( command, oldPortDir );
+- strcat( command, " \">> /var/log/portmanager.log" );
+- system( command );
++ strcpy( localProperty.command, "echo \"removed conflicting port " );
++ strcat( localProperty.command, oldPortName );
++ strcat( localProperty.command, " " );
++ strcat( localProperty.command, oldPortDir );
++ strcat( localProperty.command, " \">> /var/log/portmanager.log" );
++ system( localProperty.command );
+ }
+ }
+ installedPortsDbIDX++;
+@@ -412,32 +483,32 @@
+ while( fflush( stderr ) );
+ if( property->log )
+ {
+- strcpy( command, "echo \" " );
+- strcat( command, oldPortName );
+- strcat( command, " " );
+- strcat( command, oldPortDir );
+- strcat( command, " conflicts with another installed port so marked ignore\" >> /var/log/portmanager.log" );
+- system( command );
++ strcpy( localProperty.command, "echo \" " );
++ strcat( localProperty.command, oldPortName );
++ strcat( localProperty.command, " " );
++ strcat( localProperty.command, oldPortDir );
++ strcat( localProperty.command, " conflicts with another installed port so marked ignore\" >> /var/log/portmanager.log" );
++ system( localProperty.command );
+ }
+ MGdbAdd( property->ignoreDb, oldPortDir, "conflicts with another installed port", NULL );
+- rCleanUp( property, buffer, command, newPortDir, newPortName, workDir );
++ rCleanUp( property, &localProperty );
+ return( 0 );
+ }
+ /************************************************************************/
+ /* Command "1.1" " make -V FORBIDDEN " */
+ /************************************************************************/
+- if( ( errorCode = rPortBrokeCheck( property, options, oldPortDir, oldPortName, "FORBIDDEN" ) ) )
++ if( ( errorCode = rPortBrokeCheck( property, options, oldPortDir, oldPortName, FORBIDDEN ) ) )
+ {
+ switch( errorCode )
+ {
+ case CRASH:
+ {
+- rCleanUp( property, buffer, command, newPortDir, newPortName, workDir );
++ rCleanUp( property, &localProperty );
+ return( CRASH );
+ }
+ case SKIP:
+ {
+- rCleanUp( property, buffer, command, newPortDir, newPortName, workDir );
++ rCleanUp( property, &localProperty );
+ return( OK );
+ }
+ }
+@@ -446,18 +517,18 @@
+ /************************************************************************/
+ /* Command "1.2" " make -V BROKEN " */
+ /************************************************************************/
+- if( ( errorCode = rPortBrokeCheck( property, options, oldPortDir, oldPortName, "BROKEN" ) ) )
++ if( ( errorCode = rPortBrokeCheck( property, options, oldPortDir, oldPortName, BROKEN ) ) )
+ {
+ switch( errorCode )
+ {
+ case CRASH:
+ {
+- rCleanUp( property, buffer, command, newPortDir, newPortName, workDir );
++ rCleanUp( property, &localProperty );
+ return( CRASH );
+ }
+ case SKIP:
+ {
+- rCleanUp( property, buffer, command, newPortDir, newPortName, workDir );
++ rCleanUp( property, &localProperty );
+ return( OK );
+ }
+ }
+@@ -466,18 +537,18 @@
+ /************************************************************************/
+ /* Command "1.3" " make -V IGNORE " */
+ /************************************************************************/
+- if( ( errorCode = rPortBrokeCheck( property, options, oldPortDir, oldPortName, "IGNORE" ) ) )
++ if( ( errorCode = rPortBrokeCheck( property, options, oldPortDir, oldPortName, IGNORE ) ) )
+ {
+ switch( errorCode )
+ {
+ case CRASH:
+ {
+- rCleanUp( property, buffer, command, newPortDir, newPortName, workDir );
++ rCleanUp( property, &localProperty );
+ return( CRASH );
+ }
+ case SKIP:
+ {
+- rCleanUp( property, buffer, command, newPortDir, newPortName, workDir );
++ rCleanUp( property, &localProperty );
+ return( OK );
+ }
+ }
+@@ -514,7 +585,7 @@
+
+ while( oldPortDirPtr && availableDependenciesDbIDX < availableDependenciesDbQTY && strcmp( oldPortDir, oldPortDirPtr ) == 0 )
+ {
+- rCleanDir( availableDependenciesDbDependencyDirPtr, workDir );
++ rCleanDir( availableDependenciesDbDependencyDirPtr, localProperty.workDir );
+
+ oldPortDirPtr = MGdbGet( property->availableDependenciesDb,
+ availableDependenciesDbIDX,
+@@ -527,7 +598,7 @@
+ property->fieldAvailableDependenciesDbDependencyName );
+ availableDependenciesDbIDX++;
+ }
+- rCleanDir( oldPortDir, workDir );
++ rCleanDir( oldPortDir, localProperty.workDir );
+ }
+ else
+ {
+@@ -553,7 +624,7 @@
+
+ while( oldPortDirPtr && dependencyPortsDbIDX < dependencyPortsDbQTY && strcmp( oldPortDir, oldPortDirPtr ) == 0 )
+ {
+- rCleanDir( dependencyDbDependencyPortDirPtr, workDir );
++ rCleanDir( dependencyDbDependencyPortDirPtr, localProperty.workDir );
+
+ oldPortDirPtr = MGdbSeek( property->dependencyPortsDb,
+ property->fieldDependencyDbPortDir,
+@@ -571,80 +642,215 @@
+
+ dependencyPortsDbIDX++;
+ }
+- rCleanDir( oldPortDir, workDir );
++ rCleanDir( oldPortDir, localProperty.workDir );
+ }
+
+ /************************************************************************/
+ /* Command "3.1" " make fetch" */
+ /************************************************************************/
+- strcpy( command, "cd " );
+- strcat( command, PORTSDIR );
+- strcat( command, oldPortDir );
+- strcat( command, "; make fetch " );
++ strcpy( localProperty.command, "cd " );
++ strcat( localProperty.command, PORTSDIR );
++ strcat( localProperty.command, oldPortDir );
++ strcat( localProperty.command, "; make fetch " );
+ if( options )
+ {
+- strcat( command, options );
++ strcat( localProperty.command, options );
+ }
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ fprintf( stdout, "fetch %s \n", oldPortName );
+- fprintf( stdout, "%s %s command: #3.1 of 8 %s\n", id, PACKAGE_VERSION, command );
++ fprintf( stdout, "%s %s command: #3.1 of 8 %s\n", id, PACKAGE_VERSION, localProperty.command );
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ while( fflush( stdout ) );
+- if( ( errorCode = system(command) ) )
++ if( ( errorCode = system(localProperty.command) ) )
+ {
+ if( property->log )
+ {
+- strcpy( command, "echo \" " );
+- strcat( command, oldPortName );
+- strcat( command, " " );
+- strcat( command, oldPortDir );
+- strcat( command, " failed to fetch\" >> /var/log/portmanager.log" );
+- system( command );
++ strcpy( localProperty.command, "echo \" " );
++ strcat( localProperty.command, oldPortName );
++ strcat( localProperty.command, " " );
++ strcat( localProperty.command, oldPortDir );
++ strcat( localProperty.command, " failed to fetch\" >> /var/log/portmanager.log" );
++ system( localProperty.command );
+ }
+ fprintf( stdout, "%s %s error: make fetch returned an error, adding %s to ignore.db\n", id, PACKAGE_VERSION, oldPortDir );
+ while( fflush( stdout ) );
+ MGdbAdd( property->ignoreDb, oldPortDir, "failed during make fetch", NULL );
+- rCleanUp( property, buffer, command, newPortDir, newPortName, workDir );
++ rCleanUp( property, &localProperty );
+ return(0);
+ }
++
++
+ /************************************************************************/
+- /* Command "3.2" " make " */
++ /* Command "3.2" " make -V OPTIONS" */
++ /************************************************************************/
++
++ /*
++ * If no /var/db/ports/{package name}/options file exists
++ * yet make -V OPTIONS shows OPTIONS as being defined
++ * make is going to bluescreen, we need to handle that here
++ */
++
++ strcpy( localProperty.optionsCheck, "cd " );
++ strcat( localProperty.optionsCheck, PORTSDIR );
++ strcat( localProperty.optionsCheck, oldPortDir );
++ strcat( localProperty.optionsCheck, "; make -V OPTIONS" );
++
++ fprintf( stdout, "%s\n", SINGLE_LINES );
++ fprintf( stdout, "%s %s command: #3.2 of 8 %s\n", id, PACKAGE_VERSION, localProperty.optionsCheck );
++ fprintf( stdout, "%s\n", SINGLE_LINES );
++ while( fflush( stdout ) );
++
++ pHandle = popen( localProperty.optionsCheck, "r" );
++ localProperty.buffer[0] = 0;
++ fread( localProperty.buffer, bufferSize, 1, pHandle );
++ pclose( pHandle );
++ /************************************************************************/
++ /* Command "3.3" " make conf" */
++ /************************************************************************/
++ if( strlen( localProperty.buffer ) > 4 )
++ {
++ /*
++ * If here we know OPTIONS is defined, now need to know if
++ * /var/db/ports/{package name}/options exists
++ */
++ fileStream = fopen( localProperty.optionsDir, "r" );
++ if( fileStream == NULL ) /* no file */
++ {
++ if( options )
++ {
++ strcpy( localProperty.command, "cd " );
++ strcat( localProperty.command, PORTSDIR );
++ strcat( localProperty.command, oldPortDir );
++ strcat( localProperty.command, "; make config " );
++ strcat( localProperty.command, options );
++ }
++ else
++ {
++ strcpy( localProperty.command, "cd " );
++ strcat( localProperty.command, PORTSDIR );
++ strcat( localProperty.command, oldPortDir );
++ strcat( localProperty.command, "; make config " );
++ }
++ fprintf( stdout, "%s\n", SINGLE_LINES );
++ fprintf( stdout, "update %s \n", oldPortName );
++ fprintf( stdout, "%s %s command: #3.3 of 8 %s\n", id, PACKAGE_VERSION, localProperty.command );
++ fprintf( stdout, "%s\n", SINGLE_LINES );
++ while( fflush( stdout ) );
++ system(localProperty.command);
++ }
++ else
++ {
++ fclose( fileStream );
++ }
++ strcpy( localProperty.afterOptionsFileTime, MGrIntToString( (int)MGrFileTime( localProperty.optionsDir ) ) );
++ strcpy( localProperty.afterOptionsFileSize, MGrIntToString( MGrFileSize( localProperty.optionsDir ) ) );
++
++ /*
++ * test to see if any options changed
++ */
++ if( strlen( localProperty.beforeOptionsFileTime ) != strlen( localProperty.afterOptionsFileTime ) ||
++ strlen( localProperty.beforeOptionsFileSize ) != strlen( localProperty.afterOptionsFileSize ) ||
++ strcmp( localProperty.beforeOptionsFileTime, localProperty.afterOptionsFileTime ) ||
++ strcmp( localProperty.beforeOptionsFileSize, localProperty.afterOptionsFileSize ) )
++ {
++fprintf( stdout, "%s debug 01: beforeOptionsFileTime-=>%s afterOptionsFileTime-=>%s beforeOptionsFileSize-=>%s afterOptionsFileSize-=>%s\n",
++ id,
++ localProperty.beforeOptionsFileTime,
++ localProperty.afterOptionsFileTime,
++ localProperty.beforeOptionsFileSize,
++ localProperty.afterOptionsFileSize );
++while( fflush( stdout ) );
++
++ /*
++ * options changed so need to purge oldPortDir's records
++ * from availablePortsDb and availableDependenciesDb
++ */
++ property->optionsChanged = 1;
++ MGdbGoTop( property->availablePortsDb );
++ while( MGdbSeek( property->availablePortsDb,
++ property->fieldAvailablePortsDbPortDir,
++ oldPortDir,
++ property->fieldAvailablePortsDbPortDir,
++ exact ) )
++ {
++ fprintf( stdout, "%s info: purging availablePortsDb of old %s record\n",
++ id,
++ MGdbGet( property->availablePortsDb,
++ MGdbGetRecno( property->availablePortsDb ) - 1,
++ property->fieldAvailablePortsDbPortName ) );
++ while( fflush( stdout ) );
++ MGdbDelete( property->availablePortsDb, MGdbGetRecno( property->availablePortsDb ) - 1 );
++ MGdbGoTop( property->availablePortsDb );
++ }
++
++ MGdbGoTop( property->availableDependenciesDb );
++ while( MGdbSeek( property->availableDependenciesDb,
++ property->fieldAvailableDependenciesDbPortDir,
++ oldPortDir,
++ property->fieldAvailableDependenciesDbPortDir,
++ exact ) )
++ {
++ fprintf( stdout, "%s info: purging availableDependenciesDb of old %s dependency records %s\n",
++ id,
++ MGdbGet( property->availableDependenciesDb,
++ MGdbGetRecno( property->availableDependenciesDb ) - 1,
++ property->fieldAvailableDependenciesDbPortName ),
++ MGdbGet( property->availableDependenciesDb,
++ MGdbGetRecno( property->availableDependenciesDb ) - 1,
++ property->fieldAvailableDependenciesDbDependencyName ) );
++ while( fflush( stdout ) );
++ MGdbDelete( property->availableDependenciesDb, MGdbGetRecno( property->availableDependenciesDb ) - 1 );
++ MGdbGoTop( property->availableDependenciesDb );
++ }
++ /*
++ * add oldPortDir's new records back into availablePortsDb
++ * and availableDependenciesDb
++ */
++ fprintf( stdout, "%s info: adding new/modified %s records\n", id, oldPortDir );
++ MGPMrSinglePortCreateStatusDb( property, oldPortDir );
++ rCleanUp( property, &localProperty );
++ return( 0 );
++ }
++ }
++
++ /************************************************************************/
++ /* Command "3.4" " make" */
+ /************************************************************************/
+ if( options )
+ {
+- strcpy( command, "cd " );
+- strcat( command, PORTSDIR );
+- strcat( command, oldPortDir );
+- strcat( command, "; make " );
+- strcat( command, options );
++ strcpy( localProperty.command, "cd " );
++ strcat( localProperty.command, PORTSDIR );
++ strcat( localProperty.command, oldPortDir );
++ strcat( localProperty.command, "; make " );
++ strcat( localProperty.command, options );
+ }
+ else
+ {
+- strcpy( command, "cd " );
+- strcat( command, PORTSDIR );
+- strcat( command, oldPortDir );
+- strcat( command, "; make " );
++ strcpy( localProperty.command, "cd " );
++ strcat( localProperty.command, PORTSDIR );
++ strcat( localProperty.command, oldPortDir );
++ strcat( localProperty.command, "; make " );
+ }
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ fprintf( stdout, "update %s \n", oldPortName );
+- fprintf( stdout, "%s %s command: #3.2 of 8 %s\n", id, PACKAGE_VERSION, command );
++ fprintf( stdout, "%s %s command: #3.4 of 8 %s\n", id, PACKAGE_VERSION, localProperty.command );
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ while( fflush( stdout ) );
+- if( ( errorCode = system(command) ) )
++ if( ( errorCode = system(localProperty.command) ) )
+ {
+ if( property->log )
+ {
+- strcpy( command, "echo \" " );
+- strcat( command, oldPortName );
+- strcat( command, " " );
+- strcat( command, oldPortDir );
+- strcat( command, " failed during make\" >> /var/log/portmanager.log" );
+- system( command );
++ strcpy( localProperty.command, "echo \" " );
++ strcat( localProperty.command, oldPortName );
++ strcat( localProperty.command, " " );
++ strcat( localProperty.command, oldPortDir );
++ strcat( localProperty.command, " failed during make\" >> /var/log/portmanager.log" );
++ system( localProperty.command );
+ }
+ fprintf( stdout, "%s %s error: make returned an error, adding %s to ignore.db\n", id, PACKAGE_VERSION, oldPortDir );
+ while( fflush( stdout ) );
+ MGdbAdd( property->ignoreDb, oldPortDir, "failed during make", NULL );
+- rCleanUp( property, buffer, command, newPortDir, newPortName, workDir );
++ rCleanUp( property, &localProperty );
+ return(0);
+ }
+ /************************************************************************/
+@@ -660,17 +866,17 @@
+ }
+ else
+ {
+- strcpy( command, "cd " );
+- strcat( command, TEMPDIR );
+- strcat( command, "; pkg_create -b " );
+- strcat( command, oldPortName );
++ strcpy( localProperty.command, "cd " );
++ strcat( localProperty.command, TEMPDIR );
++ strcat( localProperty.command, "; pkg_create -b " );
++ strcat( localProperty.command, oldPortName );
+
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ fprintf( stdout, "backing up installed %s before removing it \n", oldPortName );
+- fprintf( stdout, "%s %s command: #4 of 8 %s\n", id, PACKAGE_VERSION, command );
++ fprintf( stdout, "%s %s command: #4 of 8 %s\n", id, PACKAGE_VERSION, localProperty.command );
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ while( fflush( stdout ) );
+- system(command);
++ system(localProperty.command);
+ }
+ /************************************************************************/
+ /* Command "5" " make deinstall " */
+@@ -681,30 +887,30 @@
+ if( ( strcmp( oldPortDir, "/sysutils/portmanager" ) == 0 || strcmp( oldPortDir, "/local/sysutils/portmanager" ) == 0 ) &&
+ property->pmMode == SINGLE )
+ {
+- strcpy( command, "cd " );
+- strcat( command, PORTSDIR );
+- strcat( command, "/sysutils/portmanager; " );
+- strcat( command, "make -V PKG_DBDIR" );
+- pHandle = popen( command, "r" );
+- buffer[0] = 0;
+- fread( buffer, 255, 1, pHandle );
++ strcpy( localProperty.command, "cd " );
++ strcat( localProperty.command, PORTSDIR );
++ strcat( localProperty.command, "/sysutils/portmanager; " );
++ strcat( localProperty.command, "make -V PKG_DBDIR" );
++ pHandle = popen( localProperty.command, "r" );
++ localProperty.buffer[0] = 0;
++ fread( localProperty.buffer, 255, 1, pHandle );
+ pclose( pHandle );
+ idx = 0;
+ while( idx < 255 )
+ {
+- if( buffer[idx] == LINEFEED || buffer[idx] == TAB || buffer[idx] == SPACE )
++ if( localProperty.buffer[idx] == LINEFEED || localProperty.buffer[idx] == TAB || localProperty.buffer[idx] == SPACE )
+ {
+- buffer[idx] = 0;
++ localProperty.buffer[idx] = 0;
+ break;
+ }
+ idx++;
+ }
+- strcpy( command, "rm -r " );
+- strcat( command, buffer );
+- strcat( command, "/portmanager*" );
+- fprintf( stdout, "executing: %s\n", command );
++ strcpy( localProperty.command, "rm -r " );
++ strcat( localProperty.command, localProperty.buffer );
++ strcat( localProperty.command, "/portmanager*" );
++ fprintf( stdout, "executing: %s\n", localProperty.command );
+ while( fflush( stdout ) );
+- system( command );
++ system( localProperty.command );
+ }
+ else
+ {
+@@ -717,13 +923,13 @@
+ /*
+ * have to do this here before db's are wacked
+ */
+- strcpy( commandRestart, "portmanager -u" );
++ strcpy( localProperty.commandRestart, "portmanager -u" );
+ MGdbGoTop( property->commandLineDb );
+- while( ( ipPtr = MGdbSeek( property->commandLineDb, property->fieldCommandLineDbKey, "-ip", property->fieldCommandLineDbValue, exact ) ) )
++ while( ( ipPtr = MGdbSeek( property->commandLineDb, property->fieldCommandLineDbKey, ip, property->fieldCommandLineDbValue, exact ) ) )
+ {
+- strcat( commandRestart, " " );
+- strcat( commandRestart, " -ip " );
+- strcat( commandRestart, ipPtr );
++ strcat( localProperty.commandRestart, " " );
++ strcat( localProperty.commandRestart, " -ip " );
++ strcat( localProperty.commandRestart, ipPtr );
+ }
+ }
+ if( strcmp( oldPortName, "not installed" ) == 0 )
+@@ -736,27 +942,27 @@
+ }
+ else
+ {
+- strcpy( command, "pkg_delete -f ");
+- strcat( command, oldPortName);
++ strcpy( localProperty.command, "pkg_delete -f ");
++ strcat( localProperty.command, oldPortName);
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ fprintf( stdout, "removing old %s \n", oldPortName );
+- fprintf( stdout, "%s %s command: #5 of 8 %s\n", id, PACKAGE_VERSION, command );
++ fprintf( stdout, "%s %s command: #5 of 8 %s\n", id, PACKAGE_VERSION, localProperty.command );
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ while( fflush( stdout ) );
+- if( ( system(command) ) )
++ if( ( system(localProperty.command) ) )
+ {
+- command[0] = 0;
+- strcpy( command, "cd " );
+- strcat( command, PORTSDIR );
+- strcat( command, oldPortDir );
+- strcat( command, "; make deinstall " );
++ localProperty.command[0] = 0;
++ strcpy( localProperty.command, "cd " );
++ strcat( localProperty.command, PORTSDIR );
++ strcat( localProperty.command, oldPortDir );
++ strcat( localProperty.command, "; make deinstall " );
+
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ fprintf( stdout, "trying one more way to remove %s...\n", oldPortName );
+- fprintf( stdout, "%s %s command: #5 of 8 %s\n", id, PACKAGE_VERSION, command );
++ fprintf( stdout, "%s %s command: #5 of 8 %s\n", id, PACKAGE_VERSION, localProperty.command );
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ while( fflush( stdout ) );
+- system(command);
++ system(localProperty.command);
+ }
+ }
+ }
+@@ -765,73 +971,73 @@
+ /************************************************************************/
+ if( options )
+ {
+- strcpy( command, "cd " );
+- strcat( command, PORTSDIR );
+- strcat( command, oldPortDir );
+- strcat( command, "; make reinstall " );
+- strcat( command, options );
++ strcpy( localProperty.command, "cd " );
++ strcat( localProperty.command, PORTSDIR );
++ strcat( localProperty.command, oldPortDir );
++ strcat( localProperty.command, "; make reinstall " );
++ strcat( localProperty.command, options );
+ }
+ else
+ {
+- strcpy( command, "cd " );
+- strcat( command, PORTSDIR );
+- strcat( command, oldPortDir );
+- strcat( command, "; make reinstall " );
++ strcpy( localProperty.command, "cd " );
++ strcat( localProperty.command, PORTSDIR );
++ strcat( localProperty.command, oldPortDir );
++ strcat( localProperty.command, "; make reinstall " );
+ }
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ fprintf( stdout, "installing updated %s \n", oldPortDir );
+- fprintf( stdout, "%s %s command: #6 of 8 %s\n", id, PACKAGE_VERSION, command );
++ fprintf( stdout, "%s %s command: #6 of 8 %s\n", id, PACKAGE_VERSION, localProperty.command );
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ while( fflush( stdout ) );
+- if( ( errorCode = system( command ) ) )
++ if( ( errorCode = system( localProperty.command ) ) )
+ {
+ if( property->log )
+ {
+- strcpy( command, "echo \" " );
+- strcat( command, oldPortName );
+- strcat( command, " " );
+- strcat( command, oldPortDir );
+- strcat( command, " restoring original port from backup\" >> /var/log/portmanager.log" );
+- system( command );
++ strcpy( localProperty.command, "echo \" " );
++ strcat( localProperty.command, oldPortName );
++ strcat( localProperty.command, " " );
++ strcat( localProperty.command, oldPortDir );
++ strcat( localProperty.command, " restoring original port from backup\" >> /var/log/portmanager.log" );
++ system( localProperty.command );
+ }
+
+
+- strcpy(command, "pkg_add ");
+- strcat(command, TEMPDIR);
+- strcat(command, "/");
+- strcat(command, oldPortName);
+- strcat(command, ".tgz");
++ strcpy(localProperty.command, "pkg_add ");
++ strcat(localProperty.command, TEMPDIR);
++ strcat(localProperty.command, "/");
++ strcat(localProperty.command, oldPortName);
++ strcat(localProperty.command, ".tgz");
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ fprintf( stderr, "restoring original port from backup \n" );
+- fprintf( stderr, "%s %s command: #6!! ***Emergancy restore*** %s\n", id, PACKAGE_VERSION, command );
++ fprintf( stderr, "%s %s command: #6!! ***Emergancy restore*** %s\n", id, PACKAGE_VERSION, localProperty.command );
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ while( fflush( stdout ) );
+- if( ( errorCode = system( command ) ) )
++ if( ( errorCode = system( localProperty.command ) ) )
+ {
+ if( property->log )
+ {
+- strcpy( command, "echo \" " );
+- strcat( command, oldPortName );
+- strcat( command, " " );
+- strcat( command, oldPortDir );
+- strcat( command, " failed to restore from backup\" >> /var/log/portmanager.log" );
+- system( command );
++ strcpy( localProperty.command, "echo \" " );
++ strcat( localProperty.command, oldPortName );
++ strcat( localProperty.command, " " );
++ strcat( localProperty.command, oldPortDir );
++ strcat( localProperty.command, " failed to restore from backup\" >> /var/log/portmanager.log" );
++ system( localProperty.command );
+ }
+ fprintf( stdout, "%s %s error: FAILED TO RESTORE BACKUP COPY, really sorry ! \n", id, PACKAGE_VERSION );
+ fprintf( stdout, "%s %s info: adding %s to ignore.db\n", id, PACKAGE_VERSION, oldPortDir );
+ while( fflush( stdout ) );
+ MGdbAdd( property->ignoreDb, oldPortDir, "failed during (6) emergancy restore", NULL );
+- rCleanUp( property, buffer, command, newPortDir, newPortName, workDir );
++ rCleanUp( property, &localProperty );
+ return(0);
+ }
+ if( property->log )
+ {
+- strcpy( command, "echo \" " );
+- strcat( command, oldPortName );
+- strcat( command, " " );
+- strcat( command, oldPortDir );
+- strcat( command, " restored from backup and marked ignore\" >> /var/log/portmanager.log" );
+- system( command );
++ strcpy( localProperty.command, "echo \" " );
++ strcat( localProperty.command, oldPortName );
++ strcat( localProperty.command, " " );
++ strcat( localProperty.command, oldPortDir );
++ strcat( localProperty.command, " restored from backup and marked ignore\" >> /var/log/portmanager.log" );
++ system( localProperty.command );
+ }
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ fprintf( stdout, "%s %s error: RESTORED BACKUP COPY\n", id, PACKAGE_VERSION );
+@@ -839,24 +1045,24 @@
+ MGdbAdd( property->ignoreDb, oldPortDir, "performed (6) emergancy restore", NULL );
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ while( fflush( stdout ) );
+- rCleanUp( property, buffer, command, newPortDir, newPortName, workDir );
++ rCleanUp( property, &localProperty );
+ return(0);
+ }
+ else
+ {
+ if( strcmp( oldPortName, "not installed" ) )
+ {
+- strcpy( command, "cd " );
+- strcat( command, TEMPDIR);
+- strcat( command, "; rm -f ");
+- strcat( command, oldPortName);
+- strcat( command, ".tgz" );
++ strcpy( localProperty.command, "cd " );
++ strcat( localProperty.command, TEMPDIR);
++ strcat( localProperty.command, "; rm -f ");
++ strcat( localProperty.command, oldPortName);
++ strcat( localProperty.command, ".tgz" );
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ fprintf( stderr, "deleting backup copy, installation of updated %s successful\n", oldPortDir );
+- fprintf( stdout, "%s %s command: #6 of 8 %s\n", id, PACKAGE_VERSION, command );
++ fprintf( stdout, "%s %s command: #6 of 8 %s\n", id, PACKAGE_VERSION, localProperty.command );
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ while( fflush( stdout ) );
+- system( command );
++ system( localProperty.command );
+ }
+ }
+ /************************************************************************/
+@@ -866,25 +1072,25 @@
+ {
+ if( options )
+ {
+- strcpy( command, "cd " );
+- strcat( command, PORTSDIR );
+- strcat( command, oldPortDir );
+- strcat( command, "; make package " );
+- strcat( command, options );
++ strcpy( localProperty.command, "cd " );
++ strcat( localProperty.command, PORTSDIR );
++ strcat( localProperty.command, oldPortDir );
++ strcat( localProperty.command, "; make package " );
++ strcat( localProperty.command, options );
+ }
+ else
+ {
+- strcpy( command, "cd " );
+- strcat( command, PORTSDIR );
+- strcat( command, oldPortDir );
+- strcat( command, "; make package " );
++ strcpy( localProperty.command, "cd " );
++ strcat( localProperty.command, PORTSDIR );
++ strcat( localProperty.command, oldPortDir );
++ strcat( localProperty.command, "; make package " );
+ }
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ fprintf( stderr, "making package of updated %s \n", oldPortDir );
+- fprintf( stdout, "%s %s command: #7 of 8 %s\n", id, PACKAGE_VERSION, command );
++ fprintf( stdout, "%s %s command: #7 of 8 %s\n", id, PACKAGE_VERSION, localProperty.command );
+ fprintf( stdout, "%s\n", SINGLE_LINES );
+ while( fflush( stdout ) );
+- system(command);
++ system(localProperty.command);
+ }
+ else
+ {
+@@ -908,7 +1114,7 @@
+ if( ( strcmp( oldPortDir, "/sysutils/portmanager" ) == 0 || strcmp( oldPortDir, "/local/sysutils/portmanager" ) == 0 ) &&
+ property->pmMode == MULTI )
+ {
+- rCleanDir( oldPortDir, workDir );
++ rCleanDir( oldPortDir, localProperty.workDir );
+ }
+ else
+ {
+@@ -934,7 +1140,7 @@
+
+ while( oldPortDirPtr && availableDependenciesDbIDX < availableDependenciesDbQTY && strcmp( oldPortDir, oldPortDirPtr ) == 0 )
+ {
+- rCleanDir( availableDependenciesDbDependencyDirPtr, workDir );
++ rCleanDir( availableDependenciesDbDependencyDirPtr, localProperty.workDir );
+
+ oldPortDirPtr = MGdbGet( property->availableDependenciesDb,
+ availableDependenciesDbIDX,
+@@ -947,7 +1153,7 @@
+ property->fieldAvailableDependenciesDbDependencyName );
+ availableDependenciesDbIDX++;
+ }
+- rCleanDir( oldPortDir, workDir );
++ rCleanDir( oldPortDir, localProperty.workDir );
+ }
+ else
+ {
+@@ -973,7 +1179,7 @@
+
+ while( oldPortDirPtr && dependencyPortsDbIDX < dependencyPortsDbQTY && strcmp( oldPortDir, oldPortDirPtr ) == 0 )
+ {
+- rCleanDir( dependencyDbDependencyPortDirPtr, workDir );
++ rCleanDir( dependencyDbDependencyPortDirPtr, localProperty.workDir );
+
+ oldPortDirPtr = MGdbSeek( property->dependencyPortsDb,
+ property->fieldDependencyDbPortDir,
+@@ -991,7 +1197,7 @@
+
+ dependencyPortsDbIDX++;
+ }
+- rCleanDir( oldPortDir, workDir );
++ rCleanDir( oldPortDir, localProperty.workDir );
+ }
+ }
+
+@@ -1005,47 +1211,47 @@
+ * reconstruct the command line
+ */
+ MGdbGoTop( property->commandLineDb );
+- if( ( ipPtr = MGdbSeek( property->commandLineDb, property->fieldCommandLineDbKey, "-l", property->fieldCommandLineDbValue, exact ) ) )
++ if( ( ipPtr = MGdbSeek( property->commandLineDb, property->fieldCommandLineDbKey, l, property->fieldCommandLineDbValue, exact ) ) )
+ {
+- strcat( commandRestart, " " );
+- strcat( commandRestart, "-l" );
++ strcat( localProperty.commandRestart, " " );
++ strcat( localProperty.commandRestart, "-l" );
+ }
+ MGdbGoTop( property->commandLineDb );
+- if( ( ipPtr = MGdbSeek( property->commandLineDb, property->fieldCommandLineDbKey, "--log", property->fieldCommandLineDbValue, exact ) ) )
++ if( ( ipPtr = MGdbSeek( property->commandLineDb, property->fieldCommandLineDbKey, log, property->fieldCommandLineDbValue, exact ) ) )
+ {
+- strcat( commandRestart, " " );
+- strcat( commandRestart, "-l" );
++ strcat( localProperty.commandRestart, " " );
++ strcat( localProperty.commandRestart, "-l" );
+ }
+ MGdbGoTop( property->commandLineDb );
+- if( ( ipPtr = MGdbSeek( property->commandLineDb, property->fieldCommandLineDbKey, "-bu", property->fieldCommandLineDbValue, exact ) ) )
++ if( ( ipPtr = MGdbSeek( property->commandLineDb, property->fieldCommandLineDbKey, bu, property->fieldCommandLineDbValue, exact ) ) )
+ {
+- strcat( commandRestart, " " );
+- strcat( commandRestart, "-bu" );
++ strcat( localProperty.commandRestart, " " );
++ strcat( localProperty.commandRestart, "-bu" );
+ }
+ MGdbGoTop( property->commandLineDb );
+- if( ( ipPtr = MGdbSeek( property->commandLineDb, property->fieldCommandLineDbKey, "--back-up", property->fieldCommandLineDbValue, exact ) ) )
++ if( ( ipPtr = MGdbSeek( property->commandLineDb, property->fieldCommandLineDbKey, backUp, property->fieldCommandLineDbValue, exact ) ) )
+ {
+- strcat( commandRestart, " " );
+- strcat( commandRestart, "-bu" );
++ strcat( localProperty.commandRestart, " " );
++ strcat( localProperty.commandRestart, "-bu" );
+ }
+ MGdbGoTop( property->commandLineDb );
+- if( ( ipPtr = MGdbSeek( property->commandLineDb, property->fieldCommandLineDbKey, "-y", property->fieldCommandLineDbValue, exact ) ) )
++ if( ( ipPtr = MGdbSeek( property->commandLineDb, property->fieldCommandLineDbKey, y, property->fieldCommandLineDbValue, exact ) ) )
+ {
+- strcat( commandRestart, " " );
+- strcat( commandRestart, "-y" );
++ strcat( localProperty.commandRestart, " " );
++ strcat( localProperty.commandRestart, "-y" );
+ }
+ MGdbGoTop( property->commandLineDb );
+- if( ( ipPtr = MGdbSeek( property->commandLineDb, property->fieldCommandLineDbKey, "--yes", property->fieldCommandLineDbValue, exact ) ) )
++ if( ( ipPtr = MGdbSeek( property->commandLineDb, property->fieldCommandLineDbKey, yes, property->fieldCommandLineDbValue, exact ) ) )
+ {
+- strcat( commandRestart, " " );
+- strcat( commandRestart, "--yes" );
++ strcat( localProperty.commandRestart, " " );
++ strcat( localProperty.commandRestart, "--yes" );
+ }
+- strcat( commandRestart, " --resume" );
++ strcat( localProperty.commandRestart, " --resume" );
+ fprintf(stdout, "%s\n", SINGLE_LINES);
+- fprintf(stdout, "portmanager just updated itself, executing:\n\t%s\n", commandRestart );
++ fprintf(stdout, "portmanager just updated itself, executing:\n\t%s\n", localProperty.commandRestart );
+ fprintf(stdout, "%s\n", SINGLE_LINES);
+ while( fflush( stdout ) );
+- system( commandRestart );
++ system( localProperty.commandRestart );
+ exit( 0 );
+
+ }
+@@ -1061,44 +1267,47 @@
+ if( availablePortsFlagPtr && strncmp( availablePortsFlagPtr, "2", 1 ) )
+ {
+ availablePortsDbIDX = MGdbGetRecno( property->availablePortsDb ) - 1;
+- strcpy( newPortName, MGdbGet( property->availablePortsDb, availablePortsDbIDX, property->fieldAvailablePortsDbPortName ) );
+- strcpy( newPortDir, MGdbGet( property->availablePortsDb, availablePortsDbIDX, property->fieldAvailablePortsDbPortDir ) );
++ strcpy( localProperty.newPortName, MGdbGet( property->availablePortsDb, availablePortsDbIDX, property->fieldAvailablePortsDbPortName ) );
++ strcpy( localProperty.newPortDir, MGdbGet( property->availablePortsDb, availablePortsDbIDX, property->fieldAvailablePortsDbPortDir ) );
+ if( ( errorCode = MGdbDelete( property->availablePortsDb, availablePortsDbIDX ) ) )
+ {
+ fprintf( stdout, "%s %s error: %s returned errorCode %d\n", id, PACKAGE_VERSION, "MGdbDelete", errorCode );
++ rCleanUp( property, &localProperty );
+ return( 1 );
+ }
+- MGdbAdd( property->availablePortsDb, newPortName, newPortDir, "2", NULL );
++ MGdbAdd( property->availablePortsDb, localProperty.newPortName, localProperty.newPortDir, "2", NULL );
+ }
+ }
+- free( commandRestart );
+- rCleanUp( property, buffer, command, newPortDir, newPortName, workDir );
++ rCleanUp( property, &localProperty );
+ return( 0 );
+ }
+ /****************************************/
+ /****************************************/
+ /****************************************/
+-int rCleanUp( structProperty* property, char* buffer, char* command, char* newPortDir, char* newPortName, char* workDir )
++int rCleanUp( structProperty* property, structLocalProperty* localProperty )
+ {
++ MGdbDestroy( property->availableDependenciesDb );
++ MGdbDestroy( property->availablePortsDb );
+ MGdbDestroy( property->commandLineDb );
+ MGdbDestroy( property->configDb );
++ MGdbDestroy( property->dependencyPortsDb );
+ MGdbDestroy( property->ignoreDb );
+ MGdbDestroy( property->installedPortsDb );
+ MGdbDestroy( property->strikesDb );
+- free( buffer );
+- free( command );
+- free( newPortDir );
+- free( newPortName );
+- free( workDir );
+- if( property->pmMode || property->forced )
+- {
+- MGdbDestroy( property->availablePortsDb );
+- MGdbDestroy( property->availableDependenciesDb );
+- }
+- else
+- {
+- MGdbDestroy( property->dependencyPortsDb );
+- }
++
++ free( localProperty->afterOptionsFileSize );
++ free( localProperty->afterOptionsFileTime );
++ free( localProperty->beforeOptionsFileSize );
++ free( localProperty->beforeOptionsFileTime );
++ free( localProperty->buffer );
++ free( localProperty->command );
++ free( localProperty->commandRestart );
++ free( localProperty->newPortDir );
++ free( localProperty->newPortName );
++ free( localProperty->optionsCheck );
++ free( localProperty->optionsDir );
++ free( localProperty->workDir );
++
+ return(0);
+ }
+ /****************************************/
+diff -ruN ../0.3.2/libMGPM/src/libMGPM.h ./libMGPM/src/libMGPM.h
+--- ../0.3.2/libMGPM/src/libMGPM.h Fri Nov 4 08:42:49 2005
++++ ./libMGPM/src/libMGPM.h Sun Nov 6 04:06:31 2005
+@@ -91,16 +91,17 @@
+ /*
+ * default flags
+ */
++ int autoConflicts; /* if 1 then conflicts Y/N default is Y */
++ int autoMoved; /* if 1 then remove moved ports is Y */
++ int backUp; /* if 1 then make packages for updatyed ports */
+ int forced; /* 1 = forced updates 0 = normal */
+ int interactive; /* 0 = non, 1 = interactive */
++ int log; /* if 1 then enable logging */
+ int objIdx;
++ int optionsChanged; /* set by MGPMrUpdate for example to indicate a ports's options just changed */
+ int pmMode; /* singlePort Upgrade = 1 multiple upgrade = 0 */
+ int resume; /* 0=normal 1=don't create databases*/
+ int verbose;
+- int log; /* if 1 then enable logging */
+- int backUp; /* if 1 then make packages for updatyed ports */
+- int autoConflicts; /* if 1 then conflicts Y/N default is Y */
+- int autoMoved; /* if 1 then remove moved ports is Y */
+
+ /*
+ * misc
+@@ -176,7 +177,6 @@
+ classDb* strikesDb;
+ classDir* dir;
+ classPort* portTree;
+-
+
+ } structProperty;
+
+diff -ruN ../0.3.2/portmanager/portmanager.1 ./portmanager/portmanager.1
+--- ../0.3.2/portmanager/portmanager.1 Fri Nov 4 06:39:26 2005
++++ ./portmanager/portmanager.1 Sat Nov 5 07:30:34 2005
+@@ -80,7 +80,7 @@
+ .sp
+ .It
+ \fB\&-ui\fR or \fB\&--upgrade-interactive\fR
+- upgrade interactively
++ upgrade in interactive mode asks (y/n/a) before updating each port
+ .sp
+ .It
+ \fB\&-v\fR or \fB\&--version\fR
+@@ -104,7 +104,7 @@
+
+ portmanager x11/gnome2 --log
+
+-to add/update/repair a single port with logging by forcing all
++to add/update/repair a single port with logging and forcing all
+ of it's dependencies to be rebuilt
+
+ portmanager x11/gnome2 --log --fix
+Binary files ../0.3.2/portmanager-0.3.2.tar.gz and ./portmanager-0.3.2.tar.gz differ
+Binary files ../0.3.2/portmanager-0.3.3.tar.gz and ./portmanager-0.3.3.tar.gz differ
+diff -ruN ../0.3.2/programmer-notes.txt ./programmer-notes.txt
+--- ../0.3.2/programmer-notes.txt Fri Nov 4 08:47:05 2005
++++ ./programmer-notes.txt Sat Nov 5 09:19:08 2005
+@@ -2,17 +2,13 @@
+
+ Must do before releasing
+
+- (yes/no/auto yes to all) [y/n/a] [y]
+- a) moved ports
+- b) ui
+- c) conflicts
+-
+ auto stop/start of programs?
+ dual origin
+ move database files to /var/db/portmanager
+ test in 6.0
+- update web site
++ use signal to shutdown with <ctl> c
+ valgrind clean
++c/w (yes/no/auto yes to all) [y/n/a] [y]
+ c/w --resume option for forced modes
+ c/w -sl
+ c/w -slid
+@@ -29,6 +25,7 @@
+ c/w test moved ports
+ c/w three strikes
+ c/w update man pages
++c/w update web site
+
+ portmanager.c - passes argv, arc to MGPMrCommandLine.c
+
--- portmanager-0.3.2_1.diff ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list