Add Dep.Rel() method and a couple of Selection constructors
authorMichael Schroeder <mls@suse.de>
Wed, 5 Dec 2012 12:31:53 +0000 (13:31 +0100)
committerMichael Schroeder <mls@suse.de>
Wed, 5 Dec 2012 12:31:53 +0000 (13:31 +0100)
bindings/solv.i
examples/p5solv
examples/pysolv
examples/rbsolv

index bc3f1ab..654ea86 100644 (file)
@@ -1317,6 +1317,12 @@ typedef struct {
   Selection *Selection() {
     return new_Selection($self);
   }
+  %newobject Selection_all;
+  Selection *Selection_all(int setflags=0) {
+    Selection *sel = new_Selection($self);
+    queue_push2(&sel->q, SOLVER_SOLVABLE_ALL | setflags, 0);
+    return sel;
+  }
   %newobject select;
   Selection *select(const char *name, int flags) {
     Selection *sel = new_Selection($self);
@@ -1512,6 +1518,14 @@ typedef struct {
     return new_XRepodata($self, 1);
   }
 
+  %newobject Selection;
+  Selection *Selection(int setflags=0) {
+    Selection *sel = new_Selection($self->pool);
+    setflags |= SOLVER_SETREPO;
+    queue_push2(&sel->q, SOLVER_SOLVABLE_REPO | setflags, $self->repoid);
+    return sel;
+  }
+
   bool __eq__(Repo *repo) {
     return $self == repo;
   }
@@ -1920,6 +1934,40 @@ typedef struct {
     s->id = id;
     return s;
   }
+  %newobject Rel;
+  Dep *Rel(int flags, DepId evrid, bool create=1) {
+    Id id = pool_rel2id($self->pool, $self->id, evrid, flags, create);
+    if (!id)
+      return 0;
+    return new_Dep($self->pool, id);
+  }
+  %newobject Selection_name;
+  Selection *Selection_name(int setflags=0) {
+    Selection *sel = new_Selection($self->pool);
+    if (ISRELDEP($self->id)) {
+      Reldep *rd = GETRELDEP($self->pool, $self->id);
+      if (rd->flags == REL_EQ) {
+        setflags |= $self->pool->disttype == DISTTYPE_DEB || strchr(pool_id2str($self->pool, rd->evr), '-') != 0 ? SOLVER_SETEVR : SOLVER_SETEV;
+        if (ISRELDEP(rd->name))
+          rd = GETRELDEP($self->pool, rd->name);
+      }
+      if (rd->flags == REL_ARCH)
+        setflags |= SOLVER_SETARCH;
+    }
+    queue_push2(&sel->q, SOLVER_SOLVABLE_NAME | setflags, $self->id);
+    return sel;
+  }
+  %newobject Selection_provides;
+  Selection *Selection_provides(int setflags=0) {
+    Selection *sel = new_Selection($self->pool);
+    if (ISRELDEP($self->id)) {
+      Reldep *rd = GETRELDEP($self->pool, $self->id);
+      if (rd->flags == REL_ARCH)
+        setflags |= SOLVER_SETARCH;
+    }
+    queue_push2(&sel->q, SOLVER_SOLVABLE_PROVIDES | setflags, $self->id);
+    return sel;
+  }
   const char *str() {
     return pool_dep2str($self->pool, $self->id);
   }
@@ -2165,6 +2213,13 @@ typedef struct {
     solvable_add_deparray(s, keyname, id, marker);
   }
 
+  %newobject Selection;
+  Selection *Selection(int setflags=0) {
+    Selection *sel = new_Selection($self->pool);
+    queue_push2(&sel->q, SOLVER_SOLVABLE | setflags, $self->id);
+    return sel;
+  }
+
   bool __eq__(XSolvable *s) {
     return $self->pool == s->pool && $self->id == s->id;
   }
index fdb47d7..e02d6da 100755 (executable)
@@ -585,8 +585,7 @@ for my $arg (@ARGV) {
 }
 
 if (!@jobs && ($cmd eq 'up' || $cmd eq 'dup' || $cmd eq 'verify')) {
-  my $sel = $pool->Selection();
-  $sel->add_raw($solv::Job::SOLVER_SOLVABLE_ALL, 0);
+  my $sel = $pool->Selection_all();
   push @jobs, $sel->jobs($cmdactionmap{$cmd});
 }
 
index e898c09..b6b58ec 100755 (executable)
@@ -644,7 +644,7 @@ if options.repos:
         if hasattr(repo, 'handle'):
             if not repofilter:
                 repofilter = pool.Selection()
-            repofilter.add_raw(Job.SOLVER_SOLVABLE_REPO|Job.SOLVER_SETREPO|Job.SOLVER_SETVENDOR, repo.handle.id)
+            repofilter.add(repo.handle.Selection(Job.SOLVER_SETVENDOR))
 
 if cmd == 'search':
     pool.createwhatprovides()
@@ -713,8 +713,7 @@ for arg in args:
         jobs += sel.jobs(cmdactionmap[cmd])
 
 if not jobs and (cmd == 'up' or cmd == 'dup' or cmd == 'verify' or repofilter):
-    sel = pool.Selection()
-    sel.add_raw(Job.SOLVER_SOLVABLE_ALL, 0)
+    sel = pool.Selection_all()
     if repofilter:
        sel.filter(repofilter)
     jobs += sel.jobs(cmdactionmap[cmd])
index 367b6c3..d9b05c6 100755 (executable)
@@ -580,7 +580,7 @@ pool.createwhatprovides()
 
 jobs = []
 for arg in args
-  flags = Solv::Selection::SELECTION_NAME | Solv::Selection::SELECTION_PROVIDES|Solv::Selection::SELECTION_GLOB
+  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
   if arg =~ /^\//
     flags |= Solv::Selection::SELECTION_FILELIST
@@ -597,8 +597,7 @@ for arg in args
 end
 
 if jobs.empty? && (cmd == 'up' || cmd == 'dup' || cmd == 'verify')
-  sel = pool.Selection()
-  sel.add_raw(Solv::Job::SOLVER_SOLVABLE_ALL, 0)
+  sel = pool.Selection_all()
   jobs += sel.jobs(cmdactionmap[cmd])
 end