main.c
author Kristian H?gsberg <krh@redhat.com>
Sun Nov 04 00:58:25 2007 -0400 (2007-11-04)
changeset 68 0587f1759f09
parent 66 bb4ca4a47f66
child 70 e94d16f789e5
permissions -rw-r--r--
Don't reset yum parser state when finishing parsing rpm:entry.

This fixes the bug where each package on got on of each property type.
krh@43
     1
#include <stdlib.h>
krh@43
     2
#include <stddef.h>
krh@43
     3
#include <stdio.h>
krh@43
     4
#include <string.h>
krh@43
     5
#include <unistd.h>
krh@43
     6
krh@43
     7
#include "razor.h"
krh@43
     8
krh@43
     9
static const char *repo_filename = "system.repo";
krh@44
    10
static const char *rawhide_repo_filename = "rawhide.repo";
krh@44
    11
static const char *updated_repo_filename = "system-updated.repo";
krh@43
    12
krh@43
    13
static int
krh@43
    14
command_list(int argc, const char *argv[])
krh@43
    15
{
krh@43
    16
	struct razor_set *set;
krh@43
    17
krh@43
    18
	set = razor_set_open(repo_filename);
krh@54
    19
	razor_set_list(set, argv[0]);
krh@43
    20
	razor_set_destroy(set);
krh@43
    21
krh@43
    22
	return 0;
krh@43
    23
}
krh@43
    24
krh@43
    25
static int
krh@43
    26
command_list_requires(int argc, const char *argv[])
krh@43
    27
{
krh@43
    28
	struct razor_set *set;
krh@43
    29
krh@43
    30
	set = razor_set_open(repo_filename);
krh@66
    31
	razor_set_list_properties(set, argv[0], RAZOR_PROPERTY_REQUIRES);
krh@43
    32
	razor_set_destroy(set);
krh@43
    33
krh@43
    34
	return 0;
krh@43
    35
}
krh@43
    36
krh@43
    37
static int
krh@43
    38
command_list_provides(int argc, const char *argv[])
krh@43
    39
{
krh@43
    40
	struct razor_set *set;
krh@43
    41
krh@43
    42
	set = razor_set_open(repo_filename);
krh@66
    43
	razor_set_list_properties(set, argv[0], RAZOR_PROPERTY_PROVIDES);
krh@43
    44
	razor_set_destroy(set);
krh@43
    45
krh@43
    46
	return 0;
krh@43
    47
}
krh@43
    48
krh@43
    49
static int
krh@67
    50
command_list_obsoletes(int argc, const char *argv[])
krh@67
    51
{
krh@67
    52
	struct razor_set *set;
krh@67
    53
krh@67
    54
	set = razor_set_open(repo_filename);
krh@67
    55
	razor_set_list_properties(set, argv[0], RAZOR_PROPERTY_OBSOLETES);
krh@67
    56
	razor_set_destroy(set);
krh@67
    57
krh@67
    58
	return 0;
krh@67
    59
}
krh@67
    60
krh@67
    61
static int
krh@67
    62
command_list_conflicts(int argc, const char *argv[])
krh@67
    63
{
krh@67
    64
	struct razor_set *set;
krh@67
    65
krh@67
    66
	set = razor_set_open(repo_filename);
krh@67
    67
	razor_set_list_properties(set, argv[0], RAZOR_PROPERTY_CONFLICTS);
krh@67
    68
	razor_set_destroy(set);
krh@67
    69
krh@67
    70
	return 0;
krh@67
    71
}
krh@67
    72
krh@67
    73
static int
krh@48
    74
command_list_files(int argc, const char *argv[])
krh@48
    75
{
krh@48
    76
	struct razor_set *set;
krh@48
    77
krh@48
    78
	set = razor_set_open(repo_filename);
krh@48
    79
	if (set == NULL)
krh@48
    80
		return 1;
krh@49
    81
	razor_set_list_files(set, argv[0]);
krh@48
    82
	razor_set_destroy(set);
krh@48
    83
krh@48
    84
	return 0;
krh@48
    85
}
krh@48
    86
krh@48
    87
static int
krh@52
    88
command_list_file_packages(int argc, const char *argv[])
krh@52
    89
{
krh@52
    90
	struct razor_set *set;
krh@52
    91
krh@52
    92
	set = razor_set_open(repo_filename);
krh@52
    93
	if (set == NULL)
krh@52
    94
		return 1;
krh@52
    95
	razor_set_list_file_packages(set, argv[0]);
krh@52
    96
	razor_set_destroy(set);
krh@52
    97
krh@52
    98
	return 0;
krh@52
    99
}
krh@52
   100
