]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
- add solver_private.h, make repo_ functions return an int, make solver_solv return...
authorMichael Schroeder <mls@suse.de>
Wed, 25 May 2011 13:28:34 +0000 (15:28 +0200)
committerMichael Schroeder <mls@suse.de>
Wed, 25 May 2011 13:28:34 +0000 (15:28 +0200)
37 files changed:
examples/solv.c
ext/repo_content.c
ext/repo_content.h
ext/repo_deb.c
ext/repo_deb.h
ext/repo_deltainfoxml.h
ext/repo_helix.c
ext/repo_helix.h
ext/repo_products.h
ext/repo_releasefile_products.c
ext/repo_releasefile_products.h
ext/repo_repomdxml.h
ext/repo_rpmdb.c
ext/repo_rpmdb.h
ext/repo_rpmmd.c
ext/repo_rpmmd.h
ext/repo_susetags.c
ext/repo_susetags.h
ext/repo_updateinfoxml.c
ext/repo_updateinfoxml.h
ext/repo_write.c
ext/repo_write.h
ext/repo_zyppdb.h
src/libsolv.ver
src/policy.c
src/policy.h
src/pool.h
src/problems.c
src/repo.h
src/rules.c
src/solver.c
src/solver.h
src/solver_private.h [new file with mode: 0644]
src/solverdebug.c
tools/findfileconflicts.c
tools/installcheck.c
tools/patchcheck.c

index d8e1acca064ce7c273c28d5f257c7db12bb12269..2e8b343665a653a38987f55302273fd36eb01057 100644 (file)
@@ -2947,8 +2947,7 @@ rerunsolver:
       if (mainmode == MODE_ERASE || mainmode == MODE_ERASECLEAN)
        solv->allowuninstall = 1;       /* don't nag */
 
-      solver_solve(solv, &job);
-      if (!solv->problems.count)
+      if (!solver_solve(solv, &job))
        break;
       pcnt = solver_problem_count(solv);
       printf("Found %d problems:\n", pcnt);
index 29279cb080e75e80c374464e1ad09963bc6d5afb..102f4813ec1daac580142edd53209a817085293e 100644 (file)
@@ -196,7 +196,7 @@ add_multiple_urls(Repodata *data, Id handle, char *value, Id type)
  *
  */
 
-void
+int
 repo_add_content(Repo *repo, FILE *fp, int flags)
 {
   Pool *pool = repo->pool;
@@ -545,4 +545,5 @@ repo_add_content(Repo *repo, FILE *fp, int flags)
   join_freemem();
   if (!(flags & REPO_NO_INTERNALIZE))
     repodata_internalize(data);
+  return 0;
 }
index c2e79bc68e050fe8ca5d21bfced49866d1334e9d..2a70ce435ba8584ed1f6c7afc12803e877894add 100644 (file)
@@ -5,4 +5,4 @@
  * for further information
  */
 
-void repo_add_content(Repo *repo, FILE *fp, int flags);
+extern int repo_add_content(Repo *repo, FILE *fp, int flags);
index d299f9a1280faf6e41aa5cf1f918d17c1efbd2c7..6e89d195b8dc3016f089a02ba1e29c5a086e5646 100644 (file)
@@ -347,7 +347,7 @@ control2solvable(Solvable *s, Repodata *data, char *control)
     }
 }
 
-void
+int
 repo_add_debpackages(Repo *repo, FILE *fp, int flags)
 {
   Pool *pool = repo->pool;
@@ -409,9 +409,10 @@ repo_add_debpackages(Repo *repo, FILE *fp, int flags)
   sat_free(buf);
   if (!(flags & REPO_NO_INTERNALIZE))
     repodata_internalize(data);
+  return 0;
 }
 
-void
+int
 repo_add_debdb(Repo *repo, const char *rootdir, int flags)
 {
   FILE *fp;
@@ -425,9 +426,10 @@ repo_add_debdb(Repo *repo, const char *rootdir, int flags)
     }
   repo_add_debpackages(repo, fp, flags);
   fclose(fp);
+  return 0;
 }
 
-void
+int
 repo_add_debs(Repo *repo, const char **debs, int ndebs, int flags)
 {
   Pool *pool = repo->pool;
@@ -597,6 +599,7 @@ repo_add_debs(Repo *repo, const char **debs, int ndebs, int flags)
     }
   if (!(flags & REPO_NO_INTERNALIZE))
     repodata_internalize(data);
+  return 0;
 }
 
 Id
index ded3675ba0391ed1a548eda82f1fb0c775921455..4d3e019484802cd3074ab95ada0834aff66ba621 100644 (file)
@@ -5,9 +5,9 @@
  * for further information
  */
 
-extern void repo_add_debpackages(Repo *repo, FILE *fp, int flags);
-extern void repo_add_debdb(Repo *repo, const char *rootdir, int flags);
-extern void repo_add_debs(Repo *repo, const char **debs, int ndebs, int flags);
+extern int repo_add_debpackages(Repo *repo, FILE *fp, int flags);
+extern int repo_add_debdb(Repo *repo, const char *rootdir, int flags);
+extern int repo_add_debs(Repo *repo, const char **debs, int ndebs, int flags);
 extern Id repo_add_deb(Repo *repo, const char *deb, int flags);
 
 #define DEBS_ADD_WITH_PKGID    (1 << 8)
index 6621565f4c0a068668d63ae04fb58a0058b5a48e..6647b159249f7bb44c0871260c33dd502a79d9a6 100644 (file)
@@ -5,4 +5,4 @@
  * for further information
  */
 
-void repo_add_deltainfoxml(Repo *repo, FILE *fp, int flags);
+extern int repo_add_deltainfoxml(Repo *repo, FILE *fp, int flags);
index d5255f9f90aec48d9cea743162c1d4803d8b6f9a..9db6befca27e5e7a17ff5cdcfb9dde4918a64079 100644 (file)
@@ -805,7 +805,7 @@ characterData(void *userData, const XML_Char *s, int len)
  * 
  */
 
-void
+int
 repo_add_helix(Repo *repo, FILE *fp, int flags)
 {
   Pool *pool = repo->pool;
@@ -868,4 +868,5 @@ repo_add_helix(Repo *repo, FILE *fp, int flags)
   POOL_DEBUG(SAT_DEBUG_STATS, "repo_add_helix took %d ms\n", sat_timems(now));
   POOL_DEBUG(SAT_DEBUG_STATS, "repo size: %d solvables\n", repo->nsolvables);
   POOL_DEBUG(SAT_DEBUG_STATS, "repo memory used: %d K incore, %d K idarray\n", data->incoredatalen/1024, repo->idarraysize / (int)(1024/sizeof(Id)));
+  return 0;
 }
