Imported Upstream version 0.7.0
[platform/upstream/libsolv.git] / examples / solv / solv.c
index 42ab751..3deb1a0 100644 (file)
@@ -130,7 +130,7 @@ showdiskusagechanges(Transaction *trans)
   duc[3].path = "/etc";
   transaction_calc_duchanges(trans, duc, 4);
   for (i = 0; i < 4; i++)
-    printf("duchanges %s: %d K  %d inodes\n", duc[i].path, duc[i].kbytes, duc[i].files);
+    printf("duchanges %s: %lld K  %lld inodes\n", duc[i].path, duc[i].kbytes, duc[i].files);
 }
 #endif
 
@@ -169,7 +169,6 @@ find_repo(const char *name, Pool *pool, struct repoinfo *repoinfos, int nrepoinf
   return 0;
 }
 
-
 #define MODE_LIST        0
 #define MODE_INSTALL     1
 #define MODE_ERASE       2
@@ -227,6 +226,7 @@ main(int argc, char **argv)
   char *rootdir = 0;
   char *keyname = 0;
   int keyname_depstr = 0;
+  int keyname_alldeps = 0;             /* dnf repoquesy --alldeps */
   int debuglevel = 0;
   int answer, acnt = 0;
   char *testcase = 0;
@@ -316,9 +316,15 @@ main(int argc, char **argv)
          argc--;
          argv++;
        }
+      else if (argc > 1 && !strcmp(argv[1], "--alldeps"))
+       {
+         keyname_alldeps = 1;          /* dnf repoquesy --alldeps */
+         argc--;
+         argv++;
+       }
       else if (argc > 1 && !strcmp(argv[1], "--depstr"))
        {
-         keyname_depstr = 1;
+         keyname_depstr = 1;   /* do literal matching instead of dep intersection */
          argc--;
          argv++;
        }
@@ -539,7 +545,7 @@ main(int argc, char **argv)
        flags |= SELECTION_FILELIST | (mode == MODE_ERASE ? SELECTION_INSTALLED_ONLY : 0);
       if (keyname && keyname_depstr)
        flags |= SELECTION_MATCH_DEPSTR;
-      if (!keyname)
+      if (!keyname || keyname_alldeps)
         rflags = selection_make(pool, &job2, argv[i], flags);
       else
         rflags = selection_make_matchdeps(pool, &job2, argv[i], flags, pool_str2id(pool, keyname, 1), 0);
@@ -552,7 +558,7 @@ main(int argc, char **argv)
       if (!job2.count)
        {
          flags |= SELECTION_NOCASE;
-         if (!keyname)
+         if (!keyname || keyname_alldeps)
             rflags = selection_make(pool, &job2, argv[i], flags);
          else
            rflags = selection_make_matchdeps(pool, &job2, argv[i], flags, pool_str2id(pool, keyname, 1), 0);
@@ -574,6 +580,14 @@ main(int argc, char **argv)
         printf("[using file list match for '%s']\n", argv[i]);
       if (rflags & SELECTION_PROVIDES)
        printf("[using capability match for '%s']\n", argv[i]);
+      if (keyname && keyname_alldeps)
+       {
+         Queue q;
+         queue_init(&q);
+         selection_solvables(pool, &job2, &q);
+         selection_make_matchsolvablelist(pool, &job2, &q, 0, pool_str2id(pool, keyname, 1), 0);
+         queue_free(&q);
+       }
       queue_insertn(&job, job.count, job2.count, job2.elements);
       queue_free(&job2);
     }
@@ -773,7 +787,7 @@ rerunsolver:
 #if defined(SUSE)
   showdiskusagechanges(trans);
 #endif
-  printf("install size change: %d K\n", transaction_calc_installsizechange(trans));
+  printf("install size change: %lld K\n", transaction_calc_installsizechange(trans));
   printf("\n");
 
   acnt = solver_alternatives_count(solv);