diff --git a/src/configuration.cpp b/src/configuration.cpp index a00b25e..5a26185 100644 --- a/src/configuration.cpp +++ b/src/configuration.cpp @@ -298,6 +298,6 @@ bool Configuration::useRegex() const bool Configuration::followSoftdeps() const { - return m_followSoftdeps; + return ( m_followSoftdeps || m_parser->followSoftdeps() ); } diff --git a/src/installtransaction.cpp b/src/installtransaction.cpp index b56d055..6e14811 100644 --- a/src/installtransaction.cpp +++ b/src/installtransaction.cpp @@ -147,7 +147,7 @@ InstallTransaction::install( const ArgParser* parser ) // Set the update flag if the package is installed and out of date, // or if the user has forced a rebuild. // Proceed to the next target if package is installed and up to date. - if ( m_pkgDB->isInstalled( package->name(), false ) ) { + if ( m_pkgDB->isInstalled( it->first, false ) ) { VersionComparator::COMP_RESULT rpDiff = VersionComparator::compareVersions( m_repo->getPackageVersion( package->name() ), @@ -458,9 +458,7 @@ bool InstallTransaction::calculateDependencies() return false; } - vector treeWalk; - list< pair >::const_iterator it = - m_packages.begin(); + list>::const_iterator it = m_packages.begin(); for ( ; it != m_packages.end(); ++it ) { const Package* package = it->second; if ( package ) { @@ -504,7 +502,7 @@ void InstallTransaction::checkDependencies( bool greedy, if ( index == -1 ) { index = m_depList.size(); - if (( not greedy ) or ( m_pkgDB->isInstalled(package->name(),false) )) { + if ( ( not greedy ) or (isRequired( package->name() )) ) { m_depList.push_back( package->name() ); } } @@ -533,42 +531,32 @@ void InstallTransaction::checkDependencies( bool greedy, list::iterator it = deps.begin(); for ( ; it != deps.end(); ++it ) { string dep = *it; - if ( !dep.empty() ) { - string::size_type pos = dep.find_last_of( '/' ); - if ( pos != string::npos && (pos+1) < dep.length() ) { - dep = dep.substr( pos + 1 ); - } - const Package* p = m_repo->getPackage( dep ); - if ( p ) { - checkDependencies( greedy, p, index ); - } else { - m_missingPackages. - push_back( make_pair( dep, package->name() ) ); - } + if ( dep.empty() ) { continue; } + const Package* p = m_repo->getPackage( dep ); + if ( p ) { + checkDependencies( greedy, p, index ); + } else { + m_missingPackages. + push_back( make_pair( dep, package->name() ) ); } } } if ( (m_config->followSoftdeps()) and (!package->optionals().empty()) ) { - list softDeps; - split( package->optionals(), ',', softDeps ); - list::iterator it = softDeps.begin(); - for ( ; it != softDeps.end(); ++it ) { + list optionals; + split( package->optionals(), ',', optionals ); + list::iterator it = optionals.begin(); + for ( ; it != optionals.end(); ++it ) { string softdep = *it; - if ( !softdep.empty() ) { - string::size_type pos = softdep.find_last_of( '/' ); - if ( pos != string::npos && (pos+1) < softdep.length() ) { - softdep = softdep.substr( pos + 1 ); + if ( softdep.empty() ) { continue; } + if ( isRequired(softdep) ) { + const Package* p = m_repo->getPackage( softdep ); + if ( p ) { + checkDependencies( true, p, index ); + } else { + m_missingPackages. + push_back( make_pair( softdep, package->name() ) ); } - if ( m_pkgDB->isInstalled(softdep, false) or isRequested(softdep) ) { - const Package* p = m_repo->getPackage( softdep ); - if ( p ) { - checkDependencies( true, p, index ); - } else { - m_missingPackages. - push_back( make_pair( softdep, package->name() ) ); - } - } - } + } } } } @@ -578,12 +566,12 @@ void InstallTransaction::checkDependencies( bool greedy, } /*! - Method to determine whether a package was passed on the command line + Method to determine whether a soft dependency should be part of the transaction */ -bool InstallTransaction::isRequested(const string pname) { - list< pair >::iterator it = m_packages.begin(); +bool InstallTransaction::isRequired(const string &pname) { + list>::iterator it = m_packages.begin(); for ( ; it != m_packages.end(); ++it ) { - if ( it->first == pname ) { return true; } + if ( pname == it->first ) { return true; } } return false; } diff --git a/src/installtransaction.h b/src/installtransaction.h index e42e8bf..c653b3d 100644 --- a/src/installtransaction.h +++ b/src/installtransaction.h @@ -100,7 +100,7 @@ private: const ArgParser* parser, bool update, InstallInfo& info ) const; - bool isRequested(const string pname); + bool isRequired(const string &pname); PkgDB* m_pkgDB; DepResolver m_resolver;