bindings: add pool.errstr, make add_rpm/... return Solvable objects
authorMichael Schroeder <mls@suse.de>
Fri, 14 Jun 2013 09:50:12 +0000 (11:50 +0200)
committerMichael Schroeder <mls@suse.de>
Fri, 14 Jun 2013 09:50:12 +0000 (11:50 +0200)
bindings/solv.i
doc/libsolv-bindings.3
doc/libsolv-bindings.txt
examples/pysolv

index 139a9a5..ed609d3 100644 (file)
@@ -1248,6 +1248,7 @@ typedef struct {
   }
 
   Repo *installed;
+  const char * const errstr;
   %{
   SWIGINTERN void Pool_installed_set(Pool *pool, Repo *installed) {
     pool_set_installed(pool, installed);
@@ -1255,6 +1256,9 @@ typedef struct {
   Repo *Pool_installed_get(Pool *pool) {
     return pool->installed;
   }
+  const char *Pool_errstr_get(Pool *pool) {
+    return pool_errstr(pool);
+  }
   %}
 
   Queue matchprovidingids(const char *match, int flags) {
@@ -1430,16 +1434,18 @@ rb_eval_string(
   bool add_rpmdb_reffp(FILE *reffp, int flags = 0) {
     return repo_add_rpmdb_reffp($self, reffp, flags) == 0;
   }
-  Id add_rpm(const char *name, int flags = 0) {
-    return repo_add_rpm($self, name, flags);
+  %newobject add_rpm;
+  XSolvable *add_rpm(const char *name, int flags = 0) {
+    return new_XSolvable($self->pool, repo_add_rpm($self, name, flags));
   }
 #endif
 #ifdef ENABLE_RPMDB_PUBKEYS
   bool add_rpmdb_pubkeys(int flags = 0) {
     return repo_add_rpmdb_pubkeys($self, flags) == 0;
   }
-  Id add_pubkey(const char *key, int flags = 0) {
-    return repo_add_pubkey($self, key, flags);
+  %newobject add_pubkey;
+  XSolvable *add_pubkey(const char *key, int flags = 0) {
+    return new_XSolvable($self->pool, repo_add_pubkey($self, key, flags));
   }
 #endif
 #ifdef ENABLE_RPMMD
@@ -1463,8 +1469,9 @@ rb_eval_string(
   bool add_debpackages(FILE *fp, int flags = 0) {
     return repo_add_debpackages($self, fp, flags) == 0;
   }
-  Id add_deb(const char *name, int flags = 0) {
-    return repo_add_deb($self, name, flags);
+  %newobject add_deb;
+  XSolvable *add_deb(const char *name, int flags = 0) {
+    return new_XSolvable($self->pool, repo_add_deb($self, name, flags));
   }
 #endif
 #ifdef ENABLE_SUSEREPO
@@ -1493,8 +1500,9 @@ rb_eval_string(
   bool add_arch_local(const char *dir, int flags = 0) {
     return repo_add_arch_local($self, dir, flags) == 0;
   }
-  Id add_arch_pkg(const char *name, int flags = 0) {
-    return repo_add_arch_pkg($self, name, flags);
+  %newobject add_arch_pkg;
+  XSolvable *add_arch_pkg(const char *name, int flags = 0) {
+    return new_XSolvable($self->pool, repo_add_arch_pkg($self, name, flags));
   }
 #endif
   void internalize() {
index 3ac85c6..c29315f 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: Libsolv-Bindings
 .\"    Author: [see the "Author" section]
 .\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
-.\"      Date: 06/13/2013
+.\"      Date: 06/14/2013
 .\"    Manual: LIBSOLV
 .\"    Source: libsolv
 .\"  Language: English
 .\"
-.TH "LIBSOLV\-BINDINGS" "3" "06/13/2013" "libsolv" "LIBSOLV"
+.TH "LIBSOLV\-BINDINGS" "3" "06/14/2013" "libsolv" "LIBSOLV"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -452,6 +452,21 @@ Look up a Repository by its id\&.
 .\}
 .sp
 Define which repository contains all the installed packages\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fBconst char *errstr;\fR             /* read only */
+my \fI$err\fR \fB=\fR \fI$pool\fR\fB\->{errstr}\fR;
+\fIerr\fR \fB=\fR \fIpool\fR\fB\&.errstr\fR
+\fIerr\fR \fB=\fR \fIpool\fR\fB\&.errstr\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Return the last error string that was stored in the pool\&.
 .SS "CONSTANTS"
 .PP
 \fBPOOL_FLAG_PROMOTEEPOCH\fR
@@ -1685,9 +1700,9 @@ Add a single empty solvable to the repository\&. Returns a Solvable object, see
 .\}
 .nf
 \fBbool add_solv(const char *\fR\fIname\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
-\fI$repo\fR\fB\->add_solv(\fR\fI$name\fR\fB,\fR \fI$flags\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_solv(\fR\fIname\fR\fB,\fR \fIflags\fR\fB)\fR
-\fIrepo\fR\fB\&.add_solv(\fR\fIname\fR\fB,\fR \fIflags\fR\fB)\fR
+\fI$repo\fR\fB\->add_solv(\fR\fI$name\fR\fB)\fR;
+\fIrepo\fR\fB\&.add_solv(\fR\fIname\fR\fB)\fR
+\fIrepo\fR\fB\&.add_solv(\fR\fIname\fR\fB)\fR
 .fi
 .if n \{\
 .RE
@@ -1698,9 +1713,9 @@ Add a single empty solvable to the repository\&. Returns a Solvable object, see
 .\}
 .nf
 \fBbool add_solv(FILE *\fR\fIfp\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
-\fI$repo\fR\fB\->add_solv(\fR\fI$fp\fR\fB,\fR \fI$flags\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_solv(\fR\fIfp\fR\fB,\fR \fIflags\fR\fB)\fR
-\fIrepo\fR\fB\&.add_solv(\fR\fIfp\fR\fB,\fR \fIflags\fR\fB)\fR
+\fI$repo\fR\fB\->add_solv(\fR\fI$fp\fR\fB)\fR;
+\fIrepo\fR\fB\&.add_solv(\fR\fIfp\fR\fB)\fR
+\fIrepo\fR\fB\&.add_solv(\fR\fIfp\fR\fB)\fR
 .fi
 .if n \{\
 .RE
@@ -1713,9 +1728,9 @@ Read a \(lqsolv\(rq file and add its contents to the repository\&. These files c
 .\}
 .nf
 \fBbool add_rpmdb(int\fR \fIflags\fR \fB= 0)\fR
-\fI$repo\fR\fB\->add_rpmdb(\fR\fI$flags\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_rpmdb(\fR\fIflags\fR\fB)\fR
-\fIrepo\fR\fB\&.add_rpmdb(\fR\fIflags\fR\fB)\fR
+\fI$repo\fR\fB\->add_rpmdb()\fR;
+\fIrepo\fR\fB\&.add_rpmdb()\fR
+\fIrepo\fR\fB\&.add_rpmdb()\fR
 .fi
 .if n \{\
 .RE
@@ -1726,9 +1741,9 @@ Read a \(lqsolv\(rq file and add its contents to the repository\&. These files c
 .\}
 .nf
 \fBbool add_rpmdb_reffp(FILE *\fR\fIreffp\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
-\fI$repo\fR\fB\->add_rpmdb_reffp(\fR\fI$reffp\fR\fB,\fR \fI$flags\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_rpmdb_reffp(\fR\fI$reffp\fR\fB,\fR \fIflags\fR\fB)\fR
-\fIrepo\fR\fB\&.add_rpmdb_reffp(\fR\fI$reffp\fR\fB,\fR \fIflags\fR\fB)\fR
+\fI$repo\fR\fB\->add_rpmdb_reffp(\fR\fI$reffp\fR\fB)\fR;
+\fIrepo\fR\fB\&.add_rpmdb_reffp(\fR\fIreffp\fR\fB)\fR
+\fIrepo\fR\fB\&.add_rpmdb_reffp(\fR\fIreffp\fR\fB)\fR
 .fi
 .if n \{\
 .RE
@@ -1740,10 +1755,10 @@ Add the contents of the rpm database to the repository\&. If a solv file contain
 .RS 4
 .\}
 .nf
-\fBbool add_rpm(const char *\fR\fIname\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
-\fI$repo\fR\fB\->add_rpm(\fR\fI$name\fR\fB,\fR \fI$flags\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_rpm(\fR\fIname\fR\fB,\fR \fIflags\fR\fB)\fR
-\fIrepo\fR\fB\&.add_rpm(\fR\fIname\fR\fB,\fR \fIflags\fR\fB)\fR
+\fBSolvable add_rpm(const char *\fR\fIfilename\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
+my \fI$solvable\fR \fB=\fR \fI$repo\fR\fB\->add_rpm(\fR\fI$filename\fR\fB)\fR;
+\fIsolvable\fR \fB=\fR \fIrepo\fR\fB\&.add_rpm(\fR\fIfilename\fR\fB)\fR
+\fIsolvable\fR \fB=\fR \fIrepo\fR\fB\&.add_rpm(\fR\fIfilename\fR\fB)\fR
 .fi
 .if n \{\
 .RE
@@ -1770,10 +1785,10 @@ Add all pubkeys contained in the rpm database to the repository\&. Note that new
 .RS 4
 .\}
 .nf
-\fBbool add_pubkey(const char *\fR\fIkeyfile\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
-\fI$repo\fR\fB\->add_pubkey(\fR\fI$keyfile\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_pubkey(\fR\fI$keyfile\fR\fB)\fR
-\fIrepo\fR\fB\&.add_pubkey(\fR\fI$keyfile\fR\fB)\fR
+\fBSolvable add_pubkey(const char *\fR\fIkeyfile\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
+my \fI$solvable\fR \fB=\fR \fI$repo\fR\fB\->add_pubkey(\fR\fI$keyfile\fR\fB)\fR;
+\fIsolvable\fR \fB=\fR \fIrepo\fR\fB\&.add_pubkey(\fR\fIkeyfile\fR\fB)\fR
+\fIsolvable\fR \fB=\fR \fIrepo\fR\fB\&.add_pubkey(\fR\fIkeyfile\fR\fB)\fR
 .fi
 .if n \{\
 .RE
@@ -1786,9 +1801,9 @@ Add a pubkey from a file to the repository\&.
 .\}
 .nf
 \fBbool add_rpmmd(FILE *\fR\fIfp\fR\fB, const char *\fR\fIlanguage\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
-\fI$repo\fR\fB\->add_rpmmd(\fR\fI$fp\fR\fB,\fR \fI$language\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_rpmmd(\fR\fIfp\fR\fB,\fR \fIlanguage\fR\fB)\fR
-\fIrepo\fR\fB\&.add_rpmmd(\fR\fIfp\fR\fB,\fR \fIlanguage\fR\fB)\fR
+\fI$repo\fR\fB\->add_rpmmd(\fR\fI$fp\fR\fB,\fR \fIundef\fR\fB)\fR;
+\fIrepo\fR\fB\&.add_rpmmd(\fR\fIfp\fR\fB,\fR \fINone\fR\fB)\fR
+\fIrepo\fR\fB\&.add_rpmmd(\fR\fIfp\fR\fB,\fR \fInil\fR\fB)\fR
 .fi
 .if n \{\
 .RE
@@ -1875,10 +1890,10 @@ Add the contents of the debian repository metadata (the "packages" file) to the
 .RS 4
 .\}
 .nf
-\fBbool add_deb(const char *\fR\fIfilename\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
-\fI$repo\fR\fB\->add_deb(\fR\fI$filename\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_deb(\fR\fIfilename\fR\fB)\fR
-\fIrepo\fR\fB\&.add_deb(\fR\fIfilename\fR\fB)\fR
+\fBSolvable add_deb(const char *\fR\fIfilename\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
+my \fI$solvable\fR \fB=\fR \fI$repo\fR\fB\->add_deb(\fR\fI$filename\fR\fB)\fR;
+\fIsolvable\fR \fB=\fR \fIrepo\fR\fB\&.add_deb(\fR\fIfilename\fR\fB)\fR
+\fIsolvable\fR \fB=\fR \fIrepo\fR\fB\&.add_deb(\fR\fIfilename\fR\fB)\fR
 .fi
 .if n \{\
 .RE
@@ -1892,8 +1907,8 @@ Add the metadata of a single deb package to the repository\&.
 .nf
 \fBbool add_mdk(FILE *\fR\fIfp\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
 \fI$repo\fR\fB\->add_mdk(\fR\fI$fp\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_mdk(\fR\fI$fp\fR\fB)\fR
-\fIrepo\fR\fB\&.add_mdk(\fR\fI$fp\fR\fB)\fR
+\fIrepo\fR\fB\&.add_mdk(\fR\fIfp\fR\fB)\fR
+\fIrepo\fR\fB\&.add_mdk(\fR\fIfp\fR\fB)\fR
 .fi
 .if n \{\
 .RE
@@ -1907,8 +1922,8 @@ Add the contents of the mageia/mandriva repository metadata (the "synthesis\&.hd
 .nf
 \fBbool add_mdk_info(FILE *\fR\fIfp\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
 \fI$repo\fR\fB\->add_mdk(\fR\fI$fp\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_mdk(\fR\fI$fp\fR\fB)\fR
-\fIrepo\fR\fB\&.add_mdk(\fR\fI$fp\fR\fB)\fR
+\fIrepo\fR\fB\&.add_mdk(\fR\fIfp\fR\fB)\fR
+\fIrepo\fR\fB\&.add_mdk(\fR\fIfp\fR\fB)\fR
 .fi
 .if n \{\
 .RE
@@ -1922,8 +1937,8 @@ Extend the packages from the synthesis file with the info\&.xml and files\&.xml
 .nf
 \fBbool add_arch_repo(FILE *\fR\fIfp\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
 \fI$repo\fR\fB\->add_arch_repo(\fR\fI$fp\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_arch_repo(\fR\fI$fp\fR\fB)\fR
-\fIrepo\fR\fB\&.add_arch_repo(\fR\fI$fp\fR\fB)\fR
+\fIrepo\fR\fB\&.add_arch_repo(\fR\fIfp\fR\fB)\fR
+\fIrepo\fR\fB\&.add_arch_repo(\fR\fIfp\fR\fB)\fR
 .fi
 .if n \{\
 .RE
@@ -1937,8 +1952,8 @@ Add the contents of the archlinux repository metadata (the "\&.db\&.tar" file) t
 .nf
 \fBbool add_arch_local(const char *\fR\fIdir\fR\fB, int\fR \fIflags\fR \fB= 0)\fR
 \fI$repo\fR\fB\->add_arch_local(\fR\fI$dir\fR\fB)\fR;
-\fIrepo\fR\fB\&.add_arch_local(\fR\fI$dir\fR\fB)\fR
-\fIrepo\fR\fB\&.add_arch_local(\fR\fI$dir\fR\fB)\fR
+\fIrepo\fR\fB\&.add_arch_local(\fR\fIdir\fR\fB)\fR
+\fIrepo\fR\fB\&.add_arch_local(\fR\fIdir\fR\fB)\fR
 .fi
 .if n \{\
 .RE
index e190cb3..8d273ff 100644 (file)
@@ -235,6 +235,13 @@ Look up a Repository by its id.
 
 Define which repository contains all the installed packages.
 
+       const char *errstr;             /* read only */
+       my $err = $pool->{errstr};
+       err = pool.errstr
+       err = pool.errstr
+
+Return the last error string that was stored in the pool.
+
 === CONSTANTS ===
 
 *POOL_FLAG_PROMOTEEPOCH*::
@@ -965,37 +972,37 @@ Add a single empty solvable to the repository. Returns a Solvable object, see
 the Solvable class for more information.
 
        bool add_solv(const char *name, int flags = 0)
-       $repo->add_solv($name, $flags);
-       repo.add_solv(name, flags)
-       repo.add_solv(name, flags)
+       $repo->add_solv($name);
+       repo.add_solv(name)
+       repo.add_solv(name)
 
        bool add_solv(FILE *fp, int flags = 0)
-       $repo->add_solv($fp, $flags);
-       repo.add_solv(fp, flags)
-       repo.add_solv(fp, flags)
+       $repo->add_solv($fp);
+       repo.add_solv(fp)
+       repo.add_solv(fp)
 
 Read a ``solv'' file and add its contents to the repository. These files can be
 written with the write() method and are normally used as fast cache for
 repository metadata.
 
        bool add_rpmdb(int flags = 0)
-       $repo->add_rpmdb($flags);
-       repo.add_rpmdb(flags)
-       repo.add_rpmdb(flags)
+       $repo->add_rpmdb();
+       repo.add_rpmdb()
+       repo.add_rpmdb()
 
        bool add_rpmdb_reffp(FILE *reffp, int flags = 0)
-       $repo->add_rpmdb_reffp($reffp, $flags);
-       repo.add_rpmdb_reffp($reffp, flags)
-       repo.add_rpmdb_reffp($reffp, flags)
+       $repo->add_rpmdb_reffp($reffp);
+       repo.add_rpmdb_reffp(reffp)
+       repo.add_rpmdb_reffp(reffp)
 
 Add the contents of the rpm database to the repository. If a solv file
 containing an old version of the database is available, it can be passed as
 reffp to speed up reading.
 
-       bool add_rpm(const char *name, int flags = 0)
-       $repo->add_rpm($name, $flags);
-       repo.add_rpm(name, flags)
-       repo.add_rpm(name, flags)
+       Solvable add_rpm(const char *filename, int flags = 0)
+       my $solvable = $repo->add_rpm($filename);
+       solvable = repo.add_rpm(filename)
+       solvable = repo.add_rpm(filename)
 
 Add the metadata of a single rpm package to the repository.
 
@@ -1008,17 +1015,17 @@ Add all pubkeys contained in the rpm database to the repository. Note that
 newer rpm versions also allow to store the pubkeys in some directory instead
 of the rpm database.
 
-       bool add_pubkey(const char *keyfile, int flags = 0)
-       $repo->add_pubkey($keyfile);
-       repo.add_pubkey($keyfile)
-       repo.add_pubkey($keyfile)
+       Solvable add_pubkey(const char *keyfile, int flags = 0)
+       my $solvable = $repo->add_pubkey($keyfile);
+       solvable = repo.add_pubkey(keyfile)
+       solvable = repo.add_pubkey(keyfile)
 
 Add a pubkey from a file to the repository.
 
        bool add_rpmmd(FILE *fp, const char *language, int flags = 0)
-       $repo->add_rpmmd($fp, $language);
-       repo.add_rpmmd(fp, language)
-       repo.add_rpmmd(fp, language)
+       $repo->add_rpmmd($fp, undef);
+       repo.add_rpmmd(fp, None)
+       repo.add_rpmmd(fp, nil)
 
 Add metadata stored in the "rpm-md" format (i.e. from files in the ``repodata''
 directory) to a repository. Supported files are "primary", "filelists",
@@ -1070,41 +1077,41 @@ Add the contents of the debian installed package database to the repository.
 Add the contents of the debian repository metadata (the "packages" file)
 to the repository.
 
-       bool add_deb(const char *filename, int flags = 0)
-       $repo->add_deb($filename);
-       repo.add_deb(filename)
-       repo.add_deb(filename)
+       Solvable add_deb(const char *filename, int flags = 0)
+       my $solvable = $repo->add_deb($filename);
+       solvable = repo.add_deb(filename)
+       solvable = repo.add_deb(filename)
 
 Add the metadata of a single deb package to the repository.
 
        bool add_mdk(FILE *fp, int flags = 0)
        $repo->add_mdk($fp);
-       repo.add_mdk($fp)
-       repo.add_mdk($fp)
+       repo.add_mdk(fp)
+       repo.add_mdk(fp)
 
 Add the contents of the mageia/mandriva repository metadata (the
 "synthesis.hdlist" file) to the repository.
 
        bool add_mdk_info(FILE *fp, int flags = 0)
        $repo->add_mdk($fp);
-       repo.add_mdk($fp)
-       repo.add_mdk($fp)
+       repo.add_mdk(fp)
+       repo.add_mdk(fp)
 
 Extend the packages from the synthesis file with the info.xml and files.xml
 data. Do not forget to specify *REPO_EXTEND_SOLVABLES*.
 
        bool add_arch_repo(FILE *fp, int flags = 0)
        $repo->add_arch_repo($fp);
-       repo.add_arch_repo($fp)
-       repo.add_arch_repo($fp)
+       repo.add_arch_repo(fp)
+       repo.add_arch_repo(fp)
 
 Add the contents of the archlinux repository metadata (the ".db.tar" file) to
 the repository.
 
        bool add_arch_local(const char *dir, int flags = 0)
        $repo->add_arch_local($dir);
-       repo.add_arch_local($dir)
-       repo.add_arch_local($dir)
+       repo.add_arch_local(dir)
+       repo.add_arch_local(dir)
 
 Add the contents of the archlinux installed package database to the repository.
 The _dir_ parameter is usually set to "/var/lib/pacman/local".
index bc12766..da9971a 100755 (executable)
@@ -234,6 +234,7 @@ class repo_generic(dict):
     def writecachedrepo(self, ext, info=None):
         if 'incomplete' in self:
             return
+        tmpname = None
         try:
             if not os.path.isdir("/var/cache/solv"):
                 os.mkdir("/var/cache/solv", 0755)
@@ -273,7 +274,7 @@ class repo_generic(dict):
                         flags |= solv.Repo.REPO_LOCALPOOL
                     info.add_solv(nf, flags)
             os.rename(tmpname, self.cachepath(ext))
-        except IOError, e:
+        except (OSError, IOError), e:
             if tmpname:
                 os.unlink(tmpname)
                 
@@ -670,7 +671,11 @@ if cmd == 'list' or cmd == 'info' or cmd == 'install':
                 cmdlinerepo = repo_cmdline('@commandline', 'cmdline')
                 cmdlinerepo.load(pool)
                 cmdlinerepo['packages'] = {}
-            cmdlinerepo['packages'][arg] = cmdlinerepo.handle.add_rpm(arg, solv.Repo.REPO_REUSE_REPODATA|solv.Repo.REPO_NO_INTERNALIZE)
+            s = cmdlinerepo.handle.add_rpm(arg, solv.Repo.REPO_REUSE_REPODATA|solv.Repo.REPO_NO_INTERNALIZE)
+            if not s:
+               print pool.errstr
+               sys.exit(1)
+            cmdlinerepo['packages'][arg] = s
     if cmdlinerepo:
         cmdlinerepo.handle.internalize()
 
@@ -686,7 +691,7 @@ pool.createwhatprovides()
 jobs = []
 for arg in args:
     if cmdlinerepo and arg in cmdlinerepo['packages']:
-        jobs.append(pool.Job(solv.Job.SOLVER_SOLVABLE, cmdlinerepo['packages'][arg]))
+        jobs.append(pool.Job(solv.Job.SOLVER_SOLVABLE, cmdlinerepo['packages'][arg].id))
     else:
         flags = solv.Selection.SELECTION_NAME|solv.Selection.SELECTION_PROVIDES|solv.Selection.SELECTION_GLOB
         flags |= solv.Selection.SELECTION_CANON|solv.Selection.SELECTION_DOTARCH|solv.Selection.SELECTION_REL