krh@56
   101
static int
krh@56
   102
command_list_package_files(int argc, const char *argv[])
krh@56
   103
{
krh@56
   104
	struct razor_set *set;
krh@56
   105
krh@56
   106
	set = razor_set_open(repo_filename);
krh@56
   107
	if (set == NULL)
krh@56
   108
		return 1;
krh@56
   109
	razor_set_list_package_files(set, argv[0]);
krh@56
   110
	razor_set_destroy(set);
krh@56
   111
krh@56
   112
	return 0;
krh@56
   113
}
krh@52
   114
krh@52
   115
static int
krh@43
   116
command_what_requires(int argc, const char *argv[])
krh@43
   117
{
krh@43
   118
	struct razor_set *set;
krh@43
   119
krh@43
   120
	set = razor_set_open(repo_filename);
krh@66
   121
	razor_set_list_property_packages(set, argv[0], argv[1],
krh@66
   122
					 RAZOR_PROPERTY_REQUIRES);
krh@43
   123
	razor_set_destroy(set);
krh@43
   124
krh@43
   125
	return 0;
krh@43
   126
}
krh@43
   127
krh@43
   128
static int
krh@43
   129
command_what_provides(int argc, const char *argv[])
krh@43
   130
{
krh@43
   131
	struct razor_set *set;
krh@43
   132
krh@43
   133
	set = razor_set_open(repo_filename);
krh@66
   134
	razor_set_list_property_packages(set, argv[0], argv[1],
krh@66
   135
					 RAZOR_PROPERTY_PROVIDES);
krh@43
   136
	razor_set_destroy(set);
krh@43
   137
krh@43
   138
	return 0;
krh@43
   139
}
krh@43
   140
krh@43
   141
static int
krh@43
   142
command_import_yum(int argc, const char *argv[])
krh@43
   143
{
krh@43
   144
	struct razor_set *set;
krh@43
   145
krh@43
   146
	set = razor_set_create_from_yum_filelist(STDIN_FILENO);
krh@43
   147
	if (set == NULL)
krh@43
   148
		return 1;
krh@43
   149
	razor_set_write(set, rawhide_repo_filename);
krh@43
   150
	razor_set_destroy(set);
krh@43
   151
	printf("wrote %s\n", rawhide_repo_filename);
krh@43
   152
krh@43
   153
	return 0;
krh@43
   154
}
krh@43
   155
krh@43
   156
static int
krh@43
   157
command_import_rpmdb(int argc, const char *argv[])
krh@43
   158
{
krh@43
   159
	struct razor_set *set;
krh@43
   160
krh@43
   161
	set = razor_set_create_from_rpmdb();
krh@43
   162
	if (set == NULL)
krh@43
   163
		return 1;
krh@43
   164
	razor_set_write(set, repo_filename);
krh@43
   165
	razor_set_destroy(set);
krh@43
   166
	printf("wrote %s\n", repo_filename);
krh@43
   167
krh@43
   168
	return 0;
krh@43
   169
}
krh@43
   170
krh@43
   171
static int
krh@43
   172
command_validate(int argc, const char *argv[])
krh@43
   173
{
krh@43
   174
	struct razor_set *set;
krh@43
   175
krh@43
   176
	set = razor_set_open(repo_filename);
krh@43
   177
	if (set == NULL)
krh@43
   178
		return 1;
krh@43
   179
	razor_set_list_unsatisfied(set);
krh@43
   180
	razor_set_destroy(set);
krh@43
   181
krh@43
   182
	return 0;
krh@43
   183
}
krh@43
   184
krh@43
   185
static int
krh@43
   186
command_update(int argc, const char *argv[])
krh@43
   187
{
krh@43
   188
	struct razor_set *set, *upstream;
krh@43
   189
krh@43
   190
	set = razor_set_open(repo_filename);
krh@43
   191
	upstream = razor_set_open(rawhide_repo_filename);
krh@43
   192
	if (set == NULL || upstream == NULL)
krh@43
   193
		return 1;
krh@45
   194
	set = razor_set_update(set, upstream, argc, argv);
krh@44
   195
	razor_set_write(set, updated_repo_filename);
krh@43
   196
	razor_set_destroy(set);
krh@43
   197
	razor_set_destroy(upstream);
krh@43
   198
	printf("wrote system-updated.repo\n");
krh@43
   199
krh@43
   200
	return 0;
krh@43
   201
}
krh@43
   202
