1.1 --- a/rpm-razor.c Mon Jun 09 23:51:52 2008 -0400
1.2 +++ b/rpm-razor.c Sun Jun 15 22:33:15 2008 -0400
1.3 @@ -73,10 +73,12 @@
1.4 { }
1.5 };
1.6
1.7 +static int option_nodeps;
1.8 +
1.9 static const struct option verify_options[] = {
1.10 { OPTION_BOOL, "nomd5", 0, NULL, "don't verify MD5 digest of files", NULL },
1.11 { OPTION_BOOL, "nofiles", 0, NULL, "don't verify files in package", NULL },
1.12 - { OPTION_BOOL, "nodeps", 0, NULL, "don't verify package dependencies", NULL },
1.13 + { OPTION_BOOL, "nodeps", 0, NULL, "don't verify package dependencies", &option_nodeps },
1.14 { OPTION_BOOL, "noscript", 0, NULL, "don't execute verify script(s)", NULL, },
1.15 { OPTION_BOOL, "all", 'a', NULL, "query/verify all packages", &option_all },
1.16 { OPTION_BOOL, "file", 'f', NULL, "query/verify package(s) owning file", NULL },
1.17 @@ -125,7 +127,8 @@
1.18 { }
1.19 };
1.20
1.21 -static int option_erase, option_install, option_upgrade;
1.22 +static int option_erase, option_install, option_upgrade, option_justdb;
1.23 +static int option_test;
1.24
1.25 static const struct option install_options[] = {
1.26 { OPTION_BOOL, "aid", 0, NULL, "add suggested packages to transaction", NULL, },
1.27 @@ -143,8 +146,8 @@
1.28 { OPTION_BOOL, "ignoreos", 0, NULL, "don't verify package operating system", NULL, },
1.29 { OPTION_BOOL, "ignoresize", 0, NULL, "don't check disk space before installing", NULL },
1.30 { OPTION_BOOL, "install", 'i', NULL, "install package(s)", &option_install },
1.31 - { OPTION_BOOL, "justdb", 0, NULL, "update the database, but do not modify the filesystem", NULL, },
1.32 - { OPTION_BOOL, "nodeps", 0, NULL, "do not verify package dependencies", NULL, },
1.33 + { OPTION_BOOL, "justdb", 0, NULL, "update the database, but do not modify the filesystem", &option_justdb, },
1.34 + { OPTION_BOOL, "nodeps", 0, NULL, "do not verify package dependencies", &option_nodeps, },
1.35 { OPTION_BOOL, "nomd5", 0, NULL, "don't verify MD5 digest of files", NULL, },
1.36 { OPTION_BOOL, "nocontexts", 0, NULL, "don't install file security contexts", NULL, },
1.37 { OPTION_BOOL, "noorder", 0, NULL, "do not reorder package installation to satisfy dependencies", NULL, },
1.38 @@ -158,7 +161,7 @@
1.39 { OPTION_BOOL, "repackage", 0, NULL, "save erased package files by repackaging", NULL, },
1.40 { OPTION_BOOL, "replacefiles", 0, NULL, "ignore file conflicts between packages", NULL, },
1.41 { OPTION_BOOL, "replacepkgs", 0, NULL, "reinstall if the package is already present", NULL, },
1.42 - { OPTION_BOOL, "test", 0, NULL, "don't install, but tell if it would work or not", NULL },
1.43 + { OPTION_BOOL, "test", 0, NULL, "don't install, but tell if it would work or not", &option_test },
1.44 { OPTION_BOOL, "upgrade", 'U', "<packagefile>+", "upgrade package(s)", &option_upgrade },
1.45 { }
1.46 };
1.47 @@ -298,17 +301,20 @@
1.48 struct razor_package *package;
1.49 struct razor_package_iterator *pi;
1.50 const char *name, *version, *arch;
1.51 - int i, cmp;
1.52 + int i, cmp, errors;
1.53
1.54 qsort(argv, argc, sizeof(*argv), strcmpp);
1.55 i = 0;
1.56 + errors = 0;
1.57
1.58 pi = razor_package_iterator_create(set);
1.59
1.60 while (razor_package_iterator_next(pi, &package,
1.61 &name, &version, &arch)) {
1.62 while (cmp = strcmp(argv[i], name), cmp < 0 && i < argc) {
1.63 - printf("package %s is not installed\n", argv[i]);
1.64 + fprintf(stderr, "error: package %s is not installed\n",
1.65 + argv[i]);
1.66 + errors++;
1.67 i++;
1.68 }
1.69
1.70 @@ -319,6 +325,9 @@
1.71 }
1.72
1.73 razor_package_iterator_destroy(pi);
1.74 +
1.75 + if (errors)
1.76 + exit(1);
1.77 }
1.78
1.79 static struct razor_package_iterator *
1.80 @@ -500,9 +509,18 @@
1.81 }
1.82
1.83 static void
1.84 +remove_package(const char *name,
1.85 + const char *old_version, const char *new_version,
1.86 + const char *arch, void *data)
1.87 +{
1.88 + if (old_version)
1.89 + printf("remove %s-%s.%s\n", name, old_version, arch);
1.90 +}
1.91 +
1.92 +static void
1.93 command_erase(int argc, const char *argv[])
1.94 {
1.95 - struct razor_set *set, *next;
1.96 + struct razor_set *set, *upstream, *next;
1.97 struct razor_transaction *trans;
1.98 struct razor_package_query *query;
1.99 struct razor_package_iterator *pi;
1.100 @@ -515,8 +533,9 @@
1.101 }
1.102
1.103 set = razor_set_open(repo_filename);
1.104 + upstream = razor_set_create();
1.105
1.106 - trans = razor_transaction_create(set, NULL);
1.107 + trans = razor_transaction_create(set, upstream);
1.108
1.109 query = razor_package_query_create(set);
1.110 add_command_line_packages(set, query, argc, argv);
1.111 @@ -527,8 +546,23 @@
1.112 razor_transaction_remove_package(trans, package);
1.113 razor_package_iterator_destroy(pi);
1.114
1.115 + if (!option_nodeps) {
1.116 + if (razor_transaction_describe(trans) > 0) {
1.117 + printf("unsatisfied dependencies.\n");
1.118 + exit(1);
1.119 + }
1.120 + }
1.121 +
1.122 + if (option_test)
1.123 + exit(0);
1.124 +
1.125 next = razor_transaction_finish(trans);
1.126 +
1.127 + if (!option_justdb)
1.128 + razor_set_diff(set, next, remove_package, NULL);
1.129 +
1.130 razor_set_destroy(set);
1.131 + razor_set_destroy(upstream);
1.132
1.133 razor_set_destroy(next);
1.134 }