index 0b2bec96200cf20f0f354ad15912af71d6e30b8c..d883dd98699cd758f86562c3f60a46232b432959 100644 (file)
@@ -21,7 +21,7 @@ extern "C" {
 #include "pool.h"
 #include "repo.h"
 
-extern void repo_add_helix(Repo *repo, FILE *fp, int flags);
+extern int repo_add_helix(Repo *repo, FILE *fp, int flags);
 
 #ifdef __cplusplus
 }
index 6f4ce8538ac1dd3f7a690a0a5de6bf6055d530d1..748b8135a5f5da792f99dea471128844833902cd 100644 (file)
@@ -5,5 +5,5 @@
  * for further information
  */
 
-void repo_add_code11_products(Repo *repo, const char *dirpath, int flags);
-void repo_add_products(Repo *repo, const char *proddir, const char *root, int flags);
+extern int repo_add_code11_products(Repo *repo, const char *dirpath, int flags);
+extern int repo_add_products(Repo *repo, const char *proddir, const char *root, int flags);
index ec202a98801312ccb6a6a533d3e7656af400e406..7a7c217f3058efb1b3cac005677c90b954c9d107 100644 (file)
@@ -110,7 +110,7 @@ add_releasefile_product(Repo *repo, FILE *fp)
 }
 
 
-void
+int
 repo_add_releasefile_products(Repo *repo, const char *dirpath, int flags)
 {
   DIR *dir;
@@ -120,7 +120,7 @@ repo_add_releasefile_products(Repo *repo, const char *dirpath, int flags)
 
   dir = opendir(dirpath);
   if (!dir)
-    return;
+    return 0;
 
   while ((entry = readdir(dir)))
     {
@@ -145,5 +145,6 @@ repo_add_releasefile_products(Repo *repo, const char *dirpath, int flags)
 
   if (!(flags & REPO_NO_INTERNALIZE) && (flags & REPO_REUSE_REPODATA) != 0)
     repodata_internalize(repo_last_repodata(repo));
+  return 0;
 }
 
index 34311ac1bca01c64c1bc37a75194e15723470d9c..05359751ab0f0d7411e6cc2a26135cce04db1a1f 100644 (file)
@@ -5,4 +5,4 @@
  * for further information
  */
 
-void repo_add_releasefile_products(Repo *repo, const char *dirpath, int flags);
+extern int repo_add_releasefile_products(Repo *repo, const char *dirpath, int flags);
index 49d86fb5742119bde7e7fc6a6bf98cf9724ce8f0..90d9d693cd91241fa78034682df29be832a52ff5 100644 (file)
@@ -5,4 +5,4 @@
  * for further information
  */
 
-void repo_add_repomdxml(Repo *repo, FILE *fp, int flags);
+extern int repo_add_repomdxml(Repo *repo, FILE *fp, int flags);
index 0755fac48c91acc04aed044420a05e2b39b79d1e..e152a2ce13f57e7751021448cd20db5e2800d51a 100644 (file)
@@ -1362,7 +1362,7 @@ count_headers(const char *rootdir, DB_ENV *dbenv)
  *
  */
 
-void
+int
 repo_add_rpmdb(Repo *repo, Repo *ref, const char *rootdir, int flags)
 {
   Pool *pool = repo->pool;
@@ -1738,6 +1738,7 @@ repo_add_rpmdb(Repo *repo, Repo *ref, const char *rootdir, int flags)
   POOL_DEBUG(SAT_DEBUG_STATS, "repo_add_rpmdb took %d ms\n", sat_timems(now));
   POOL_DEBUG(SAT_DEBUG_STATS, "repo size: %d solvables\n", repo->nsolvables);
   POOL_DEBUG(SAT_DEBUG_STATS, "repo memory used: %d K incore, %d K idarray\n", data->incoredatalen/1024, repo->idarraysize / (int)(1024/sizeof(Id)));
+  return 0;
 }
 
 
@@ -1748,7 +1749,7 @@ getu32(const unsigned char *dp)
 }
 
 
-void
+int
 repo_add_rpms(Repo *repo, const char **rpms, int nrpms, int flags)
 {
   int i, sigdsize, sigcnt, l;
@@ -1944,6 +1945,7 @@ repo_add_rpms(Repo *repo, const char **rpms, int nrpms, int flags)
     sat_free(rpmhead);
   if (!(flags & REPO_NO_INTERNALIZE))
     repodata_internalize(data);
+  return 0;
 }
 
 Id
@@ -3054,7 +3056,7 @@ pubkey2solvable(Solvable *s, Repodata *data, char *pubkey)
   return 1;
 }
 
