From: Keith M. <kei...@us...> - 2010-12-30 23:23:51
|
Update of /cvsroot/mingw/mingw-get/src In directory sfp-cvsdas-4.v30.ch3.sourceforge.com:/tmp/cvs-serv4681/src Modified Files: climain.cpp pkgbase.h pkgdeps.cpp pkgexec.cpp pkgtask.h Added Files: pkgshow.cpp Log Message: Add preliminary CLI support for "list" and "show" actions. Index: pkgtask.h =================================================================== RCS file: /cvsroot/mingw/mingw-get/src/pkgtask.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** pkgtask.h 17 Dec 2009 17:35:12 -0000 1.2 --- pkgtask.h 30 Dec 2010 23:23:43 -0000 1.3 *************** *** 6,10 **** * * Written by Keith Marshall <kei...@us...> ! * Copyright (C) 2009, MinGW Project * * --- 6,10 ---- * * Written by Keith Marshall <kei...@us...> ! * Copyright (C) 2009, 2010, MinGW Project * * *************** *** 37,40 **** --- 37,43 ---- action_upgrade, + action_list, + action_show, + action_update, *************** *** 48,51 **** --- 51,56 ---- #define ACTION_INSTALL (unsigned long)(action_install) #define ACTION_UPGRADE (unsigned long)(action_upgrade) + #define ACTION_LIST (unsigned long)(action_list) + #define ACTION_SHOW (unsigned long)(action_show) #define ACTION_UPDATE (unsigned long)(action_update) *************** *** 53,56 **** --- 58,63 ---- #define STRICTLY_LT STRICTLY_GT << 1 + #define ACTION_PRIMARY STRICTLY_LT << 1 + #ifndef EXTERN_C # ifdef __cplusplus Index: climain.cpp =================================================================== RCS file: /cvsroot/mingw/mingw-get/src/climain.cpp,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** climain.cpp 1 Nov 2010 21:09:01 -0000 1.9 --- climain.cpp 30 Dec 2010 23:23:43 -0000 1.10 *************** *** 99,127 **** dmh_notify( DMH_FATAL, "%s: invalid application profile\n", dbase.Value() ); ! switch( action ) { ! case ACTION_UPDATE: ! /* ! * If the requested action was "update", then we've already done it, ! * as a side effect of binding the cached repository catalogues... ! */ ! break; ! default: ! /* ...otherwise, we need to load the system map... ! */ ! dbase.LoadSystemMap(); ! /* ...schedule the specified action for each additional command line ! * argument, (each of which is assumed to represent a package name)... ! */ ! while( --argc ) ! dbase.Schedule( (unsigned long)(action), *++argv ); ! /* ...finally, execute all scheduled actions, and update the ! * system map accordingly. ! */ ! dbase.ExecuteActions(); ! dbase.UpdateSystemMap(); } --- 99,133 ---- dmh_notify( DMH_FATAL, "%s: invalid application profile\n", dbase.Value() ); ! /* If the requested action was "update", then we've already done it, ! * as a side effect of binding the cached repository catalogues... ! */ ! if( action != ACTION_UPDATE ) { ! /* ...otherwise, we need to load the system map... ! */ ! dbase.LoadSystemMap(); ! /* ...and invoke the appropriate action handler. ! */ ! switch( action ) ! { ! case ACTION_LIST: ! case ACTION_SHOW: ! dbase.DisplayPackageInfo( argc, argv ); ! break; ! default: ! /* ...schedule the specified action for each additional command line ! * argument, (each of which is assumed to represent a package name)... ! */ ! while( --argc ) ! dbase.Schedule( (unsigned long)(action), *++argv ); ! /* ...finally, execute all scheduled actions, and update the ! * system map accordingly. ! */ ! dbase.ExecuteActions(); ! dbase.UpdateSystemMap(); ! } } Index: pkgexec.cpp =================================================================== RCS file: /cvsroot/mingw/mingw-get/src/pkgexec.cpp,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** pkgexec.cpp 22 Oct 2010 22:08:52 -0000 1.11 --- pkgexec.cpp 30 Dec 2010 23:23:43 -0000 1.12 *************** *** 55,58 **** --- 55,61 ---- "upgrade", /* upgrade previously installed packages */ + "list", /* list packages and display related information */ + "show", /* a synonym for "list" */ + "update" /* update local copy of repository catalogues */ }; Index: pkgdeps.cpp =================================================================== RCS file: /cvsroot/mingw/mingw-get/src/pkgdeps.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** pkgdeps.cpp 19 Aug 2010 19:52:35 -0000 1.4 --- pkgdeps.cpp 30 Dec 2010 23:23:43 -0000 1.5 *************** *** 37,40 **** --- 37,53 ---- #include "pkgtask.h" + /* FIXME: the following declaration belongs in a future "pkgmsgs.h" + * header file, with the function implementation in a separate C or C++ + * messages source file, with appropriate internationalisation... + */ + EXTERN_C const char *pkgMsgUnknownPackage( void ); + + const char *pkgMsgUnknownPackage( void ) + { + /* FIXME: (see note above); return English language only, for now. + */ + return "%s: unknown package\n"; + } + static bool is_installed( pkgXmlNode *release ) { *************** *** 291,296 **** * consider further dependencies of the resolved prerequisite; * FIXME: do we need to do this, when performing a removal? */ ! ResolveDependencies( selected, rank ); } --- 304,311 ---- * consider further dependencies of the resolved prerequisite; * FIXME: do we need to do this, when performing a removal? + * Right now, I (KDM) don't think so... */ ! if( (request & ACTION_INSTALL) != 0 ) ! ResolveDependencies( selected, rank ); } *************** *** 359,363 **** } ! static inline pkgXmlNode *assert_installed( pkgXmlNode *current, pkgXmlNode *installed ) { --- 374,378 ---- } ! static pkgXmlNode *assert_installed( pkgXmlNode *current, pkgXmlNode *installed ) { *************** *** 384,388 **** */ pkgXmlNode *sysroot; const char *tarname; ! pkgSpecs lookup( tarname = current->GetPropVal( tarname_key, NULL ) ); if( (sysroot = current->GetSysRoot( lookup.GetSubSystemName() )) != NULL ) { --- 399,403 ---- */ pkgXmlNode *sysroot; const char *tarname; ! pkgSpecs lookup( current->GetPropVal( tarname_key, NULL ) ); if( (sysroot = current->GetSysRoot( lookup.GetSubSystemName() )) != NULL ) { *************** *** 414,418 **** /* ...check if it matches the look-up criteria. */ ! pkgSpecs chk( ref->GetPropVal( tarname_key, NULL ) ); if( assert_unmatched( chk.GetPackageName(), refname, pkgname, alias ) || assert_unmatched( chk.GetComponentClass(), cptname, NULL, NULL ) --- 429,433 ---- /* ...check if it matches the look-up criteria. */ ! pkgSpecs chk( tarname = ref->GetPropVal( tarname_key, NULL ) ); if( assert_unmatched( chk.GetPackageName(), refname, pkgname, alias ) || assert_unmatched( chk.GetComponentClass(), cptname, NULL, NULL ) *************** *** 453,456 **** --- 468,482 ---- } + void pkgActionItem::ConfirmInstallationStatus() + { + /* Set the "to_remove" selection in an action item to match the installed + * package entry, even when the release in question is no longer enumerated + * in the package catalogue; (used to identify any installed version when + * compiling a package reference listing). + */ + selection[to_remove] + = assert_installed( selection[to_install], selection[to_remove] ); + } + void pkgXmlDocument::Schedule( unsigned long action, const char* name ) { *************** *** 491,494 **** --- 517,525 ---- request = action; + /* Any action request processed here is, by definition, + * a request for a primary action; mark it as such. + */ + action |= ACTION_PRIMARY; + /* For each candidate release in turn... */ *************** *** 529,532 **** --- 560,571 ---- */ ResolveDependencies( upgrade, Schedule( action, latest )); + + else + /* attempting ACTION_UPGRADE or ACTION_REMOVE + * is an error; diagnose it. + */ + dmh_notify( DMH_ERROR, "%s %s: package is not installed\n", + action_name( action ), name + ); } *************** *** 570,574 **** * diagnose as a non-fatal error. */ ! dmh_notify( DMH_ERROR, "%s: unknown package\n", name ); } --- 609,613 ---- * diagnose as a non-fatal error. */ ! dmh_notify( DMH_ERROR, pkgMsgUnknownPackage(), name ); } Index: pkgbase.h =================================================================== RCS file: /cvsroot/mingw/mingw-get/src/pkgbase.h,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** pkgbase.h 19 Aug 2010 19:52:35 -0000 1.10 --- pkgbase.h 30 Dec 2010 23:23:43 -0000 1.11 *************** *** 167,171 **** * for a specified installed subsystem. */ ! pkgXmlNode *GetSysRoot( const char *subsystem ); pkgXmlNode *GetInstallationRecord( const char* ); --- 167,171 ---- * for a specified installed subsystem. */ ! pkgXmlNode *GetSysRoot( const char* ); pkgXmlNode *GetInstallationRecord( const char* ); *************** *** 174,179 **** * which themselves exhibit a specified tagname. */ ! pkgXmlNode* FindFirstAssociate( const char* tagname ); ! pkgXmlNode* FindNextAssociate( const char* tagname ); /* Specific to XML node elements of type "release", --- 174,179 ---- * which themselves exhibit a specified tagname. */ ! pkgXmlNode* FindFirstAssociate( const char* ); ! pkgXmlNode* FindNextAssociate( const char* ); /* Specific to XML node elements of type "release", *************** *** 260,263 **** --- 260,264 ---- return selection[ mode ]; } + void ConfirmInstallationStatus(); /* Method for processing all scheduled actions. *************** *** 365,368 **** --- 366,373 ---- pkgXmlNode* FindPackageByName( const char*, const char* = NULL ); + /* Method to display information about packages. + */ + void DisplayPackageInfo( int, char** ); + /* Method to resolve the dependencies of a specified package, * by walking the chain of references specified by "requires" --- NEW FILE: pkgshow.cpp --- /* * pkgshow.cpp * * $Id: pkgshow.cpp,v 1.1 2010/12/30 23:23:43 keithmarshall Exp $ * * Written by Keith Marshall <kei...@us...> * Copyright (C) 2009, 2010, MinGW Project * * * Implementation of the classes and methods required to support the * 'mingw-get list' and 'mingw-get show' commands. * * * This is free software. Permission is granted to copy, modify and * redistribute this software, under the provisions of the GNU General * Public License, Version 3, (or, at your option, any later version), * as published by the Free Software Foundation; see the file COPYING * for licensing details. * [...1028 lines suppressed...] } /* ...then repeat for the next package collection, * if any. */ grp = grp->FindNextAssociate( package_collection_key ); } } /* Regardless of how the print-out directory was compiled, * we hand it off to the common viewer, for output. */ dir->InOrder( &output ); /* Finally, we are done with the print-out directory, * so we may delete it. */ delete dir; } /* $RCSfile: pkgshow.cpp,v $: end of file */ |