libzypp 17.28.8
PoolImpl.cc
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8\---------------------------------------------------------------------*/
12#include <iostream>
13#include <fstream>
14#include <boost/mpl/int.hpp>
15
16#include <zypp/base/Easy.h>
17#include <zypp/base/LogTools.h>
18#include <zypp/base/Gettext.h>
19#include <zypp/base/Exception.h>
20#include <zypp/base/Measure.h>
21#include <zypp/base/WatchFile.h>
22#include <zypp/base/Sysconfig.h>
23#include <zypp/base/IOStream.h>
24
25#include <zypp/ZConfig.h>
26
27#include <zypp/sat/detail/PoolImpl.h>
29#include <zypp/sat/Pool.h>
30#include <zypp/Capability.h>
31#include <zypp/Locale.h>
32#include <zypp/PoolItem.h>
33
36
37extern "C"
38{
39// Workaround libsolv project not providing a common include
40// directory. (the -devel package does, but the git repo doesn't).
41// #include <solv/repo_helix.h>
42// #include <solv/testcase.h>
43int repo_add_helix( ::Repo *repo, FILE *fp, int flags );
44int testcase_add_testtags(Repo *repo, FILE *fp, int flags);
45}
46
47using std::endl;
48
49#undef ZYPP_BASE_LOGGER_LOGGROUP
50#define ZYPP_BASE_LOGGER_LOGGROUP "zypp::satpool"
51
52// ///////////////////////////////////////////////////////////////////
53namespace zypp
54{
56 namespace env
57 {
59 inline int LIBSOLV_DEBUGMASK()
60 {
61 const char * envp = getenv("LIBSOLV_DEBUGMASK");
62 return envp ? str::strtonum<int>( envp ) : 0;
63 }
64 } // namespace env
66 namespace sat
67 {
68
70 namespace detail
71 {
72
73 // MPL checks for satlib constants we redefine to avoid
74 // includes and defines.
75 BOOST_MPL_ASSERT_RELATION( noId, ==, STRID_NULL );
77
80
81 BOOST_MPL_ASSERT_RELATION( solvablePrereqMarker, ==, SOLVABLE_PREREQMARKER );
82 BOOST_MPL_ASSERT_RELATION( solvableFileMarker, ==, SOLVABLE_FILEMARKER );
83
89
90 BOOST_MPL_ASSERT_RELATION( namespaceModalias, ==, NAMESPACE_MODALIAS );
91 BOOST_MPL_ASSERT_RELATION( namespaceLanguage, ==, NAMESPACE_LANGUAGE );
92 BOOST_MPL_ASSERT_RELATION( namespaceFilesystem, ==, NAMESPACE_FILESYSTEM );
93
95
96 const std::string & PoolImpl::systemRepoAlias()
97 {
98 static const std::string _val( "@System" );
99 return _val;
100 }
101
103 {
104 static const Pathname _val( "/etc/sysconfig/storage" );
105 return _val;
106 }
107
109
110 static void logSat( CPool *, void *data, int type, const char *logString )
111 {
112 // "1234567890123456789012345678901234567890
113 if ( 0 == strncmp( logString, "job: user installed", 19 ) )
114 return;
115 if ( 0 == strncmp( logString, "job: multiversion", 17 ) )
116 return;
117 if ( 0 == strncmp( logString, " - no rule created", 19 ) )
118 return;
119 if ( 0 == strncmp( logString, " next rules: 0 0", 19 ) )
120 return;
121
122 if ( type & (SOLV_FATAL|SOLV_ERROR) ) {
123 L_ERR("libsolv") << logString;
124 } else if ( type & SOLV_DEBUG_STATS ) {
125 L_DBG("libsolv") << logString;
126 } else {
127 L_MIL("libsolv") << logString;
128 }
129 }
130
132 {
133 // lhs: the namespace identifier, e.g. NAMESPACE:MODALIAS
134 // rhs: the value, e.g. pci:v0000104Cd0000840[01]sv*sd*bc*sc*i*
135 // return: 0 if not supportded
136 // 1 if supported by the system
137 // -1 AFAIK it's also possible to return a list of solvables that support it, but don't know how.
138
139 static const detail::IdType RET_unsupported = 0;
140 static const detail::IdType RET_systemProperty = 1;
141 switch ( lhs )
142 {
143 case NAMESPACE_LANGUAGE:
144 {
145 const TrackedLocaleIds & localeIds( reinterpret_cast<PoolImpl*>(data)->trackedLocaleIds() );
146 return localeIds.contains( IdString(rhs) ) ? RET_systemProperty : RET_unsupported;
147 }
148 break;
149
150 case NAMESPACE_MODALIAS:
151 {
152 // modalias strings in capability may be hexencoded because rpm does not allow
153 // ',', ' ' or other special chars.
154 return target::Modalias::instance().query( str::hexdecode( IdString(rhs).c_str() ) )
155 ? RET_systemProperty
156 : RET_unsupported;
157 }
158 break;
159
160 case NAMESPACE_FILESYSTEM:
161 {
162 const std::set<std::string> & requiredFilesystems( reinterpret_cast<PoolImpl*>(data)->requiredFilesystems() );
163 return requiredFilesystems.find( IdString(rhs).asString() ) != requiredFilesystems.end() ? RET_systemProperty : RET_unsupported;
164 }
165 break;
166
167 }
168
169 WAR << "Unhandled " << Capability( lhs ) << " vs. " << Capability( rhs ) << endl;
170 return RET_unsupported;
171 }
172
174 //
175 // METHOD NAME : PoolMember::myPool
176 // METHOD TYPE : PoolImpl
177 //
179 {
180 static PoolImpl _global;
181 return _global;
182 }
183
185 //
186 // METHOD NAME : PoolImpl::PoolImpl
187 // METHOD TYPE : Ctor
188 //
190 : _pool( ::pool_create() )
191 {
192 MIL << "Creating sat-pool." << endl;
193 if ( ! _pool )
194 {
195 ZYPP_THROW( Exception( _("Can not create sat-pool.") ) );
196 }
197 // by now we support only a RPM backend
198 ::pool_setdisttype(_pool, DISTTYPE_RPM );
199
200 // initialialize logging
202 {
203 ::pool_setdebugmask(_pool, env::LIBSOLV_DEBUGMASK() );
204 }
205 else
206 {
207 if ( getenv("ZYPP_LIBSOLV_FULLLOG") || getenv("ZYPP_LIBSAT_FULLLOG") )
208 ::pool_setdebuglevel( _pool, 3 );
209 else if ( getenv("ZYPP_FULLLOG") )
210 ::pool_setdebuglevel( _pool, 2 );
211 else
212 ::pool_setdebugmask(_pool, SOLV_DEBUG_JOB|SOLV_DEBUG_STATS );
213 }
214
215 ::pool_setdebugcallback( _pool, logSat, NULL );
216
217 // set namespace callback
218 _pool->nscallback = &nsCallback;
219 _pool->nscallbackdata = (void*)this;
220
221 // CAVEAT: We'd like to do it here, but in side the Pool ctor we can not
222 // yet use IdString types. We do in setDirty, when the 1st
223 // _retractedSpec.addProvides( Capability( Solvable::retractedToken.id() ) );
224 // _ptfMasterSpec.addProvides( Capability( Solvable::ptfMasterToken.id() ) );
225 // _ptfPackageSpec.addProvides( Capability( Solvable::ptfPackageToken.id() ) );
226 _retractedSpec.addIdenticalInstalledToo( true ); // retracted indicator is not part of the package!
227 }
228
230 //
231 // METHOD NAME : PoolImpl::~PoolImpl
232 // METHOD TYPE : Dtor
233 //
235 {
236 ::pool_free( _pool );
237 }
238
240
241 void PoolImpl::setDirty( const char * a1, const char * a2, const char * a3 )
242 {
243 if ( _retractedSpec.empty() ) {
244 // lazy init IdString types we can not use inside the ctor
248 }
249
250 if ( a1 )
251 {
252 if ( a3 ) MIL << a1 << " " << a2 << " " << a3 << endl;
253 else if ( a2 ) MIL << a1 << " " << a2 << endl;
254 else MIL << a1 << endl;
255 }
256 _serial.setDirty(); // pool content change
257 _availableLocalesPtr.reset(); // available locales may change
258 _multiversionListPtr.reset(); // re-evaluate ZConfig::multiversionSpec.
259 _needrebootSpec.setDirty(); // re-evaluate needrebootSpec
260
261 _retractedSpec.setDirty(); // re-evaluate blacklisted spec
262 _ptfMasterSpec.setDirty(); // --"--
263 _ptfPackageSpec.setDirty(); // --"--
264
265 depSetDirty(); // invaldate dependency/namespace related indices
266 }
267
268 void PoolImpl::localeSetDirty( const char * a1, const char * a2, const char * a3 )
269 {
270 if ( a1 )
271 {
272 if ( a3 ) MIL << a1 << " " << a2 << " " << a3 << endl;
273 else if ( a2 ) MIL << a1 << " " << a2 << endl;
274 else MIL << a1 << endl;
275 }
276 _trackedLocaleIdsPtr.reset(); // requested locales changed
277 depSetDirty(); // invaldate dependency/namespace related indices
278 }
279
280 void PoolImpl::depSetDirty( const char * a1, const char * a2, const char * a3 )
281 {
282 if ( a1 )
283 {
284 if ( a3 ) MIL << a1 << " " << a2 << " " << a3 << endl;
285 else if ( a2 ) MIL << a1 << " " << a2 << endl;
286 else MIL << a1 << endl;
287 }
288 ::pool_freewhatprovides( _pool );
289 }
290
291 void PoolImpl::prepare() const
292 {
293 // additional /etc/sysconfig/storage check:
294 static WatchFile sysconfigFile( sysconfigStoragePath(), WatchFile::NO_INIT );
295 if ( sysconfigFile.hasChanged() )
296 {
297 _requiredFilesystemsPtr.reset(); // recreated on demand
298 const_cast<PoolImpl*>(this)->depSetDirty( "/etc/sysconfig/storage change" );
299 }
300 if ( _watcher.remember( _serial ) )
301 {
302 // After repo/solvable add/remove:
303 // set pool architecture
304 ::pool_setarch( _pool, ZConfig::instance().systemArchitecture().asString().c_str() );
305 }
306 if ( ! _pool->whatprovides )
307 {
308 MIL << "pool_createwhatprovides..." << endl;
309
310 ::pool_addfileprovides( _pool );
311 ::pool_createwhatprovides( _pool );
312 }
313 if ( ! _pool->languages )
314 {
315 // initial seting
316 const_cast<PoolImpl*>(this)->setTextLocale( ZConfig::instance().textLocale() );
317 }
318 }
319
321
322 CRepo * PoolImpl::_createRepo( const std::string & name_r )
323 {
324 setDirty(__FUNCTION__, name_r.c_str() );
325 CRepo * ret = ::repo_create( _pool, name_r.c_str() );
326 if ( ret && name_r == systemRepoAlias() )
327 ::pool_set_installed( _pool, ret );
328 return ret;
329 }
330
332 {
333 setDirty(__FUNCTION__, repo_r->name );
334 if ( isSystemRepo( repo_r ) )
336 eraseRepoInfo( repo_r );
337 ::repo_free( repo_r, /*resusePoolIDs*/false );
338 // If the last repo is removed clear the pool to actually reuse all IDs.
339 // NOTE: the explicit ::repo_free above asserts all solvables are memset(0)!
340 if ( !_pool->urepos )
341 {
342 _serialIDs.setDirty(); // Indicate resusePoolIDs - ResPool must also invalidate it's PoolItems
343 ::pool_freeallrepos( _pool, /*resusePoolIDs*/true );
344 }
345 }
346
347 int PoolImpl::_addSolv( CRepo * repo_r, FILE * file_r )
348 {
349 setDirty(__FUNCTION__, repo_r->name );
350 int ret = ::repo_add_solv( repo_r, file_r, 0 );
351 if ( ret == 0 )
352 _postRepoAdd( repo_r );
353 return ret;
354 }
355
356 int PoolImpl::_addHelix( CRepo * repo_r, FILE * file_r )
357 {
358 setDirty(__FUNCTION__, repo_r->name );
359 int ret = ::repo_add_helix( repo_r, file_r, 0 );
360 if ( ret == 0 )
361 _postRepoAdd( repo_r );
362 return 0;
363 }
364
365 int PoolImpl::_addTesttags(CRepo *repo_r, FILE *file_r)
366 {
367 setDirty(__FUNCTION__, repo_r->name );
368 int ret = ::testcase_add_testtags( repo_r, file_r, 0 );
369 if ( ret == 0 )
370 _postRepoAdd( repo_r );
371 return 0;
372 }
373
375 {
376 if ( ! isSystemRepo( repo_r ) )
377 {
378 // Filter out unwanted archs
379 std::set<detail::IdType> sysids;
380 {
381 Arch::CompatSet sysarchs( Arch::compatSet( ZConfig::instance().systemArchitecture() ) );
382 for_( it, sysarchs.begin(), sysarchs.end() )
383 sysids.insert( it->id() );
384
385 // unfortunately libsolv treats src/nosrc as architecture:
386 sysids.insert( ARCH_SRC );
387 sysids.insert( ARCH_NOSRC );
388 }
389
390 detail::IdType blockBegin = 0;
391 unsigned blockSize = 0;
392 for ( detail::IdType i = repo_r->start; i < repo_r->end; ++i )
393 {
394 CSolvable * s( _pool->solvables + i );
395 if ( s->repo == repo_r && sysids.find( s->arch ) == sysids.end() )
396 {
397 // Remember an unwanted arch entry:
398 if ( ! blockBegin )
399 blockBegin = i;
400 ++blockSize;
401 }
402 else if ( blockSize )
403 {
404 // Free remembered entries
405 ::repo_free_solvable_block( repo_r, blockBegin, blockSize, /*resusePoolIDs*/false );
406 blockBegin = blockSize = 0;
407 }
408 }
409 if ( blockSize )
410 {
411 // Free remembered entries
412 ::repo_free_solvable_block( repo_r, blockBegin, blockSize, /*resusePoolIDs*/false );
413 blockBegin = blockSize = 0;
414 }
415 }
416 }
417
419 {
420 setDirty(__FUNCTION__, repo_r->name );
421 return ::repo_add_solvable_block( repo_r, count_r );
422 }
423
424 void PoolImpl::setRepoInfo( RepoIdType id_r, const RepoInfo & info_r )
425 {
426 CRepo * repo( getRepo( id_r ) );
427 if ( repo )
428 {
429 bool dirty = false;
430
431 // libsolv priority is based on '<', while yum's repoinfo
432 // uses 1(highest)->99(lowest). Thus we use -info_r.priority.
433 if ( repo->priority != int(-info_r.priority()) )
434 {
435 repo->priority = -info_r.priority();
436 dirty = true;
437 }
438
439 // subpriority is used to e.g. prefer http over dvd iff
440 // both have same priority.
441 int mediaPriority( media::MediaPriority( info_r.url() ) );
442 if ( repo->subpriority != mediaPriority )
443 {
444 repo->subpriority = mediaPriority;
445 dirty = true;
446 }
447
448 if ( dirty )
449 setDirty(__FUNCTION__, info_r.alias().c_str() );
450 }
451 _repoinfos[id_r] = info_r;
452 }
453
455
456 void PoolImpl::setTextLocale( const Locale & locale_r )
457 {
458 if ( ! locale_r )
459 {
460 // We need one, so "en" is the last resort
461 const char *needone[] { "en" };
462 ::pool_set_languages( _pool, needone, 1 );
463 return;
464 }
465
466 std::vector<std::string> fallbacklist;
467 for ( Locale l( locale_r ); l; l = l.fallback() )
468 {
469 fallbacklist.push_back( l.code() );
470 }
471 dumpRangeLine( MIL << "pool_set_languages: ", fallbacklist.begin(), fallbacklist.end() ) << endl;
472
473 std::vector<const char *> fallbacklist_cstr;
474 for_( it, fallbacklist.begin(), fallbacklist.end() )
475 {
476 fallbacklist_cstr.push_back( it->c_str() );
477 }
478 ::pool_set_languages( _pool, &fallbacklist_cstr.front(), fallbacklist_cstr.size() );
479 }
480
482 {
483 if ( _requestedLocalesTracker.setInitial( locales_r ) )
484 {
485 localeSetDirty( "initRequestedLocales" );
486 MIL << "Init RequestedLocales: " << _requestedLocalesTracker << " =" << locales_r << endl;
487 }
488 }
489
490 void PoolImpl::setRequestedLocales( const LocaleSet & locales_r )
491 {
492 if ( _requestedLocalesTracker.set( locales_r ) )
493 {
494 localeSetDirty( "setRequestedLocales" );
495 MIL << "New RequestedLocales: " << _requestedLocalesTracker << " =" << locales_r << endl;
496 }
497 }
498
499 bool PoolImpl::addRequestedLocale( const Locale & locale_r )
500 {
501 bool done = _requestedLocalesTracker.add( locale_r );
502 if ( done )
503 {
504 localeSetDirty( "addRequestedLocale", locale_r.code().c_str() );
505 MIL << "New RequestedLocales: " << _requestedLocalesTracker << " +" << locale_r << endl;
506 }
507 return done;
508 }
509
510 bool PoolImpl::eraseRequestedLocale( const Locale & locale_r )
511 {
512 bool done = _requestedLocalesTracker.remove( locale_r );
513 if ( done )
514 {
515 localeSetDirty( "addRequestedLocale", locale_r.code().c_str() );
516 MIL << "New RequestedLocales: " << _requestedLocalesTracker << " -" << locale_r << endl;
517 }
518 return done;
519 }
520
521
523 {
524 if ( ! _trackedLocaleIdsPtr )
525 {
527
530
531 // Add current locales+fallback except for added ones
532 for ( Locale lang: localesTracker.current() )
533 {
534 if ( localesTracker.wasAdded( lang ) )
535 continue;
536 for ( ; lang; lang = lang.fallback() )
537 { localeIds.current().insert( IdString(lang) ); }
538 }
539
540 // Add added locales+fallback except they are already in current
541 for ( Locale lang: localesTracker.added() )
542 {
543 for ( ; lang && localeIds.current().insert( IdString(lang) ).second; lang = lang.fallback() )
544 { localeIds.added().insert( IdString(lang) ); }
545 }
546
547 // Add removed locales+fallback except they are still in current
548 for ( Locale lang: localesTracker.removed() )
549 {
550 for ( ; lang && ! localeIds.current().count( IdString(lang) ); lang = lang.fallback() )
551 { localeIds.removed().insert( IdString(lang) ); }
552 }
553
554 // bsc#1155678: We try to differ between an empty RequestedLocales
555 // and one containing 'en' (explicit or as fallback). An empty RequestedLocales
556 // should not even drag in recommended 'en' packages. So we no longer enforce
557 // 'en' being in the set.
558 }
559 return *_trackedLocaleIdsPtr;
560 }
561
562
563 static void _getLocaleDeps( const Capability & cap_r, LocaleSet & store_r )
564 {
565 // Collect locales from any 'namespace:language(lang)' dependency
566 CapDetail detail( cap_r );
567 if ( detail.kind() == CapDetail::EXPRESSION )
568 {
569 switch ( detail.capRel() )
570 {
573 // expand
574 _getLocaleDeps( detail.lhs(), store_r );
575 _getLocaleDeps( detail.rhs(), store_r );
576 break;
577
579 if ( detail.lhs().id() == NAMESPACE_LANGUAGE )
580 {
581 store_r.insert( Locale( IdString(detail.rhs().id()) ) );
582 }
583 break;
584
588 break; // unwanted
589 }
590 }
591 }
592
594 {
596 {
597 _availableLocalesPtr.reset( new LocaleSet );
598 LocaleSet & localeSet( *_availableLocalesPtr );
599
600 for ( const Solvable & pi : Pool::instance().solvables() )
601 {
602 for ( const Capability & cap : pi.supplements() )
603 {
604 _getLocaleDeps( cap, localeSet );
605 }
606 }
607 }
608 return *_availableLocalesPtr;
609 }
610
612
614 {
617
619 for ( const std::string & spec : ZConfig::instance().multiversionSpec() )
620 {
621 static const std::string prefix( "provides:" );
622 bool provides = str::hasPrefix( spec, prefix );
623
624 for ( Solvable solv : WhatProvides( Capability( provides ? spec.c_str() + prefix.size() : spec.c_str() ) ) )
625 {
626 if ( provides || solv.ident() == spec )
627 multiversionList.insert( solv );
628 }
629
631 MIL << "Multiversion install " << spec << ": " << (nsize-size) << " matches" << endl;
632 size = nsize;
633 }
634 }
635
637 { _multiversionListPtr.reset(); }
638
640 {
641 if ( ! _multiversionListPtr )
643 return *_multiversionListPtr;
644 }
645
646 bool PoolImpl::isMultiversion( const Solvable & solv_r ) const
647 { return multiversionList().contains( solv_r ); }
648
650
651 const std::set<std::string> & PoolImpl::requiredFilesystems() const
652 {
654 {
655 _requiredFilesystemsPtr.reset( new std::set<std::string> );
656 std::set<std::string> & requiredFilesystems( *_requiredFilesystemsPtr );
658 std::inserter( requiredFilesystems, requiredFilesystems.end() ) );
659 }
661 }
662
664 } // namespace detail
667 } // namespace sat
670} // namespace zypp
std::set< Arch, CompareByGT< Arch > > CompatSet
Reversed arch order, best Arch first.
Definition: Arch.h:117
static CompatSet compatSet(const Arch &targetArch_r)
Return a set of all Arch's compatibleWith a targetArch_r.
Definition: Arch.cc:554
Helper providing more detailed information about a Capability.
Definition: Capability.h:299
Capability rhs() const
Definition: Capability.h:354
Capability lhs() const
Definition: Capability.h:352
Kind kind() const
Definition: Capability.h:334
CapRel capRel() const
Definition: Capability.h:353
A sat capability.
Definition: Capability.h:60
sat::detail::IdType id() const
Expert backdoor.
Definition: Capability.h:253
Base class for Exception.
Definition: Exception.h:146
Access to the sat-pools string space.
Definition: IdString.h:43
'Language[_Country]' codes.
Definition: Locale.h:50
Locale fallback() const
Return the fallback locale for this locale, if no fallback exists the empty Locale::noCode.
Definition: Locale.cc:208
std::string code() const
Return the locale code asString.
Definition: Locale.h:88
What is known about a repository.
Definition: RepoInfo.h:72
Url url() const
Pars pro toto: The first repository url.
Definition: RepoInfo.h:131
unsigned priority() const
Repository priority for solver.
Definition: RepoInfo.cc:390
bool remember(unsigned serial_r) const
Return isDirty, storing serial_r as new value.
Definition: SerialNumber.h:160
Remember a files attributes to detect content changes.
Definition: WatchFile.h:50
bool hasChanged()
Definition: WatchFile.h:80
Locale textLocale() const
The locale for translated texts zypp uses.
Definition: ZConfig.cc:890
static ZConfig & instance()
Singleton ctor.
Definition: Resolver.cc:126
Derive a numeric priority from Url scheme according to zypp.conf(download.media_preference).
Definition: MediaPriority.h:44
std::string alias() const
unique identifier for this source.
static Pool instance()
Singleton ctor.
Definition: Pool.h:55
void clear()
Clear the queue.
Definition: Queue.cc:94
Solvable set wrapper to allow adding additional convenience iterators.
Definition: SolvableSet.h:36
size_type size() const
Size of the set.
Definition: SolvableSet.h:63
Container::size_type size_type
Definition: SolvableSet.h:42
bool insert(const TSolv &solv_r)
Insert a Solvable.
Definition: SolvableSet.h:88
bool contains(const TSolv &solv_r) const
Definition: SolvableSet.h:68
bool addIdenticalInstalledToo() const
Extend the provides set to include idential installed items as well.
bool empty() const
Whether neither idents nor provides are set.
void setDirty() const
Explicitly flag the cache as dirty, so it will be rebuilt on the next request.
void addProvides(Capability provides_r)
A all sat::Solvable matching this provides_r.
A Solvable object within the sat Pool.
Definition: Solvable.h:54
static const IdString ptfMasterToken
Indicator provides ptf()
Definition: Solvable.h:59
static const IdString ptfPackageToken
Indicator provides ptf-package()
Definition: Solvable.h:60
static const IdString retractedToken
Indicator provides retracted-patch-package()
Definition: Solvable.h:58
Container of Solvable providing a Capability (read only).
Definition: WhatProvides.h:89
sat::SolvableSpec _needrebootSpec
Solvables which should trigger the reboot-needed hint if installed/updated.
Definition: PoolImpl.h:374
scoped_ptr< TrackedLocaleIds > _trackedLocaleIdsPtr
Definition: PoolImpl.h:362
sat::SolvableSpec _retractedSpec
Blacklisted specs:
Definition: PoolImpl.h:377
scoped_ptr< LocaleSet > _availableLocalesPtr
Definition: PoolImpl.h:364
scoped_ptr< MultiversionList > _multiversionListPtr
Definition: PoolImpl.h:368
bool isSystemRepo(CRepo *repo_r) const
Definition: PoolImpl.h:100
static detail::IdType nsCallback(CPool *, void *data, detail::IdType lhs, detail::IdType rhs)
Callback to resolve namespace dependencies (language, modalias, filesystem, etc.).
Definition: PoolImpl.cc:131
CRepo * getRepo(RepoIdType id_r) const
Definition: PoolImpl.h:175
void setTextLocale(const Locale &locale_r)
Definition: PoolImpl.cc:456
void initRequestedLocales(const LocaleSet &locales_r)
Start tracking changes based on this locales_r.
Definition: PoolImpl.cc:481
sat::StringQueue _autoinstalled
Definition: PoolImpl.h:371
int _addTesttags(CRepo *repo_r, FILE *file_r)
Adding testtags file to a repo.
Definition: PoolImpl.cc:365
void multiversionListInit() const
Definition: PoolImpl.cc:613
const LocaleSet & getAvailableLocales() const
All Locales occurring in any repo.
Definition: PoolImpl.cc:593
std::map< RepoIdType, RepoInfo > _repoinfos
Additional RepoInfo.
Definition: PoolImpl.h:358
void _deleteRepo(CRepo *repo_r)
Delete repo repo_r from pool.
Definition: PoolImpl.cc:331
bool eraseRequestedLocale(const Locale &locale_r)
User change (tracked).
Definition: PoolImpl.cc:510
sat::SolvableSpec _ptfMasterSpec
Definition: PoolImpl.h:378
void eraseRepoInfo(RepoIdType id_r)
Definition: PoolImpl.h:217
const TrackedLocaleIds & trackedLocaleIds() const
Expanded _requestedLocalesTracker for solver.
Definition: PoolImpl.cc:522
void localeSetDirty(const char *a1=0, const char *a2=0, const char *a3=0)
Invalidate locale related housekeeping data.
Definition: PoolImpl.cc:268
scoped_ptr< std::set< std::string > > _requiredFilesystemsPtr
filesystems mentioned in /etc/sysconfig/storage
Definition: PoolImpl.h:382
base::SetTracker< LocaleSet > _requestedLocalesTracker
Definition: PoolImpl.h:361
void setRequestedLocales(const LocaleSet &locales_r)
User change (tracked).
Definition: PoolImpl.cc:490
const MultiversionList & multiversionList() const
Definition: PoolImpl.cc:639
CRepo * _createRepo(const std::string &name_r)
Creating a new repo named name_r.
Definition: PoolImpl.cc:322
SerialNumberWatcher _watcher
Watch serial number.
Definition: PoolImpl.h:356
SerialNumber _serial
Serial number - changes with each Pool content change.
Definition: PoolImpl.h:352
const std::set< std::string > & requiredFilesystems() const
accessor for etc/sysconfig/storage reading file on demand
Definition: PoolImpl.cc:651
void _postRepoAdd(CRepo *repo_r)
Helper postprocessing the repo after adding solv or helix files.
Definition: PoolImpl.cc:374
bool addRequestedLocale(const Locale &locale_r)
User change (tracked).
Definition: PoolImpl.cc:499
int _addSolv(CRepo *repo_r, FILE *file_r)
Adding solv file to a repo.
Definition: PoolImpl.cc:347
int _addHelix(CRepo *repo_r, FILE *file_r)
Adding helix file to a repo.
Definition: PoolImpl.cc:356
sat::SolvableSpec _ptfPackageSpec
Definition: PoolImpl.h:379
detail::SolvableIdType _addSolvables(CRepo *repo_r, unsigned count_r)
Adding Solvables to a repo.
Definition: PoolImpl.cc:418
SerialNumber _serialIDs
Serial number of IDs - changes whenever resusePoolIDs==true - ResPool must also invalidate it's PoolI...
Definition: PoolImpl.h:354
bool isMultiversion(const Solvable &solv_r) const
Definition: PoolImpl.cc:646
void prepare() const
Update housekeeping data (e.g.
Definition: PoolImpl.cc:291
static const std::string & systemRepoAlias()
Reserved system repository alias @System .
Definition: PoolImpl.cc:96
CPool * _pool
sat-pool.
Definition: PoolImpl.h:350
void setRepoInfo(RepoIdType id_r, const RepoInfo &info_r)
Also adjust repo priority and subpriority accordingly.
Definition: PoolImpl.cc:424
void setDirty(const char *a1=0, const char *a2=0, const char *a3=0)
Invalidate housekeeping data (e.g.
Definition: PoolImpl.cc:241
PoolImpl()
Default ctor.
Definition: PoolImpl.cc:189
void depSetDirty(const char *a1=0, const char *a2=0, const char *a3=0)
Invalidate housekeeping data (e.g.
Definition: PoolImpl.cc:280
bool query(IdString cap_r) const
Checks if a device on the system matches a modalias pattern.
Definition: Modalias.h:69
static Modalias & instance()
Singleton access.
Definition: Modalias.cc:219
std::map< std::string, std::string > read(const Pathname &_path)
Read sysconfig file path_r and return (key,valye) pairs.
Definition: Sysconfig.cc:34
int LIBSOLV_DEBUGMASK()
Definition: PoolImpl.cc:59
static const IdType namespaceLanguage(20)
static const IdType solvablePrereqMarker(15)
Internal ids satlib includes in dependencies.
static void _getLocaleDeps(const Capability &cap_r, LocaleSet &store_r)
Definition: PoolImpl.cc:563
static const IdType solvableFileMarker(16)
static const IdType emptyId(1)
static const IdType namespaceModalias(18)
typedef::s_Repo CRepo
Wrapped libsolv C data type exposed as backdoor.
Definition: PoolMember.h:63
static const IdType namespaceFilesystem(21)
static const IdType noId(0)
static const SolvableIdType noSolvableId(0)
Id to denote Solvable::noSolvable.
const Pathname & sysconfigStoragePath()
Definition: PoolImpl.cc:102
BOOST_MPL_ASSERT_RELATION(noId,==, STRID_NULL)
int IdType
Generic Id type.
Definition: PoolMember.h:104
typedef::s_Pool CPool
Wrapped libsolv C data type exposed as backdoor.
Definition: PoolMember.h:61
unsigned SolvableIdType
Id type to connect Solvable and sat-solvable.
Definition: PoolMember.h:125
static const SolvableIdType systemSolvableId(1)
Id to denote the usually hidden Solvable::systemSolvable.
CRepo * RepoIdType
Id type to connect Repo and sat-repo.
Definition: PoolMember.h:133
typedef::s_Solvable CSolvable
Wrapped libsolv C data type exposed as backdoor.
Definition: PoolMember.h:64
static void logSat(CPool *, void *data, int type, const char *logString)
Definition: PoolImpl.cc:110
std::string hexdecode(const C_Str &str_r)
Decode hexencoded XX sequences.
Definition: String.cc:145
bool hasPrefix(const C_Str &str_r, const C_Str &prefix_r)
Return whether str_r has prefix prefix_r.
Definition: String.h:1027
unsigned split(const C_Str &line_r, TOutputIterator result_r, const C_Str &sepchars_r=" \t", const Trim trim_r=NO_TRIM)
Split line_r into words.
Definition: String.h:531
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:2
std::ostream & dumpRangeLine(std::ostream &str, TIterator begin, TIterator end)
Print range defined by iterators (single line style).
Definition: LogTools.h:114
std::string asString(const TriBool &val_r, const std::string &istr_r=std::string(), const std::string &tstr_r=std::string(), const std::string &fstr_r=std::string())
Definition: TriBool.h:44
std::unordered_set< Locale > LocaleSet
Definition: Locale.h:27
int repo_add_helix(::Repo *repo, FILE *fp, int flags)
int testcase_add_testtags(Repo *repo, FILE *fp, int flags)
Track added/removed set items based on an initial set.
Definition: SetTracker.h:38
const set_type & current() const
Return the current set.
Definition: SetTracker.h:139
bool wasAdded(const key_type &key_r) const
Whether val_r is tracked as added.
Definition: SetTracker.h:132
const set_type & added() const
Return the set of added items.
Definition: SetTracker.h:142
const set_type & removed() const
Return the set of removed items.
Definition: SetTracker.h:145
bool contains(const key_type &key_r) const
Whether val_r is in the set.
Definition: SetTracker.h:129
static PoolImpl & myPool()
Definition: PoolImpl.cc:178
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
Definition: Easy.h:28
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.
Definition: Exception.h:392
#define _(MSG)
Definition: Gettext.h:37
#define L_ERR(GROUP)
Definition: Logger.h:107
#define MIL
Definition: Logger.h:96
#define WAR
Definition: Logger.h:97
#define L_MIL(GROUP)
Definition: Logger.h:105
#define L_DBG(GROUP)
Definition: Logger.h:104