1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/zypp_detail/ZYppImpl.cc
14 #include "zypp/TmpPath.h"
15 #include "zypp/base/Logger.h"
16 #include "zypp/base/String.h"
18 #include "zypp/zypp_detail/ZYppImpl.h"
19 #include "zypp/solver/detail/Helper.h"
20 #include "zypp/target/TargetImpl.h"
21 #include "zypp/ZYpp.h"
22 #include "zypp/NVRAD.h"
23 #include "zypp/DiskUsageCounter.h"
24 #include "zypp/NameKindProxy.h"
25 #include "zypp/Locks.h"
29 ///////////////////////////////////////////////////////////////////
31 { /////////////////////////////////////////////////////////////////
32 ///////////////////////////////////////////////////////////////////
34 { /////////////////////////////////////////////////////////////////
36 ///////////////////////////////////////////////////////////////////
38 // METHOD NAME : ZYppImpl::ZYppImpl
39 // METHOD TYPE : Constructor
43 , _resolver( new Resolver( ResPool::instance()) )
45 MIL << "Initializing keyring..." << std::endl;
46 //_keyring = new KeyRing(homePath() + Pathname("/keyring/all"), homePath() + Pathname("/keyring/trusted"));
47 _keyring = new KeyRing(tmpPath());
50 ///////////////////////////////////////////////////////////////////
52 // METHOD NAME : ZYppImpl::~ZYppImpl
53 // METHOD TYPE : Destructor
58 //------------------------------------------------------------------------
59 // add/remove resolvables
61 DiskUsageCounter::MountPointSet ZYppImpl::diskUsage()
65 setPartitions( DiskUsageCounter::detectMountPoints() );
67 return _disk_usage->disk_usage(pool());
70 void ZYppImpl::setPartitions(const DiskUsageCounter::MountPointSet &mp)
72 _disk_usage.reset(new DiskUsageCounter());
73 _disk_usage->setMountPoints(mp);
76 DiskUsageCounter::MountPointSet ZYppImpl::getPartitions() const
79 return _disk_usage->getMountPoints();
81 return DiskUsageCounter::detectMountPoints();
84 //------------------------------------------------------------------------
87 Target_Ptr ZYppImpl::target() const
90 ZYPP_THROW(Exception("Target not initialized."));
94 void ZYppImpl::initializeTarget(const Pathname & root)
96 MIL << "initTarget( " << root << endl;
98 if (_target->root() == root) {
99 MIL << "Repeated call to initializeTarget()" << endl;
102 #warning NEED SOME NEW WAY TO INDICATE NEDD OF TARGET RELOAD
104 removeInstalledResolvables( );
107 _target = new Target( root );
108 _target->buildCache();
111 void ZYppImpl::finishTarget()
113 #warning NEED SOME NEW WAY TO UNLOAD THE POOL
116 removeInstalledResolvables();
121 //------------------------------------------------------------------------
124 /** \todo Remove workflow from target, lot's of it could be done here,
125 * and target used for transact. */
126 ZYppCommitResult ZYppImpl::commit( const ZYppCommitPolicy & policy_r )
128 if ( getenv("ZYPP_TESTSUITE_FAKE_ARCH") )
130 ZYPP_THROW( Exception("ZYPP_TESTSUITE_FAKE_ARCH set. Commit not allowed and disabled.") );
133 MIL << "Attempt to commit (" << policy_r << ")" << endl;
135 ZYPP_THROW( Exception("Target not initialized.") );
137 ZYppCommitResult res = _target->_pimpl->commit( pool(), policy_r );
139 if (! policy_r.dryRun() ) {
140 // Tag target data invalid, so they are reloaded on the next call to
141 // target->resolvables(). Actually the target should do this without
144 #warning NEED SOME NEW WAY TO INDICATE NEDD OF TARGET RELOAD
146 removeInstalledResolvables();
147 if ( policy_r.syncPoolAfterCommit() )
149 // reload new status from target
150 addResolvables( _target->resolvables(), true );
155 MIL << "Commit (" << policy_r << ") returned: "
160 void ZYppImpl::installSrcPackage( const SrcPackage_constPtr & srcPackage_r )
163 ZYPP_THROW( Exception("Target not initialized.") );
164 _target->_pimpl->installSrcPackage( srcPackage_r );
167 //------------------------------------------------------------------------
170 Pathname ZYppImpl::homePath() const
171 { return _home_path.empty() ? Pathname("/var/lib/zypp") : _home_path; }
173 void ZYppImpl::setHomePath( const Pathname & path )
174 { _home_path = path; }
176 Pathname ZYppImpl::tmpPath() const
178 static TmpDir zypp_tmp_dir( TmpPath::defaultLocation(), "zypp." );
179 return zypp_tmp_dir.path();
182 int ZYppImpl::applyLocks()
184 #warning make the /etc/zypp/locks path an option zconfig.
185 Pathname locksrcPath( "/etc/zypp/locks" );
188 Target_Ptr trg( target() );
190 locksrcPath = trg->root() / locksrcPath;
194 // noop: Someone decided to let target() throw if the ptr is NULL ;(
198 PathInfo locksrc( locksrcPath );
199 if ( locksrc.isFile() )
201 MIL << "Reading locks from '" << locksrcPath << "'" << endl;
202 num = zypp::locks::readLocks( pool(), locksrcPath );
203 MIL << num << " items locked." << endl;
207 MIL << "No file '" << locksrcPath << "' to read locks from" << endl;
211 /******************************************************************
213 ** FUNCTION NAME : operator<<
214 ** FUNCTION TYPE : std::ostream &
216 std::ostream & operator<<( std::ostream & str, const ZYppImpl & obj )
218 return str << "ZYppImpl";
221 /////////////////////////////////////////////////////////////////
222 } // namespace zypp_detail
223 ///////////////////////////////////////////////////////////////////
224 /////////////////////////////////////////////////////////////////
226 ///////////////////////////////////////////////////////////////////