krh@44
   203
static void
krh@44
   204
print_diff(const char *name,
krh@44
   205
	   const char *old_version, const char *new_version, void *data)
krh@44
   206
{
krh@44
   207
	if (old_version)
krh@44
   208
		printf("removing %s %s\n", name, old_version);
krh@44
   209
	else
krh@44
   210
		printf("install %s %s\n", name, new_version);
krh@44
   211
}
krh@44
   212
krh@44
   213
static int
krh@44
   214
command_diff(int argc, const char *argv[])
krh@44
   215
{
krh@44
   216
	struct razor_set *set, *updated;
krh@44
   217
krh@44
   218
	set = razor_set_open(repo_filename);
krh@44
   219
	updated = razor_set_open(updated_repo_filename);
krh@44
   220
	if (set == NULL || updated == NULL)
krh@44
   221
		return 1;
krh@44
   222
krh@44
   223
	razor_set_diff(set, updated, print_diff, NULL);	
krh@44
   224
krh@44
   225
	razor_set_destroy(set);
krh@44
   226
	razor_set_destroy(updated);
krh@44
   227
krh@44
   228
	return 0;
krh@44
   229
}
krh@44
   230
krh@43
   231
static struct {
krh@43
   232
	const char *name;
krh@43
   233
	const char *description;
krh@43
   234
	int (*func)(int argc, const char *argv[]);
krh@43
   235
} razor_commands[] = {
krh@43
   236
	{ "list", "list all packages", command_list },
krh@67
   237
	{ "list-requires", "list all requires for the given package", command_list_requires },
krh@67
   238
	{ "list-provides", "list all provides for the give package", command_list_provides },
krh@67
   239
	{ "list-obsoletes", "list all obsoletes for the give package", command_list_obsoletes },
krh@67
   240
	{ "list-conflicts", "list all conflicts for the give package", command_list_conflicts },
krh@48
   241
	{ "list-files", "list files for package set", command_list_files },
krh@52
   242
	{ "list-file-packages", "list packages owning file", command_list_file_packages },
krh@56
   243
	{ "list-package-files", "list files in package", command_list_package_files },
krh@43
   244
	{ "what-requires", "list the packages that have the given requires", command_what_requires },
krh@43
   245
	{ "what-provides", "list the packages that have the given provides", command_what_provides },
krh@43
   246
	{ "import-yum", "import yum filelist.xml on stdin", command_import_yum },
krh@43
   247
	{ "import-rpmdb", "import the system rpm database", command_import_rpmdb },
krh@43
   248
	{ "validate", "validate a package set", command_validate },
krh@44
   249
	{ "update", "update all or specified packages", command_update },
krh@44
   250
	{ "diff", "show diff between two package sets", command_diff }
krh@43
   251
};
krh@43
   252
krh@43
   253
static int
krh@43
   254
usage(void)
krh@43
   255
{
krh@43
   256
	int i;
krh@43
   257
krh@43
   258
	printf("usage:\n");
krh@43
   259
	for (i = 0; i < ARRAY_SIZE(razor_commands); i++)
krh@43
   260
		printf("  %-20s%s\n",
krh@43
   261
		       razor_commands[i].name, razor_commands[i].description);
krh@43
   262
krh@43
   263
	return 1;
krh@43
   264
}
krh@43
   265
krh@43
   266
int
krh@43
   267
main(int argc, const char *argv[])
krh@43
   268
{
krh@43
   269
	char *repo;
krh@43
   270
	int i;
krh@43
   271
krh@43
   272
	repo = getenv("RAZOR_REPO");
krh@43
   273
	if (repo != NULL)
krh@43
   274
		repo_filename = repo;
krh@43
   275
krh@43
   276
	if (argc < 2)
krh@43
   277
		return usage();
krh@43
   278
krh@43
   279
	for (i = 0; i < ARRAY_SIZE(razor_commands); i++)
krh@43
   280
		if (strcmp(razor_commands[i].name, argv[1]) == 0)
krh@43
   281
			return razor_commands[i].func(argc - 2, argv + 2);
krh@43
   282
krh@43
   283
	return usage();
krh@43
   284
}