]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Add experimental createshadow moveshadow raw_decisions methods
authorMichael Schroeder <mls@suse.de>
Mon, 12 Dec 2016 14:53:28 +0000 (15:53 +0100)
committerMichael Schroeder <mls@suse.de>
Mon, 12 Dec 2016 14:54:32 +0000 (15:54 +0100)
So patchcheck can be re-implemented in python (and moved out
of libsolv).

bindings/solv.i

index 03fd139471aa6c4f65a2ee12548b470cb6e8add0..0ab90d0052273ef43ba7a3082d85bdff33e3a82a 100644 (file)
@@ -2188,6 +2188,35 @@ rb_eval_string(
   }
 #endif
 
+  %newobject createshadow;
+  Repo *createshadow(const char *name) {
+    Repo *repo = repo_create($self->pool, name);
+    if ($self->idarraysize) {
+      repo_reserve_ids(repo, 0, $self->idarraysize);
+      memcpy(repo->idarraydata, $self->idarraydata, sizeof(Id) * $self->idarraysize);
+      repo->idarraysize = $self->idarraysize;
+    }
+    repo->start = $self->start;
+    repo->end = $self->end;
+    repo->nsolvables = $self->nsolvables;
+    return repo;
+  }
+
+  void moveshadow(Queue q) {
+    Pool *pool = $self->pool;
+    int i;
+    for (i = 0; i < q.count; i++) {
+      Solvable *s;
+      Id p = q.elements[i];
+      if (p < $self->start || p >= $self->end)
+        continue;
+      s = pool->solvables + p;
+      if ($self->idarraysize != s->repo->idarraysize)
+        continue;
+      s->repo = $self;
+    }
+  }
+
 #if defined(SWIGTCL)
   %rename("==") __eq__;
 #endif
@@ -3459,6 +3488,13 @@ rb_eval_string(
   bool write_testcase(const char *dir) {
     return testcase_write($self, dir, TESTCASE_RESULT_TRANSACTION | TESTCASE_RESULT_PROBLEMS, 0, 0);
   }
+
+  Queue raw_decisions() {
+    Queue q;
+    queue_init(&q);
+    solver_get_decisionqueue($self, &q);
+    return q;
+  }
 }
 
 %extend Transaction {