-void
+int
 repo_add_rpmdb_pubkeys(Repo *repo, const char *rootdir, int flags)
 {
   Pool *pool = repo->pool;
@@ -3070,7 +3072,7 @@ repo_add_rpmdb_pubkeys(Repo *repo, const char *rootdir, int flags)
 
   memset(&state, 0, sizeof(state));
   if (!(state.dbenv = opendbenv(rootdir)))
-    return;
+    return 0;
   entries = getinstalledrpmdbids(&state, "Name", "gpg-pubkey", &nentries, &namedata);
   for (i = 0 ; i < nentries; i++)
     {
@@ -3095,9 +3097,10 @@ repo_add_rpmdb_pubkeys(Repo *repo, const char *rootdir, int flags)
   freestate(&state);
   if (!(flags & REPO_NO_INTERNALIZE))
     repodata_internalize(data);
+  return 0;
 }
 
-void
+int
 repo_add_pubkeys(Repo *repo, const char **keys, int nkeys, int flags)
 {
   Pool *pool = repo->pool;
@@ -3137,4 +3140,5 @@ repo_add_pubkeys(Repo *repo, const char **keys, int nkeys, int flags)
   sat_free(buf);
   if (!(flags & REPO_NO_INTERNALIZE))
     repodata_internalize(data);
+  return 0;
 }
index c5903b899b302f3496512492a09529b93bbf7ea7..9fcce63eaaecbdcb51f13eea83a94a279bb0f120 100644 (file)
 
 struct headerToken_s;
 
-extern void repo_add_rpmdb(Repo *repo, Repo *ref, const char *rootdir, int flags);
-extern void repo_add_rpms(Repo *repo, const char **rpms, int nrpms, int flags);
+extern int repo_add_rpmdb(Repo *repo, Repo *ref, const char *rootdir, int flags);
+extern int repo_add_rpms(Repo *repo, const char **rpms, int nrpms, int flags);
 extern Id repo_add_rpm(Repo *repo, const char *rpm, int flags);
-void repo_add_rpmdb_pubkeys(Repo *repo, const char *rootdir, int flags);
-void repo_add_pubkeys(Repo *repo, const char **keys, int nkeys, int flags);
+extern int repo_add_rpmdb_pubkeys(Repo *repo, const char *rootdir, int flags);
+extern int repo_add_pubkeys(Repo *repo, const char **keys, int nkeys, int flags);
 
 #define RPMDB_REPORT_PROGRESS  (1 << 8)
 #define RPM_ADD_WITH_PKGID     (1 << 9)
@@ -29,11 +29,11 @@ void repo_add_pubkeys(Repo *repo, const char **keys, int nkeys, int flags);
 #define RPM_ITERATE_FILELIST_WITHCOL   (1 << 2)
 #define RPM_ITERATE_FILELIST_NOGHOSTS  (1 << 3)
 
-void *rpm_byrpmdbid(Id rpmdbid, const char *rootdir, void **statep);
-void *rpm_byfp(FILE *fp, const char *name, void **statep);
-void *rpm_byrpmh(struct headerToken_s *h, void **statep);
+extern void *rpm_byrpmdbid(Id rpmdbid, const char *rootdir, void **statep);
+extern void *rpm_byfp(FILE *fp, const char *name, void **statep);
+extern void *rpm_byrpmh(struct headerToken_s *h, void **statep);
 
 
-char *rpm_query(void *rpmhandle, Id what);
-void rpm_iterate_filelist(void *rpmhandle, int flags, void (*cb)(void *, const char *, int, const char *), void *cbdata);
-int  rpm_installedrpmdbids(const char *rootdir, const char *index, const char *match, Queue *rpmdbidq);
+extern char *rpm_query(void *rpmhandle, Id what);
+extern void rpm_iterate_filelist(void *rpmhandle, int flags, void (*cb)(void *, const char *, int, const char *), void *cbdata);
+extern int  rpm_installedrpmdbids(const char *rootdir, const char *index, const char *match, Queue *rpmdbidq);
index 74c153233b7836cf291d80fa8f54d0b2b65d851d..99bea2c52ad927c21b6bb423d6455010c787255b 100644 (file)
@@ -1136,7 +1136,7 @@ characterData(void *userData, const XML_Char *s, int len)
  *
  */
 
-void
+int
 repo_add_rpmmd(Repo *repo, FILE *fp, const char *language, int flags)
 {
   Pool *pool = repo->pool;
@@ -1226,4 +1226,5 @@ repo_add_rpmmd(Repo *repo, FILE *fp, const char *language, int flags)
   POOL_DEBUG(SAT_DEBUG_STATS, "repo_add_rpmmd took %d ms\n", sat_timems(now));
   POOL_DEBUG(SAT_DEBUG_STATS, "repo size: %d solvables\n", repo->nsolvables);
   POOL_DEBUG(SAT_DEBUG_STATS, "repo memory used: %d K incore, %d K idarray\n", data->incoredatalen/1024, repo->idarraysize / (int)(1024/sizeof(Id)));
+  return 0;
 }
index 931a7f3ee48e7f5a580dac862a052cb74490b746..1e88df60d42e74a23aee7b5f3e9dc90243e27b86 100644 (file)
@@ -5,4 +5,4 @@
  * for further information
  */
 
-extern void repo_add_rpmmd(Repo *repo, FILE *fp, const char *language, int flags);
+extern int repo_add_rpmmd(Repo *repo, FILE *fp, const char *language, int flags);
index ad7f374b6674758f317dc74d47573fd48c1f47c4..80ea3047a4170c1f712aff5739d444f15e70e16a 100644 (file)
@@ -539,7 +539,7 @@ lookup_shared_id(Repodata *data, Id p, Id keyname, Id voidid, int uninternalized
  * flags: flags
  */
 
-void
+int
 repo_add_susetags(Repo *repo, FILE *fp, Id defvendor, const char *language, int flags)
 {
   Pool *pool = repo->pool;
@@ -1206,4 +1206,5 @@ repo_add_susetags(Repo *repo, FILE *fp, Id defvendor, const char *language, int
     free(pd.common.tmp);
   free(line);
   join_freemem();
+  return 0;
 }
index 975622ed6d596cf04ab80b0273ede3fae191044e..de110c34167c74e02f7f3e5c23252cb652be377e 100644 (file)
@@ -12,4 +12,4 @@
 #define SUSETAGS_EXTEND                        (1 << 9)
 #define SUSETAGS_RECORD_SHARES         (1 << 10)
 
-extern void repo_add_susetags(Repo *repo, FILE *fp, Id defvendor, const char *language, int flags);
+extern int repo_add_susetags(Repo *repo, FILE *fp, Id defvendor, const char *language, int flags);
index 7c569fa4f746bab10cdc8b72c6c31a136b15b9ca..84c9e16a3b760e5deb3622e62fdf30df64050a33 100644 (file)
@@ -577,7 +577,7 @@ characterData(void *userData, const XML_Char *s, int len)
 
 #define BUFF_SIZE 8192
 
-void
+int
 repo_add_updateinfoxml(Repo *repo, FILE *fp, int flags)
 {
   Pool *pool = repo->pool;
@@ -624,6 +624,6 @@ repo_add_updateinfoxml(Repo *repo, FILE *fp, int flags)
 
   if (!(flags & REPO_NO_INTERNALIZE))
     repodata_internalize(data);
+  return 0;
 }
 
-/* EOF */
index b20bb60ab1c91a3087d178837c7dc4f3d417ed21..bd0a61b6603a0ede08cdcd6aa53a887b93dfadbf 100644 (file)
@@ -5,4 +5,4 @@
  * for further information
  */
 
-void repo_add_updateinfoxml(Repo *repo, FILE *fp, int flags);
+extern int repo_add_updateinfoxml(Repo *repo, FILE *fp, int flags);
index 38c2e4855b559d54cf0e183278effd4ac062b90e..13917faf99bc2c97e59fcaeed35e9c31c59a37e9 100644 (file)
@@ -967,7 +967,7 @@ repo_write_stdkeyfilter(Repo *repo, Repokey *key, void *kfdata)
  * 4) encode data into buffers using the mapping tables
  * 5) write everything to disk
  */
-void
+int
 repo_write(Repo *repo, FILE *fp, int (*keyfilter)(Repo *repo, Repokey *key, void *kfdata), void *kfdata, Id **keyarrayp)
 {
   Pool *pool = repo->pool;
@@ -1908,6 +1908,7 @@ fprintf(stderr, "dir %d used %d\n", i, cbdata.dirused ? cbdata.dirused[i] : 1);
   sat_free(cbdata.keymapstart);
   sat_free(cbdata.dirused);
   sat_free(repodataused);
+  return 0;
 }
 
 struct repodata_write_data {
@@ -1931,7 +1932,7 @@ repodata_write_keyfilter(Repo *repo, Repokey *key, void *kfdata)
   return key->storage;
 }
 
-void
+int
 repodata_write(Repodata *data, FILE *fp, int (*keyfilter)(Repo *repo, Repokey *key, void *kfdata), void *kfdata)
 {
   struct repodata_write_data wd;
@@ -1939,5 +1940,5 @@ repodata_write(Repodata *data, FILE *fp, int (*keyfilter)(Repo *repo, Repokey *k
   wd.keyfilter = keyfilter;
   wd.kfdata = kfdata;
   wd.repodataid = data - data->repo->repodata;
-  repo_write(data->repo, fp, repodata_write_keyfilter, &wd, 0);
+  return repo_write(data->repo, fp, repodata_write_keyfilter, &wd, 0);
 }
index 87a79d43b8ff892c782d64522a855a4e03a415a9..9f93f0572fcb247f254755ec20a31448d8e3e48f 100644 (file)
@@ -17,9 +17,9 @@
 
 #include "repo.h"
 
-void repo_write(Repo *repo, FILE *fp, int (*keyfilter)(Repo *repo, Repokey *key, void *kfdata), void *kfdata, Id **keyarrayp);
-int repo_write_stdkeyfilter(Repo *repo, Repokey *key, void *kfdata);
+extern int repo_write(Repo *repo, FILE *fp, int (*keyfilter)(Repo *repo, Repokey *key, void *kfdata), void *kfdata, Id **keyarrayp);
+extern int repo_write_stdkeyfilter(Repo *repo, Repokey *key, void *kfdata);
 
-void repodata_write(Repodata *data , FILE *fp, int (*keyfilter)(Repo *repo, Repokey *key, void *kfdata), void *kfdata);
+extern int repodata_write(Repodata *data , FILE *fp, int (*keyfilter)(Repo *repo, Repokey *key, void *kfdata), void *kfdata);
 
 #endif
index 8c4a5da7e212cf5b57585a2bb58cf6ca82812083..c3c7f39ac69caa9edfcff85c9c773b84424aaed9 100644 (file)
@@ -5,4 +5,4 @@
  * for further information
  */
 
-void repo_add_zyppdb_products(Repo *repo, const char *dirpath, int flags);
+extern int repo_add_zyppdb_products(Repo *repo, const char *dirpath, int flags);
index a992a6b91566087083bc84297d17680013d02195..8e17b42e22e69715a1b07fd74365a6fec3e80237 100644 (file)
@@ -30,7 +30,6 @@ SOLV_1.0 {
                map_grow;
                map_init;
                map_init_clone;
-               policy_create_obsolete_index;
                policy_filter_unwanted;
                policy_findupdatepackages;
                policy_illegal2str;
@@ -253,6 +252,7 @@ SOLV_1.0 {
                solver_calculate_noobsmap;
                solver_create;
                solver_create_decisions_obsoletesmap;
+               solver_create_state_maps;
                solver_dep_installed;
                solver_disablechoicerules;
                solver_disablepolicyrules;
index 8ca71f47defdecee743d2aeeaa299200903b1b23..ab5f55be8b02e13fd31f8de82f0bc97f01a4bf44 100644 (file)
@@ -16,6 +16,7 @@
 #include <string.h>
 
 #include "solver.h"
+#include "solver_private.h"
 #include "evr.h"
 #include "policy.h"
 #include "poolvendor.h"
@@ -259,7 +260,7 @@ prune_to_recommended(Solver *solv, Queue *plist)
     plist->count = j;
 }
 
-void
+static void
 prune_to_best_arch(const Pool *pool, Queue *plist)
 {
   Id a, bestscore;
@@ -350,7 +351,7 @@ prune_obsoleted(Pool *pool, Queue *plist)
  * sort list of packages (given through plist) by name and evr
  * return result through plist
  */
-void
+static void
 prune_to_best_version(Pool *pool, Queue *plist)
 {
   int i, j;
@@ -407,7 +408,7 @@ prune_to_best_version(Pool *pool, Queue *plist)
  * (rates arch higher than version, but thats a policy)
  */
 
-void
+static void
 prune_best_arch_name_version(const Solver *solv, Pool *pool, Queue *plist)
 {
   if (solv && solv->bestSolvableCb)
index b0729295cb01faac0b71c7e09ec2c59103e48640..734ffde281146119fc2558abe239069fb9c3ef7a 100644 (file)
 #define POLICY_MODE_RECOMMEND  1
 #define POLICY_MODE_SUGGEST    2
 
-/* This functions can be used for sorting solvables to a specific order like architecture, version. */
-/* Solvables which does not fit to the system will be deleted from the list.                        */    
-extern void prune_best_arch_name_version(const Solver *solv, Pool *pool, Queue *plist);
-
-extern void prune_to_best_arch(const Pool *pool, Queue *plist);
-extern void prune_to_best_version(Pool *pool, Queue *plist);
-
-
-/* The following default policies can be overloaded by the application by using callbacks which are
- * descibed in solver.h:
- *  
- *  Finding best candidate
- * 
- * Callback definition:
- * void  bestSolvable (Pool *pool, Queue *canditates)
- *     candidates       : List of canditates which has to be sorted by the function call
- *     return candidates: Sorted list of the candidates(first is the best).
- *
- * Checking if two solvables has compatible architectures
- *
- * Callback definition:
- *     int  archCheck (Pool *pool, Solvable *solvable1, Solvable *solvable2);
- *     
- *     return 0 it the two solvables has compatible architectures
- *
- * Checking if two solvables has compatible vendors
- *
- * Callback definition:
- *     int  vendorCheck (Pool *pool, Solvable *solvable1, Solvable *solvable2);
- *     
- *     return 0 it the two solvables has compatible architectures
- *
- * Evaluate update candidate
- *
- * Callback definition:
- * void pdateCandidateCb (Pool *pool, Solvable *solvable, Queue *canditates)
- *     solvable   : for which updates should be search
- *     candidates : List of candidates (This list depends on other
- *                  restrictions like architecture and vendor policies too)
- */   
 
 #define POLICY_ILLEGAL_DOWNGRADE       1
 #define POLICY_ILLEGAL_ARCHCHANGE      2
@@ -65,10 +25,7 @@ extern void policy_filter_unwanted(Solver *solv, Queue *plist, int mode);
 extern int  policy_illegal_archchange(Solver *solv, Solvable *s1, Solvable *s2);
 extern int  policy_illegal_vendorchange(Solver *solv, Solvable *s1, Solvable *s2);
 extern int  policy_is_illegal(Solver *solv, Solvable *s1, Solvable *s2, int ignore);
-extern void policy_findupdatepackages(Solver *solv,
-                                     Solvable *s,
-                                     Queue *qs,
-                                     int allowall); /* do not regard policies for vendor,architecuture,... change */
+extern void policy_findupdatepackages(Solver *solv, Solvable *s, Queue *qs, int allowall);
 
 extern void policy_create_obsolete_index(Solver *solv);
 
index 2b1a93bc7ac4f1c6313cf8d942d91f45bae00adc..8887f43894cc530ced10e3b30f07744154286bbb 100644 (file)
@@ -87,8 +87,8 @@ struct _Pool {
   int implicitobsoleteusesprovides;    /* true: implicit obsoletes due to same name are matched against provides, not names */
   int obsoleteusescolors;      /* true: obsoletes check arch color */
   int noinstalledobsoletes;    /* true: ignore obsoletes of installed packages */
-  int novirtualconflicts;      /* true: conflicts on names, not on provides */
   int allowselfconflicts;      /* true: packages which conflict with itself are installable */
+
 #ifdef MULTI_SEMANTICS
   int disttype;
 #endif
index ce756147e2e2d3543736005317fd20d29f11d99a..6073e0151bb7cc35b15f6b0db5d84d56450e7473 100644 (file)
@@ -17,6 +17,7 @@
 #include <assert.h>
 
 #include "solver.h"
+#include "solver_private.h"
 #include "bitmap.h"
 #include "pool.h"
 #include "util.h"
index fbec7bf50c315cda7bd50e30a54f85794fee902d..fd2bde13ce2552dcb61a3d8c98dfbbc8df9abba1 100644 (file)
@@ -38,10 +38,10 @@ typedef struct _Repo {
   int idarraysize;
   Offset lastoff;              /* start of last array in idarraydata */
 
-  Id *rpmdbid;                 /* solvable side data */
-
   Repodata *repodata;          /* our stores for non-solvable related data */
   unsigned nrepodata;          /* number of our stores..  */
+
+  Id *rpmdbid;                 /* solvable side data: rpm database id */
 } Repo;
 
 extern Repo *repo_create(Pool *pool, const char *name);
@@ -216,9 +216,9 @@ typedef struct _Dataiterator
 
 } Dataiterator;
 
-int datamatcher_init(Datamatcher *ma, const char *match, int flags);
+int  datamatcher_init(Datamatcher *ma, const char *match, int flags);
 void datamatcher_free(Datamatcher *ma);
-int datamatcher_match(Datamatcher *ma, const char *str);
+int  datamatcher_match(Datamatcher *ma, const char *str);
 
 /*
  * Dataiterator
@@ -246,18 +246,18 @@ int datamatcher_match(Datamatcher *ma, const char *str);
  * keyname: if non-null, limit search to this keyname
  * match:   if non-null, limit search to this match
  */
-int dataiterator_init(Dataiterator *di, Pool *pool, Repo *repo, Id p, Id keyname, const char *match, int flags);
+int  dataiterator_init(Dataiterator *di, Pool *pool, Repo *repo, Id p, Id keyname, const char *match, int flags);
 void dataiterator_init_clone(Dataiterator *di, Dataiterator *from);
 void dataiterator_set_search(Dataiterator *di, Repo *repo, Id p);
 void dataiterator_set_keyname(Dataiterator *di, Id keyname);
-int dataiterator_set_match(Dataiterator *di, const char *match, int flags);
+int  dataiterator_set_match(Dataiterator *di, const char *match, int flags);
 
 void dataiterator_prepend_keyname(Dataiterator *di, Id keyname);
 void dataiterator_free(Dataiterator *di);
-int dataiterator_step(Dataiterator *di);
+int  dataiterator_step(Dataiterator *di);
 void dataiterator_setpos(Dataiterator *di);
 void dataiterator_setpos_parent(Dataiterator *di);
-int dataiterator_match(Dataiterator *di, Datamatcher *ma);
+int  dataiterator_match(Dataiterator *di, Datamatcher *ma);
 void dataiterator_skip_attribute(Dataiterator *di);
 void dataiterator_skip_solvable(Dataiterator *di);
 void dataiterator_skip_repo(Dataiterator *di);
index db397179679874014d7c1e8a6102b7ea6f9f9d28..af8ca3c093ebb1f83cf12cdbbee3b66336604bfc 100644 (file)
@@ -18,6 +18,7 @@
 #include <assert.h>
 
 #include "solver.h"
+#include "solver_private.h"
 #include "bitmap.h"
 #include "pool.h"
 #include "poolarch.h"
index 2d708500f25e16cd0c1a990429a1cb705201fe7b..e8b35f3a036708efe38f519144133816cfba3532 100644 (file)
@@ -18,6 +18,7 @@
 #include <assert.h>
 
 #include "solver.h"
+#include "solver_private.h"
 #include "bitmap.h"
 #include "pool.h"
 #include "util.h"
@@ -1274,7 +1275,6 @@ solver_create(Pool *pool)
   queue_init(&solv->learnt_why);
   queue_init(&solv->learnt_pool);
   queue_init(&solv->branches);
-  queue_init(&solv->covenantq);
   queue_init(&solv->weakruleq);
   queue_init(&solv->ruleassertions);
 
@@ -1315,7 +1315,6 @@ solver_free(Solver *solv)
   queue_free(&solv->recommendations);
   queue_free(&solv->orphaned);
   queue_free(&solv->branches);
-  queue_free(&solv->covenantq);
   queue_free(&solv->weakruleq);
   queue_free(&solv->ruleassertions);
 
@@ -2488,7 +2487,7 @@ solver_addjobrule(Solver *solv, Id p, Id d, Id job, int weak)
  *
  */
 
-void
+int
 solver_solve(Solver *solv, Queue *job)
 {
   Pool *pool = solv->pool;
@@ -2511,7 +2510,7 @@ solver_solve(Solver *solv, Queue *job)
   POOL_DEBUG(SAT_DEBUG_STATS, "fixsystem=%d updatesystem=%d dosplitprovides=%d, noupdateprovide=%d noinfarchcheck=%d\n", solv->fixsystem, solv->updatesystem, solv->dosplitprovides, solv->noupdateprovide, solv->noinfarchcheck);
   POOL_DEBUG(SAT_DEBUG_STATS, "distupgrade=%d distupgrade_removeunsupported=%d\n", solv->distupgrade, solv->distupgrade_removeunsupported);
   POOL_DEBUG(SAT_DEBUG_STATS, "allowuninstall=%d, allowdowngrade=%d, allowarchchange=%d, allowvendorchange=%d\n", solv->allowuninstall, solv->allowdowngrade, solv->allowarchchange, solv->allowvendorchange);
-  POOL_DEBUG(SAT_DEBUG_STATS, "promoteepoch=%d, novirtualconflicts=%d, allowselfconflicts=%d\n", pool->promoteepoch, pool->novirtualconflicts, pool->allowselfconflicts);
+  POOL_DEBUG(SAT_DEBUG_STATS, "promoteepoch=%d, allowselfconflicts=%d\n", pool->promoteepoch, pool->allowselfconflicts);
   POOL_DEBUG(SAT_DEBUG_STATS, "obsoleteusesprovides=%d, implicitobsoleteusesprovides=%d, obsoleteusescolors=%d\n", pool->obsoleteusesprovides, pool->implicitobsoleteusesprovides, pool->obsoleteusescolors);
   POOL_DEBUG(SAT_DEBUG_STATS, "dontinstallrecommended=%d, ignorealreadyrecommended=%d, dontshowinstalledrecommended=%d\n", solv->dontinstallrecommended, solv->ignorealreadyrecommended, solv->dontshowinstalledrecommended);
 
@@ -3005,6 +3004,7 @@ solver_solve(Solver *solv, Queue *job)
 
   POOL_DEBUG(SAT_DEBUG_STATS, "final solver statistics: %d problems, %d learned rules, %d unsolvable\n", solv->problems.count / 2, solv->stats_learned, solv->stats_unsolvable);
   POOL_DEBUG(SAT_DEBUG_STATS, "solver_solve took %d ms\n", sat_timems(solve_start));
+  return solv->problems.count ? solv->problems.count / 2 : 0;
 }
 
 /***********************************************************************/
@@ -3043,11 +3043,17 @@ solver_calc_installsizechange(Solver *solv)
   return change;
 }
 
+void
+solver_create_state_maps(Solver *solv, Map *installedmap, Map *conflictsmap)
+{
+  pool_create_state_maps(solv->pool, &solv->decisionq, installedmap, conflictsmap);
+}
+
 void
 solver_trivial_installable(Solver *solv, Queue *pkgs, Queue *res)
 {
   Map installedmap;
-  solver_create_state_maps(solv, &installedmap, 0);
+  pool_create_state_maps(solv->pool,  &solv->decisionq, &installedmap, 0);
   pool_trivial_installable_noobsoletesmap(solv->pool, &installedmap, pkgs, res, solv->noobsoletes.size ? &solv->noobsoletes : 0);
   map_free(&installedmap);
 }
index 16f6dafc77042b2394a3421c2bdc21a236cb6195..cc930e9f163580eb72188a8ace518032053f0e86 100644 (file)
@@ -36,9 +36,8 @@ typedef int  (*VendorCheckCb) (Pool *pool, Solvable *solvable1, Solvable *solvab
 typedef void (*UpdateCandidateCb) (Pool *pool, Solvable *solvable, Queue *canditates);
 
 
-struct _Solver;
-
-typedef struct _Solver {
+#if 1
+struct _Solver {
   Pool *pool;                          /* back pointer to pool */
   Queue job;                           /* copy of the job we're solving */
 
@@ -169,7 +168,7 @@ typedef struct _Solver {
    *     candidates       : List of canditates which has to be sorted by the function call
    *     return candidates: Sorted list of the candidates(first is the best).
    */
-   BestSolvableCb bestSolvableCb;
+  BestSolvableCb bestSolvableCb;
 
   /* Checking if two solvables has compatible architectures
    *
@@ -178,7 +177,7 @@ typedef struct _Solver {
    *     
    *     return 0 it the two solvables has compatible architectures
    */
-   ArchCheckCb archCheckCb;
+  ArchCheckCb archCheckCb;
 
   /* Checking if two solvables has compatible vendors
    *
@@ -187,7 +186,7 @@ typedef struct _Solver {
    *     
    *     return 0 it the two solvables has compatible architectures
    */
-   VendorCheckCb vendorCheckCb;
+  VendorCheckCb vendorCheckCb;
     
   /* Evaluate update candidate
    *
@@ -197,13 +196,8 @@ typedef struct _Solver {
    *     candidates : List of candidates (This list depends on other
    *                  restrictions like architecture and vendor policies too)
    */
-   UpdateCandidateCb   updateCandidateCb;
+  UpdateCandidateCb   updateCandidateCb;
     
-
-  /* some strange queue that doesn't belong here */
-  Queue covenantq;                      /* Covenants honored by this solver (generic locks) */
-
-  
   Map dupmap;                          /* dup these packages*/
   int dupmap_all;                      /* dup all packages */
   Map dupinvolvedmap;                  /* packages involved in dup process */
@@ -214,7 +208,11 @@ typedef struct _Solver {
   Map cleandepsmap;                    /* try to drop these packages as of cleandeps erases */
 
   Queue *ruleinfoq;                    /* tmp space for solver_ruleinfo() */
-} Solver;
+};
+
+#endif
+
+typedef struct _Solver Solver;
 
 /*
  * queue commands
@@ -292,88 +290,20 @@ typedef struct _Solver {
 
 extern Solver *solver_create(Pool *pool);
 extern void solver_free(Solver *solv);
-extern void solver_solve(Solver *solv, Queue *job);
-
-extern void solver_run_sat(Solver *solv, int disablerules, int doweak);
-extern void solver_reset(Solver *solv);
-
-extern int solver_dep_installed(Solver *solv, Id dep);
-extern int solver_splitprovides(Solver *solv, Id dep);
+extern int  solver_solve(Solver *solv, Queue *job);
 
 extern void solver_calculate_noobsmap(Pool *pool, Queue *job, Map *noobsmap);
-
-/* obsolete */
-extern SolverRuleinfo solver_problemruleinfo(Solver *solv, Queue *job, Id rid, Id *depp, Id *sourcep, Id *targetp);
+extern void solver_create_state_maps(Solver *solv, Map *installedmap, Map *conflictsmap);
 
 /* XXX: why is this not static? */
 Id *solver_create_decisions_obsoletesmap(Solver *solv);
 
-static inline int
-solver_dep_fulfilled(Solver *solv, Id dep)
-{
-  Pool *pool = solv->pool;
-  Id p, pp;
-
-  if (ISRELDEP(dep))
-    {
-      Reldep *rd = GETRELDEP(pool, dep);
-      if (rd->flags == REL_AND)
-        {
-          if (!solver_dep_fulfilled(solv, rd->name))
-            return 0;
-          return solver_dep_fulfilled(solv, rd->evr);
-        }
-      if (rd->flags == REL_NAMESPACE && rd->name == NAMESPACE_SPLITPROVIDES)
-        return solver_splitprovides(solv, rd->evr);
-      if (rd->flags == REL_NAMESPACE && rd->name == NAMESPACE_INSTALLED)
-        return solver_dep_installed(solv, rd->evr);
-    }
-  FOR_PROVIDES(p, pp, dep)
-    {
-      if (solv->decisionmap[p] > 0)
-        return 1;
-    }
-  return 0;
-}
-
-static inline int
-solver_is_supplementing(Solver *solv, Solvable *s)
-{
-  Id sup, *supp;
-  if (!s->supplements)
-    return 0;
-  supp = s->repo->idarraydata + s->supplements;
-  while ((sup = *supp++) != 0)
-    if (solver_dep_fulfilled(solv, sup))
-      return 1;
-  return 0;
-}
-
-static inline int
-solver_is_enhancing(Solver *solv, Solvable *s)
-{
-  Id enh, *enhp;
-  if (!s->enhances)
-    return 0;
-  enhp = s->repo->idarraydata + s->enhances;
-  while ((enh = *enhp++) != 0)
-    if (solver_dep_fulfilled(solv, enh))
-      return 1;
-  return 0;
-}
-
 void solver_calc_duchanges(Solver *solv, DUChanges *mps, int nmps);
 int solver_calc_installsizechange(Solver *solv);
 void solver_trivial_installable(Solver *solv, Queue *pkgs, Queue *res);
 
 void solver_find_involved(Solver *solv, Queue *installedq, Solvable *s, Queue *q);
 
-static inline void
-solver_create_state_maps(Solver *solv, Map *installedmap, Map *conflictsmap)
-{
-  pool_create_state_maps(solv->pool, &solv->decisionq, installedmap, conflictsmap);
-}
-
 /* iterate over all literals of a rule */
 /* WARNING: loop body must not relocate whatprovidesdata, e.g. by
  * looking up the providers of a dependency */
diff --git a/src/solver_private.h b/src/solver_private.h
new file mode 100644 (file)
index 0000000..a563fa8
--- /dev/null
@@ -0,0 +1,251 @@
+/*
+ * Copyright (c) 2011, Novell Inc.
+ *
+ * This program is licensed under the BSD license, read LICENSE.BSD
+ * for further information
+ */
+
+/*
+ * solver_p.h - private functions
+ *
+ */
+
+#ifndef LIBSOLV_SOLVER_P_H
+#define LIBSOLV_SOLVER_P_H
+
+#if 0
+struct _Solver {
+  Pool *pool;                          /* back pointer to pool */
+  Queue job;                           /* copy of the job we're solving */
+
+  Transaction trans;                   /* calculated transaction */
+
+  Repo *installed;                     /* copy of pool->installed */
+  
+  /* list of rules, ordered
+   * rpm rules first, then features, updates, jobs, learnt
+   * see start/end offsets below
+   */
+  Rule *rules;                         /* all rules */
+  Id nrules;                           /* [Offset] index of the last rule */
+
+  Queue ruleassertions;                        /* Queue of all assertion rules */
+
+  /* start/end offset for rule 'areas' */
+    
+  Id rpmrules_end;                      /* [Offset] rpm rules end */
+    
+  Id featurerules;                     /* feature rules start/end */
+  Id featurerules_end;
+    
+  Id updaterules;                      /* policy rules, e.g. keep packages installed or update. All literals > 0 */
+  Id updaterules_end;
+    
+  Id jobrules;                         /* user rules */
+  Id jobrules_end;
+
+  Id infarchrules;                     /* inferior arch rules */
+  Id infarchrules_end;
+
+  Id duprules;                         /* dist upgrade rules */
+  Id duprules_end;
+    
+  Id choicerules;                      /* choice rules (always weak) */
+  Id choicerules_end;
+  Id *choicerules_ref;
+
+  Id learntrules;                      /* learnt rules, (end == nrules) */
+
+  Map noupdate;                                /* don't try to update these
+                                           installed solvables */
+  Map noobsoletes;                     /* ignore obsoletes for these (multiinstall) */
+
+  Map updatemap;                       /* bring these installed packages to the newest version */
+  int updatemap_all;                   /* bring all packages to the newest version */
+
+  Map fixmap;                          /* fix these packages */
+  int fixmap_all;                      /* fix all packages */
+
+  Queue weakruleq;                     /* index into 'rules' for weak ones */
+  Map weakrulemap;                     /* map rule# to '1' for weak rules, 1..learntrules */
+
+  Id *watches;                         /* Array of rule offsets
+                                        * watches has nsolvables*2 entries and is addressed from the middle
+                                        * middle-solvable : decision to conflict, offset point to linked-list of rules
+                                        * middle+solvable : decision to install: offset point to linked-list of rules
+                                        */
+
+  Queue ruletojob;                      /* index into job queue: jobs for which a rule exits */
+
+  /* our decisions: */
+  Queue decisionq;                      /* >0:install, <0:remove/conflict */
+  Queue decisionq_why;                 /* index of rule, Offset into rules */
+
+  Id *decisionmap;                     /* map for all available solvables,
+                                        * = 0: undecided
+                                        * > 0: level of decision when installed,
+                                        * < 0: level of decision when conflict */
+
+  /* learnt rule history */
+  Queue learnt_why;
+  Queue learnt_pool;
+
+  Queue branches;
+  int (*solution_callback)(struct _Solver *solv, void *data);
+  void *solution_callback_data;
+
+  int propagate_index;                  /* index into decisionq for non-propagated decisions */
+
+  Queue problems;                       /* list of lists of conflicting rules, < 0 for job rules */
+  Queue solutions;                     /* refined problem storage space */
+
+  Queue recommendations;               /* recommended packages */
+  Queue suggestions;                   /* suggested packages */
+  Queue orphaned;                      /* orphaned packages */
+
+  int stats_learned;                   /* statistic */
+  int stats_unsolvable;                        /* statistic */
+
+  Map recommendsmap;                   /* recommended packages from decisionmap */
+  Map suggestsmap;                     /* suggested packages from decisionmap */
+  int recommends_index;                        /* recommendsmap/suggestsmap is created up to this level */
+
+  Id *obsoletes;                       /* obsoletes for each installed solvable */
+  Id *obsoletes_data;                  /* data area for obsoletes */
+  Id *multiversionupdaters;            /* updaters for multiversion packages in updatesystem mode */
+
+  /*-------------------------------------------------------------------------------------------------------------
+   * Solver configuration
+   *-------------------------------------------------------------------------------------------------------------*/
+
+  int fixsystem;                       /* repair errors in rpm dependency graph */
+  int allowdowngrade;                  /* allow to downgrade installed solvable */
+  int allowarchchange;                 /* allow to change architecture of installed solvables */
+  int allowvendorchange;               /* allow to change vendor of installed solvables */
+  int allowuninstall;                  /* allow removal of installed solvables */
+  int updatesystem;                    /* update all packages to the newest version */
+  int noupdateprovide;                 /* true: update packages needs not to provide old package */
+  int dosplitprovides;                 /* true: consider legacy split provides */
+  int dontinstallrecommended;          /* true: do not install recommended packages */
+  int ignorealreadyrecommended;                /* true: ignore recommended packages that were already recommended by the installed packages */
+  int dontshowinstalledrecommended;    /* true: do not show recommended packages that are already installed */
+  
+  /* distupgrade also needs updatesystem and dosplitprovides */
+  int distupgrade;
+  int distupgrade_removeunsupported;
+
+  int noinfarchcheck;                  /* true: do not forbid inferior architectures */
+
+  /* Callbacks for defining the bahaviour of the SAT solver */
+
+  /* Finding best candidate
+   *
+   * Callback definition:
+   * void  bestSolvable (Pool *pool, Queue *canditates)
+   *     candidates       : List of canditates which has to be sorted by the function call
+   *     return candidates: Sorted list of the candidates(first is the best).
+   */
+  BestSolvableCb bestSolvableCb;
+
+  /* Checking if two solvables has compatible architectures
+   *
+   * Callback definition:
+   *     int  archCheck (Pool *pool, Solvable *solvable1, Solvable *solvable2);
+   *     
+   *     return 0 it the two solvables has compatible architectures
+   */
+  ArchCheckCb archCheckCb;
+
+  /* Checking if two solvables has compatible vendors
+   *
+   * Callback definition:
+   *     int  vendorCheck (Pool *pool, Solvable *solvable1, Solvable *solvable2);
+   *     
+   *     return 0 it the two solvables has compatible architectures
+   */
+  VendorCheckCb vendorCheckCb;
+    
+  /* Evaluate update candidate
+   *
+   * Callback definition:
+   * void pdateCandidateCb (Pool *pool, Solvable *solvable, Queue *canditates)
+   *     solvable   : for which updates should be search
+   *     candidates : List of candidates (This list depends on other
+   *                  restrictions like architecture and vendor policies too)
+   */
+  UpdateCandidateCb   updateCandidateCb;
+    
+  Map dupmap;                          /* dup these packages*/
+  int dupmap_all;                      /* dup all packages */
+  Map dupinvolvedmap;                  /* packages involved in dup process */
+
+  Map droporphanedmap;                 /* packages to drop in dup mode */
+  int droporphanedmap_all;
+
+  Map cleandepsmap;                    /* try to drop these packages as of cleandeps erases */
+
+  Queue *ruleinfoq;                    /* tmp space for solver_ruleinfo() */
+};
+#endif
+
+extern void solver_run_sat(Solver *solv, int disablerules, int doweak);
+extern void solver_reset(Solver *solv);
+
+extern int solver_dep_installed(Solver *solv, Id dep);
+extern int solver_splitprovides(Solver *solv, Id dep);
+
+static inline int
+solver_dep_fulfilled(Solver *solv, Id dep)
+{
+  Pool *pool = solv->pool;
+  Id p, pp;
+
+  if (ISRELDEP(dep))
+    {
+      Reldep *rd = GETRELDEP(pool, dep);
+      if (rd->flags == REL_AND)
+        {
+          if (!solver_dep_fulfilled(solv, rd->name))
+            return 0;
+          return solver_dep_fulfilled(solv, rd->evr);
+        }
+      if (rd->flags == REL_NAMESPACE && rd->name == NAMESPACE_SPLITPROVIDES)
+        return solver_splitprovides(solv, rd->evr);
+      if (rd->flags == REL_NAMESPACE && rd->name == NAMESPACE_INSTALLED)
+        return solver_dep_installed(solv, rd->evr);
+    }
+  FOR_PROVIDES(p, pp, dep)
+    {
+      if (solv->decisionmap[p] > 0)
+        return 1;
+    }
+  return 0;
+}
+
+static inline int
+solver_is_supplementing(Solver *solv, Solvable *s)
+{
+  Id sup, *supp;
+  if (!s->supplements)
+    return 0;
+  supp = s->repo->idarraydata + s->supplements;
+  while ((sup = *supp++) != 0)
+    if (solver_dep_fulfilled(solv, sup))
+      return 1;
+  return 0;
+}
+
+static inline int
+solver_is_enhancing(Solver *solv, Solvable *s)
+{
+  Id enh, *enhp;
+  if (!s->enhances)
+    return 0;
+  enhp = s->repo->idarraydata + s->enhances;
+  while ((enh = *enhp++) != 0)
+    if (solver_dep_fulfilled(solv, enh))
+      return 1;
+  return 0;
+}
+
+#endif /* LIBSOLV_SOLVER_P_H */
index 7cc737e11a806fea4bb3e7c80189ecd1ca143cb1..44d7fca6506a84064d71e946d60b907d7a35c1fb 100644 (file)
@@ -18,6 +18,7 @@
 #include <assert.h>
 
 #include "solver.h"
+#include "solver_private.h"
 #include "solverdebug.h"
 #include "bitmap.h"
 #include "pool.h"
index 9c5a1a558399c695ed3e7c5ab5d5c6b32f389528..9d7f1a2f7735d2f28dd3e367d2148fe178c8139d 100644 (file)
@@ -54,18 +54,20 @@ int main()
   if (conflicts.count)
     {
       Queue job;
+      int problemcnt;
+
       queue_init(&job);
       pool_add_fileconflicts_deps(pool, &conflicts);
       pool_addfileprovides(pool);
       pool_createwhatprovides(pool);
       pool_setdebuglevel(pool, 0);
       Solver *solv = solver_create(pool);
-      solv->fixsystem = 1;
+      queue_push2(&job, SOLVER_VERIFY|SOLVER_SOLVABLE_ALL, 0);
 #if 0
       solv->allowuninstall = 1;
 #endif
-      solver_solve(solv, &job);
-      if (solv->problems.count)
+      problemcnt = solver_solve(solv, &job);
+      if (problemcnt)
         solver_printallsolutions(solv);
       else
         solver_printtransaction(solv);
index 7d9e28651733f161319a674d1b9f57cd6b939c2e..91eeab013063a2dd456509013ad450a6ef88b3af 100644 (file)
@@ -242,6 +242,7 @@ main(int argc, char **argv)
   for (i = 0; i < cand.count; i++)
     {
       Solvable *s;
+      int problemcount;
 
       p = cand.elements[i];
       if (nocheck && p >= nocheck)
@@ -282,8 +283,8 @@ main(int argc, char **argv)
          queue_push(&job, archlock);
        }
       solv->dontinstallrecommended = 1;
-      solver_solve(solv, &job);
-      if (solv->problems.count)
+      problemcount = solver_solve(solv, &job);
+      if (problemcount)
        {
          Id problem = 0;
          Solvable *s2;
index c107c6cafc035ff51ee70d29012c03a14d92a840..ce8d8cde0d99e842b23201147bf0b3190a705ff1 100644 (file)
@@ -290,8 +290,7 @@ test_all_packages_installable(context_t *c, Id pid)
           solv = solver_create(pool);
           solv->dontinstallrecommended = 0;
           ++solver_runs;
-          solver_solve(solv, &job);
-          if (solv->problems.count)
+          if (solver_solve(solv, &job))
             {
               c->status = 1;
               printf("error installing original package\n");
@@ -320,8 +319,7 @@ test_all_packages_installable(context_t *c, Id pid)
           solv = solver_create(pool);
           /*solv->dontinstallrecommended = 1;*/
           ++solver_runs;
-          solver_solve(solv, &job);
-          if (solv->problems.count)
+          if (solver_solve(solv, &job))
             {
               c->status = 1;
               showproblems(solv, s, 0, 0);
@@ -420,9 +418,7 @@ test_can_upgrade_all_packages(context_t *c, Id pid)
       solv = solver_create(pool);
       solv->dontinstallrecommended = 1;
       ++solver_runs;
-      solver_solve(solv, &job);
-
-      if (solv->problems.count)
+      if (solver_solve(solv, &job))
         {
           c->status = 1;
           showproblems(solv, s, &cand, &badguys);