libzypp 17.31.7
DefaultLoadSystem.cc
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8\---------------------------------------------------------------------*/
12#include <iostream>
13
14#include <zypp/base/LogTools.h>
15#include <zypp/PathInfo.h>
16
18
19#include <zypp/ZYppFactory.h>
21#include <zypp/Target.h>
22#include <zypp/RepoManager.h>
23#include <zypp/sat/Pool.h>
24
25using std::endl;
26
27#undef ZYPP_BASE_LOGGER_LOGGROUP
28#define ZYPP_BASE_LOGGER_LOGGROUP "zypp::misc"
29
31namespace zypp
32{
34 namespace misc
35 {
36
37 void defaultLoadSystem( const Pathname & sysRoot_r, LoadSystemFlags flags_r )
38 {
39 MIL << str::form( "*** Load system at '%s' (%lx)", sysRoot_r.c_str(), (unsigned long)flags_r ) << endl;
40
41 if ( ! PathInfo( sysRoot_r ).isDir() )
42 ZYPP_THROW( Exception(str::form("sysRoot_r argument needs to be a directory. (%s)", sysRoot_r.c_str())) );
43
44 if ( ZYppFactory::instance().haveZYpp() )
45 ZYPP_THROW( Exception("ZYpp instance is already created. (Call this method earlier.)") );
46
47 if ( flags_r.testFlag( LS_READONLY ) )
49
50 sat::Pool satpool( sat::Pool::instance() );
51
52 if ( 1 )
53 {
54 MIL << "*** load target '" << Repository::systemRepoAlias() << "'\t" << endl;
55 getZYpp()->initializeTarget( sysRoot_r );
56 getZYpp()->target()->load();
57 MIL << satpool.systemRepo() << endl;
58 }
59
60 if ( 1 )
61 {
62 RepoManager repoManager( sysRoot_r );
63 RepoInfoList repos = repoManager.knownRepositories();
64 for_( it, repos.begin(), repos.end() )
65 {
66 RepoInfo & nrepo( *it );
67
68 if ( ! nrepo.enabled() )
69 continue;
70
71 if ( ! flags_r.testFlag( LS_NOREFRESH ) )
72 {
73 if ( repoManager.isCached( nrepo )
74 && ( nrepo.type() == repo::RepoType::RPMPLAINDIR // refreshes always
75 || repoManager.checkIfToRefreshMetadata( nrepo, nrepo.url() ) == RepoManager::REFRESH_NEEDED ) )
76 {
77 MIL << str::form( "*** clean cache for repo '%s'\t", nrepo.name().c_str() ) << endl;
78 repoManager.cleanCache( nrepo );
79 MIL << str::form( "*** refresh repo '%s'\t", nrepo.name().c_str() ) << endl;
80 repoManager.refreshMetadata( nrepo );
81 }
82 }
83
84 if ( ! repoManager.isCached( nrepo ) )
85 {
86 MIL << str::form( "*** build cache for repo '%s'\t", nrepo.name().c_str() ) << endl;
87 repoManager.buildCache( nrepo );
88 }
89
90 MIL << str::form( "*** load repo '%s'\t", nrepo.name().c_str() ) << std::flush;
91 try
92 {
93 repoManager.loadFromCache( nrepo );
94 MIL << satpool.reposFind( nrepo.alias() ) << endl;
95 }
96 catch ( const Exception & exp )
97 {
98 ERR << "*** load repo failed: " << exp.asString() + "\n" + exp.historyAsString() << endl;
99 ZYPP_RETHROW ( exp );
100 }
101 }
102 }
103 MIL << str::form( "*** Read system at '%s'", sysRoot_r.c_str() ) << endl;
104 }
105
107 } // namespace misc
110} // namespace zypp
RepoInfoList repos
Definition: RepoManager.cc:282
Base class for Exception.
Definition: Exception.h:146
std::string historyAsString() const
The history as string.
Definition: Exception.cc:146
std::string asString() const
Error message provided by dumpOn as string.
Definition: Exception.cc:75
What is known about a repository.
Definition: RepoInfo.h:72
repo::RepoType type() const
Type of repository,.
Definition: RepoInfo.cc:689
Url url() const
Pars pro toto: The first repository url.
Definition: RepoInfo.h:131
static const std::string & systemRepoAlias()
Reserved system repository alias @System .
Definition: Repository.cc:37
static ZYppFactory instance()
Singleton ctor.
Definition: ZYppFactory.cc:353
Wrapper class for stat/lstat.
Definition: PathInfo.h:221
const char * c_str() const
String representation.
Definition: Pathname.h:110
std::string name() const
Repository name.
bool enabled() const
If enabled is false, then this repository must be ignored as if does not exists, except when checking...
std::string alias() const
unique identifier for this source.
Global sat-pool.
Definition: Pool.h:47
Repository reposFind(const std::string &alias_r) const
Find a Repository named alias_r.
Definition: Pool.cc:163
static Pool instance()
Singleton ctor.
Definition: Pool.h:55
Repository systemRepo()
Return the system repository, create it if missing.
Definition: Pool.cc:178
@ LS_READONLY
// Create readonly ZYpp instance.
@ LS_NOREFRESH
// Don't refresh existing repos.
void defaultLoadSystem(const Pathname &sysRoot_r, LoadSystemFlags flags_r)
Create the ZYpp instance and load target and enabled repositories.
std::string form(const char *format,...) __attribute__((format(printf
Printf style construction of std::string.
Definition: String.cc:36
void IWantIt() ZYPP_DEPRECATED
Definition: ZYppFactory.cc:84
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:2
creates and provides information about known sources.
Definition: RepoManager.cc:530
@ REFRESH_NEEDED
refresh is needed
Definition: RepoManager.h:197
RefreshCheckStatus checkIfToRefreshMetadata(const RepoInfo &info, const Url &url, RawMetadataRefreshPolicy policy)
bool isCached(const RepoInfo &info) const
Definition: RepoManager.cc:625
void loadFromCache(const RepoInfo &info, OPT_PROGRESS)
void refreshMetadata(const RepoInfo &info, RawMetadataRefreshPolicy policy, OPT_PROGRESS)
void buildCache(const RepoInfo &info, CacheBuildPolicy policy, OPT_PROGRESS)
void cleanCache(const RepoInfo &info, OPT_PROGRESS)
std::list< RepoInfo > knownRepositories() const
List of known repositories.
Definition: RepoManager.h:167
static const RepoType RPMPLAINDIR
Definition: RepoType.h:31
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
Definition: Easy.h:28
#define ZYPP_RETHROW(EXCPT)
Drops a logline and rethrows, updating the CodeLocation.
Definition: Exception.h:440
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.
Definition: Exception.h:428
#define MIL
Definition: Logger.h:96
#define ERR
Definition: Logger.h:98