libzypp  17.28.5
PoolQuery.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_POOLQUERY_H
13 #define ZYPP_POOLQUERY_H
14 
15 #include <iosfwd>
16 #include <set>
17 #include <map>
18 
19 #include <zypp/base/Regex.h>
20 #include <zypp/base/PtrTypes.h>
21 #include <zypp/base/Function.h>
22 
23 #include <zypp/sat/SolvIterMixin.h>
24 #include <zypp/sat/LookupAttr.h>
25 #include <zypp/base/StrMatcher.h>
26 #include <zypp/sat/Pool.h>
27 
29 namespace zypp
30 {
31 
32  namespace detail
33  {
34  class PoolQueryIterator;
35  }
36 
38  //
39  // CLASS NAME : PoolQuery
40  //
90  class PoolQuery : public sat::SolvIterMixin<PoolQuery, detail::PoolQueryIterator>
91  {
92  public:
93  typedef std::set<ResKind> Kinds;
94  typedef std::set<std::string> StrContainer;
95  typedef std::map<sat::SolvAttr, StrContainer> AttrRawStrMap;
96 
98  typedef unsigned int size_type;
99 
100  public:
101  typedef function<bool( const sat::Solvable & )> ProcessResolvable;
102 
103  PoolQuery();
104  ~PoolQuery();
105 
120  const_iterator begin() const;
121 
123  const_iterator end() const;
124 
126  bool empty() const;
127 
129  size_type size() const;
131 
136  void execute(ProcessResolvable fnc);
137 
153  void addKind(const ResKind & kind);
154 
161  void addRepo(const std::string &repoalias);
162  void setComment(const std::string & comment);
163 
164 
167 
172  ALL = 0, // both install filter and uninstall filter bits are 0
175  };
176 
178  void setInstalledOnly();
180  void setUninstalledOnly();
183 
185 
196  void addString(const std::string & value);
197 
223  void addAttribute( const sat::SolvAttr & attr, const std::string & value = "" );
224 
286  void addDependency( const sat::SolvAttr & attr, const std::string & name, const Rel & op, const Edition & edition );
288  void addDependency( const sat::SolvAttr & attr, const std::string & name, const Rel & op, const Edition & edition, const Arch & arch );
290  void addDependency( const sat::SolvAttr & attr, const std::string & name, const Rel & op, const Edition & edition, const Arch & arch, Match::Mode mode );
291 
293  void addDependency( const sat::SolvAttr & attr, const std::string & name, const Edition & edition )
294  { addDependency( attr, name, Rel::EQ, edition ); }
296  void addDependency( const sat::SolvAttr & attr, const std::string & name, const Edition & edition, const Arch & arch )
297  { addDependency( attr, name, Rel::EQ, edition, arch ); }
298 
300  void addDependency( const sat::SolvAttr & attr, const std::string & name )
301  { addDependency( attr, name, Rel::ANY, Edition() ); }
303  void addDependency( const sat::SolvAttr & attr, const std::string & name, const Arch & arch )
304  { addDependency( attr, name, Rel::ANY, Edition(), arch ); }
305 
307  void addDependency( const sat::SolvAttr & attr, const Rel & op, const Edition & edition )
308  { addDependency( attr, std::string(), op, edition ); }
310  void addDependency( const sat::SolvAttr & attr, const Rel & op, const Edition & edition, const Arch & arch )
311  { addDependency( attr, std::string(), op, edition, arch ); }
312 
314  void addDependency( const sat::SolvAttr & attr, const Edition & edition )
315  { addDependency( attr, std::string(), Rel::EQ, edition ); }
317  void addDependency( const sat::SolvAttr & attr, const Edition & edition, const Arch & arch )
318  { addDependency( attr, std::string(), Rel::EQ, edition, arch ); }
319 
322  { addDependency( attr, std::string(), Rel::ANY, Edition() ); }
324  void addDependency( const sat::SolvAttr & attr, const Arch & arch )
325  { addDependency( attr, std::string(), Rel::ANY, Edition(), arch ); }
326 
331  void addDependency( const sat::SolvAttr & attr, Capability cap_r );
333 
341  void setEdition(const Edition & edition, const Rel & op = Rel::EQ);
342 
356  void setCaseSensitive( bool value = true );
357 
363  void setFilesMatchFullPath( bool value = true );
365  void setFilesMatchBasename( bool value = true )
366  { setFilesMatchFullPath( !value ); }
367 
369  void setMatchExact();
371  void setMatchSubstring();
373  void setMatchGlob();
375  void setMatchRegex();
377  void setMatchWord();
378  //void setLocale(const Locale & locale);
380 
383 
385  const StrContainer & strings() const;
389  const AttrRawStrMap & attributes() const;
390 
391  const StrContainer & attribute(const sat::SolvAttr & attr) const;
392 
393  const Kinds & kinds() const;
394 
395  const StrContainer & repos() const;
396 
397  const std::string & comment() const;
398 
399  const Edition edition() const;
400  const Rel editionRel() const;
401 
405  bool caseSensitive() const;
406 
408  bool filesMatchFullPath() const;
410  bool filesMatchBasename() const
411  { return !filesMatchFullPath(); }
412 
413  bool matchExact() const;
414  bool matchSubstring() const;
415  bool matchGlob() const;
416  bool matchRegex() const;
417  bool matchWord() const;
418 
423  { return flags().mode(); }
424 
427 
438  bool recover( std::istream &str, char delim = '\n' );
439 
449  void serialize( std::ostream &str, char delim = '\n' ) const;
450 
452  std::string asString() const;
453 
454  bool operator<(const PoolQuery& b) const;
455  bool operator==(const PoolQuery& b) const;
456  bool operator!=(const PoolQuery& b) const { return !(*this == b ); }
457 
458  // low level API
459 
466  Match flags() const;
467 
474  void setFlags( const Match & flags );
475 
476  public:
478  void setRequireAll( bool require_all = true ) ZYPP_DEPRECATED;
480  bool requireAll() const ZYPP_DEPRECATED;
481 
482  public:
483  class Impl;
484  private:
487  };
489 
491  std::ostream & operator<<( std::ostream & str, const PoolQuery & obj );
492 
494  std::ostream & dumpOn( std::ostream & str, const PoolQuery & obj );
495 
497  namespace detail
498  {
499 
500  class PoolQueryMatcher;
501 
503  //
504  // CLASS NAME : PoolQuery::PoolQueryIterator
505  //
513  class PoolQueryIterator : public boost::iterator_adaptor<
514  PoolQueryIterator // Derived
515  , sat::LookupAttr::iterator // Base
516  , const sat::Solvable // Value
517  , boost::forward_traversal_tag // CategoryOrTraversal
518  , const sat::Solvable // Reference
519  >
520  {
521  typedef std::vector<sat::LookupAttr::iterator> Matches;
522  public:
524  typedef Matches::const_iterator matches_iterator;
525  public:
528  {}
529 
531  PoolQueryIterator( const shared_ptr<PoolQueryMatcher> & matcher_r )
532  : _matcher( matcher_r )
533  { increment(); }
534 
581  bool matchesEmpty() const { return ! _matcher; }
583  size_type matchesSize() const { return matches().size(); }
585  matches_iterator matchesBegin() const { return matches().begin(); }
587  matches_iterator matchesEnd() const { return matches().end(); }
589 
590  private:
591  friend class boost::iterator_core_access;
592 
594  { return base_reference().inSolvable(); }
595 
596  void increment();
597 
598  private:
599  const Matches & matches() const;
600 
601  private:
602  shared_ptr<PoolQueryMatcher> _matcher;
603  mutable shared_ptr<Matches> _matches;
604  };
606 
608  inline std::ostream & operator<<( std::ostream & str, const PoolQueryIterator & obj )
609  { return str << obj.base(); }
610 
612  std::ostream & dumpOn( std::ostream & str, const PoolQueryIterator & obj );
613 
615  } //namespace detail
617 
619  { return detail::PoolQueryIterator(); }
620 
622 } // namespace zypp
624 
625 #endif // ZYPP_POOLQUERY_H
PoolQueryIterator(const shared_ptr< PoolQueryMatcher > &matcher_r)
PoolQuery ctor.
Definition: PoolQuery.h:531
bool matchExact() const
Definition: PoolQuery.cc:1021
A Solvable object within the sat Pool.
Definition: Solvable.h:53
std::ostream & operator<<(std::ostream &str, const PoolQueryIterator &obj)
Definition: PoolQuery.h:608
void setUninstalledOnly()
Return only packages from repos other than .
Definition: PoolQuery.cc:971
StatusFilter
Installed status filter setters.
Definition: PoolQuery.h:171
const AttrRawStrMap & attributes() const
Map (map<SolvAttr, StrContainer>) of attribute values added via addAttribute(), addDep in string form...
Definition: PoolQuery.cc:982
void addAttribute(const sat::SolvAttr &attr, const std::string &value="")
Filter by the value of the specified attr attribute.
Definition: PoolQuery.cc:879
void addDependency(const sat::SolvAttr &attr, const Rel &op, const Edition &edition, const Arch &arch)
Definition: PoolQuery.h:310
std::set< ResKind > Kinds
Definition: PoolQuery.h:93
String matching option flags as used e.g.
Definition: StrMatcher.h:32
void addDependency(const sat::SolvAttr &attr, const std::string &name)
Definition: PoolQuery.h:300
void addDependency(const sat::SolvAttr &attr, const std::string &name, const Arch &arch)
Definition: PoolQuery.h:303
Architecture.
Definition: Arch.h:36
PoolQuery iterator as returned by PoolQuery::begin.
Definition: PoolQuery.h:513
void setFlags(const Match &flags)
Free function to set libsolv repo search flags.
Definition: PoolQuery.cc:965
Relational operators.
Definition: Rel.h:43
bool requireAll() const ZYPP_DEPRECATED
Definition: PoolQuery.cc:1055
void execute(ProcessResolvable fnc)
Executes the query with the current settings.
Definition: PoolQuery.cc:1050
void addString(const std::string &value)
Add a global query string.
Definition: PoolQuery.cc:876
void setFilesMatchBasename(bool value=true)
Definition: PoolQuery.h:365
static const Rel EQ
Definition: Rel.h:50
const StrContainer & strings() const
Search strings added via addString()
Definition: PoolQuery.cc:978
sat::SolvAttr attr
Definition: PoolQuery.cc:311
Match::Mode matchMode() const
Returns string matching mode as enum.
Definition: PoolQuery.h:422
void setMatchGlob()
Set to match globs.
Definition: PoolQuery.cc:960
void setMatchRegex()
Set to use the query strings as regexes.
Definition: PoolQuery.cc:959
String related utilities and Regular expression matching.
detail::PoolQueryIterator const_iterator
Definition: PoolQuery.h:97
bool operator<(const PoolQuery &b) const
Definition: PoolQuery.cc:1498
Definition: Arch.h:347
bool matchesEmpty() const
False unless this is the end iterator.
Definition: PoolQuery.h:581
void addDependency(const sat::SolvAttr &attr, const std::string &name, const Rel &op, const Edition &edition)
Query "name|global op edition".
Definition: PoolQuery.cc:882
void setCaseSensitive(bool value=true)
Turn case sentitivity on or off (unsets or sets SEARCH_NOCASE flag).
Definition: PoolQuery.cc:1013
void addDependency(const sat::SolvAttr &attr, const std::string &name, const Edition &edition)
Definition: PoolQuery.h:293
void addKind(const ResKind &kind)
Filter by selectable kind.
Definition: PoolQuery.cc:870
Edition represents [epoch:]version[-release]
Definition: Edition.h:60
static const Rel ANY
Definition: Rel.h:56
Mode mode() const
Return the mode part.
Definition: StrMatcher.cc:52
bool operator!=(const PoolQuery &b) const
Definition: PoolQuery.h:456
const Kinds & kinds() const
Definition: PoolQuery.cc:1000
void addDependency(const sat::SolvAttr &attr)
Definition: PoolQuery.h:321
Matches::size_type size_type
Definition: PoolQuery.h:523
size_type size() const
Number of solvables in the query result.
Definition: PoolQuery.cc:1037
bool operator==(const PoolQuery &b) const
Definition: PoolQuery.cc:1495
void serialize(std::ostream &str, char delim='\n') const
Writes a machine-readable string representation of the query to stream.
Definition: PoolQuery.cc:1387
const StrContainer & attribute(const sat::SolvAttr &attr) const
Definition: PoolQuery.cc:986
std::vector< sat::LookupAttr::iterator > Matches
Definition: PoolQuery.h:521
Base class providing common iterator types based on a Solvable iterator.
bool caseSensitive() const
returns true if search is case sensitive
Definition: PoolQuery.cc:1011
unsigned int size_type
Definition: PoolQuery.h:98
void setRequireAll(bool require_all=true) ZYPP_DEPRECATED
Definition: PoolQuery.cc:1054
Solvable attribute keys.
Definition: SolvAttr.h:40
bool filesMatchFullPath() const
Whether searching in filelists looks at the full path or just at the basenames.
Definition: PoolQuery.cc:1016
std::set< std::string > StrContainer
Definition: PoolQuery.h:94
void setStatusFilterFlags(StatusFilter flags)
Set status filter directly.
Definition: PoolQuery.cc:973
const StrContainer & repos() const
Definition: PoolQuery.cc:1004
void addRepo(const std::string &repoalias)
Filter by repo.
Definition: PoolQuery.cc:860
void setMatchWord()
Set substring to match words.
Definition: PoolQuery.cc:961
const_iterator begin() const
Query result accessers.
Definition: PoolQuery.cc:1844
const std::string & comment() const
Definition: PoolQuery.cc:1008
std::ostream & dumpOn(std::ostream &str, const PoolQuery &obj)
Definition: PoolQuery.cc:1492
matches_iterator matchesEnd() const
End of matches.
Definition: PoolQuery.h:587
const Rel editionRel() const
Definition: PoolQuery.cc:995
void setInstalledOnly()
Return only repo packages.
Definition: PoolQuery.cc:969
bool recover(std::istream &str, char delim='\n')
Reads from stream query.
Definition: PoolQuery.cc:1146
Mode
Mode flags (mutual exclusive).
Definition: StrMatcher.h:40
std::string asString() const
Return a human-readable description of the query.
Definition: PoolQuery.cc:1486
void addDependency(const sat::SolvAttr &attr, const std::string &name, const Edition &edition, const Arch &arch)
Definition: PoolQuery.h:296
const_iterator end() const
An iterator pointing to the end of the query result.
Definition: PoolQuery.h:618
SolvableIdType size_type
Definition: PoolMember.h:126
const Edition edition() const
Definition: PoolQuery.cc:993
Matches::const_iterator matches_iterator
Definition: PoolQuery.h:524
void setMatchSubstring()
Set to substring (the default).
Definition: PoolQuery.cc:957
std::map< sat::SolvAttr, StrContainer > AttrRawStrMap
Definition: PoolQuery.h:95
Meta-data query API.
Definition: PoolQuery.h:90
bool matchWord() const
Definition: PoolQuery.cc:1025
void setEdition(const Edition &edition, const Rel &op=Rel::EQ)
Set version condition.
Definition: PoolQuery.cc:951
void setMatchExact()
Set to match exact string instead of substring.
Definition: PoolQuery.cc:958
A sat capability.
Definition: Capability.h:59
shared_ptr< PoolQueryMatcher > _matcher
Definition: PoolQuery.h:602
StatusFilter statusFilterFlags() const
Definition: PoolQuery.cc:1027
bool matchSubstring() const
Definition: PoolQuery.cc:1022
Wrapper for const correct access via Smart pointer types.
Definition: PtrTypes.h:285
matches_iterator matchesBegin() const
Begin of matches.
Definition: PoolQuery.h:585
bool empty() const
Whether the result is empty.
Definition: PoolQuery.cc:1030
shared_ptr< Matches > _matches
Definition: PoolQuery.h:603
void addDependency(const sat::SolvAttr &attr, const Edition &edition, const Arch &arch)
Definition: PoolQuery.h:317
sat::Solvable dereference() const
Definition: PoolQuery.h:593
Match flags() const
Free function to get libsolv repo search flags.
Definition: PoolQuery.cc:963
void setFilesMatchFullPath(bool value=true)
If set (default), look at the full path when searching in filelists.
Definition: PoolQuery.cc:1018
RW_pointer< Impl > _pimpl
Pointer to implementation.
Definition: PoolQuery.h:483
void addDependency(const sat::SolvAttr &attr, const Arch &arch)
Definition: PoolQuery.h:324
Resolvable kinds.
Definition: ResKind.h:32
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:1
size_type matchesSize() const
Number of attribute matches.
Definition: PoolQuery.h:583
function< bool(const sat::Solvable &)> ProcessResolvable
Definition: PoolQuery.h:101
bool matchGlob() const
Definition: PoolQuery.cc:1023
void addDependency(const sat::SolvAttr &attr, const Rel &op, const Edition &edition)
Definition: PoolQuery.h:307
#define ZYPP_DEPRECATED
The ZYPP_DEPRECATED macro can be used to trigger compile-time warnings with gcc >= 3...
Definition: Globals.h:99
void setComment(const std::string &comment)
Definition: PoolQuery.cc:873
PoolQueryIterator()
Default ctor is also end.
Definition: PoolQuery.h:527
bool matchRegex() const
Definition: PoolQuery.cc:1024
bool filesMatchBasename() const
Definition: PoolQuery.h:410
void addDependency(const sat::SolvAttr &attr, const Edition &edition)
Definition: PoolQuery.h:314