main.c
author Kristian H?gsberg <krh@redhat.com>
Mon Oct 22 22:53:55 2007 -0400 (2007-10-22)
changeset 52 8cb4c45dc86f
parent 50 3ec35baa30c9
child 54 9e3907688d78
permissions -rw-r--r--
Track file owner ship.
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@43
    19
	razor_set_list(set);
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@50
    31
	razor_set_list_requires(set, argv[0]);
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@50
    43
	razor_set_list_provides(set, argv[0]);
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@48
    50
command_list_files(int argc, const char *argv[])
krh@48
    51
{
krh@48
    52
	struct razor_set *set;
krh@48
    53
krh@48
    54
	set = razor_set_open(repo_filename);
krh@48
    55
	if (set == NULL)
krh@48
    56
		return 1;
krh@49
    57
	razor_set_list_files(set, argv[0]);
krh@48
    58
	razor_set_destroy(set);
krh@48
    59
krh@48
    60
	return 0;
krh@48
    61
}
krh@48
    62
krh@48
    63
static int
krh@52
    64
command_list_file_packages(int argc, const char *argv[])
krh@52
    65
{
krh@52
    66
	struct razor_set *set;
krh@52
    67
krh@52
    68
	set = razor_set_open(repo_filename);
krh@52
    69
	if (set == NULL)
krh@52
    70
		return 1;
krh@52
    71
	razor_set_list_file_packages(set, argv[0]);
krh@52
    72
	razor_set_destroy(set);
krh@52
    73
krh@52
    74
	return 0;
krh@52
    75
}
krh@52
    76
krh@52
    77
krh@52
    78
static int
krh@43
    79
command_what_requires(int argc, const char *argv[])
krh@43
    80
{
krh@43
    81
	struct razor_set *set;
krh@43
    82
krh@43
    83
	set = razor_set_open(repo_filename);
krh@50
    84
	razor_set_list_requires_packages(set, argv[0], argv[1]);
krh@43
    85
	razor_set_destroy(set);
krh@43
    86
krh@43
    87
	return 0;
krh@43
    88
}
krh@43
    89
krh@43
    90
static int
krh@43
    91
command_what_provides(int argc, const char *argv[])
krh@43
    92
{
krh@43
    93
	struct razor_set *set;
krh@43
    94
krh@43
    95
	set = razor_set_open(repo_filename);
krh@50
    96
	razor_set_list_provides_packages(set, argv[0], argv[1]);
krh@43
    97
	razor_set_destroy(set);
krh@43
    98
krh@43
    99
	return 0;
krh@43
   100
}
krh@43
   101
krh@43
   102
static int
krh@43
   103
command_import_yum(int argc, const char *argv[])
krh@43
   104
{
krh@43
   105
	struct razor_set *set;
krh@43
   106
krh@43
   107
	set = razor_set_create_from_yum_filelist(STDIN_FILENO);
krh@43
   108
	if (set == NULL)
krh@43
   109
		return 1;
krh@43
   110
	razor_set_write(set, rawhide_repo_filename);
krh@43
   111
	razor_set_destroy(set);
krh@43
   112
	printf("wrote %s\n", rawhide_repo_filename);
krh@43
   113
krh@43
   114
	return 0;
krh@43
   115
}
krh@43
   116
krh@43
   117
static int
krh@43
   118
command_import_rpmdb(int argc, const char *argv[])
krh@43
   119
{
krh@43
   120
	struct razor_set *set;
krh@43
   121
krh@43
   122
	set = razor_set_create_from_rpmdb();
krh@43
   123
	if (set == NULL)
krh@43
   124
		return 1;
krh@43
   125
	razor_set_write(set, repo_filename);
krh@43
   126
	razor_set_destroy(set);
krh@43
   127
	printf("wrote %s\n", repo_filename);
krh@43
   128
krh@43
   129
	return 0;
krh@43
   130
}
krh@43
   131
krh@43
   132
static int
krh@43
   133
command_validate(int argc, const char *argv[])
krh@43
   134
{
krh@43
   135
	struct razor_set *set;
krh@43
   136
krh@43
   137
	set = razor_set_open(repo_filename);
krh@43
   138
	if (set == NULL)
krh@43
   139
		return 1;
krh@43
   140
	razor_set_list_unsatisfied(set);
krh@43
   141
	razor_set_destroy(set);
krh@43
   142
krh@43
   143
	return 0;
krh@43
   144
}
krh@43
   145
krh@43
   146
static int
krh@43
   147
command_update(int argc, const char *argv[])
krh@43
   148
{
krh@43
   149
	struct razor_set *set, *upstream;
krh@43
   150
krh@43
   151
	set = razor_set_open(repo_filename);
krh@43
   152
	upstream = razor_set_open(rawhide_repo_filename);
krh@43
   153
	if (set == NULL || upstream == NULL)
krh@43
   154
		return 1;
krh@45
   155
	set = razor_set_update(set, upstream, argc, argv);
krh@44
   156
	razor_set_write(set, updated_repo_filename);
krh@43
   157
	razor_set_destroy(set);
krh@43
   158
	razor_set_destroy(upstream);
krh@43
   159
	printf("wrote system-updated.repo\n");
krh@43
   160
krh@43
   161
	return 0;
krh@43
   162
}
krh@43
   163
krh@44
   164
static void
krh@44
   165
print_diff(const char *name,
krh@44
   166
	   const char *old_version, const char *new_version, void *data)
krh@44
   167
{
krh@44
   168
	if (old_version)
krh@44
   169
		printf("removing %s %s\n", name, old_version);
krh@44
   170
	else
krh@44
   171
		printf("install %s %s\n", name, new_version);
krh@44
   172
}
krh@44
   173
krh@44
   174
static int
krh@44
   175
command_diff(int argc, const char *argv[])
krh@44
   176
{
krh@44
   177
	struct razor_set *set, *updated;
krh@44
   178
krh@44
   179
	set = razor_set_open(repo_filename);
krh@44
   180
	updated = razor_set_open(updated_repo_filename);
krh@44
   181
	if (set == NULL || updated == NULL)
krh@44
   182
		return 1;
krh@44
   183
krh@44
   184
	razor_set_diff(set, updated, print_diff, NULL);	
krh@44
   185
krh@44
   186
	razor_set_destroy(set);
krh@44
   187
	razor_set_destroy(updated);
krh@44
   188
krh@44
   189
	return 0;
krh@44
   190
}
krh@44
   191
krh@43
   192
static struct {
krh@43
   193
	const char *name;
krh@43
   194
	const char *description;
krh@43
   195
	int (*func)(int argc, const char *argv[]);
krh@43
   196
} razor_commands[] = {
krh@43
   197
	{ "list", "list all packages", command_list },
krh@43
   198
	{ "list-requires", "list all requires or requires for the given package", command_list_requires },
krh@43
   199
	{ "list-provides", "list all provides or provides for the give package", command_list_provides },
krh@48
   200
	{ "list-files", "list files for package set", command_list_files },
krh@52
   201
	{ "list-file-packages", "list packages owning file", command_list_file_packages },
krh@43
   202
	{ "what-requires", "list the packages that have the given requires", command_what_requires },
krh@43
   203
	{ "what-provides", "list the packages that have the given provides", command_what_provides },
krh@43
   204
	{ "import-yum", "import yum filelist.xml on stdin", command_import_yum },
krh@43
   205
	{ "import-rpmdb", "import the system rpm database", command_import_rpmdb },
krh@43
   206
	{ "validate", "validate a package set", command_validate },
krh@44
   207
	{ "update", "update all or specified packages", command_update },
krh@44
   208
	{ "diff", "show diff between two package sets", command_diff }
krh@43
   209
};
krh@43
   210
krh@43
   211
static int
krh@43
   212
usage(void)
krh@43
   213
{
krh@43
   214
	int i;
krh@43
   215
krh@43
   216
	printf("usage:\n");
krh@43
   217
	for (i = 0; i < ARRAY_SIZE(razor_commands); i++)
krh@43
   218
		printf("  %-20s%s\n",
krh@43
   219
		       razor_commands[i].name, razor_commands[i].description);
krh@43
   220
krh@43
   221
	return 1;
krh@43
   222
}
krh@43
   223
krh@43
   224
int
krh@43
   225
main(int argc, const char *argv[])
krh@43
   226
{
krh@43
   227
	char *repo;
krh@43
   228
	int i;
krh@43
   229
krh@43
   230
	repo = getenv("RAZOR_REPO");
krh@43
   231
	if (repo != NULL)
krh@43
   232
		repo_filename = repo;
krh@43
   233
krh@43
   234
	if (argc < 2)
krh@43
   235
		return usage();
krh@43
   236
krh@43
   237
	for (i = 0; i < ARRAY_SIZE(razor_commands); i++)
krh@43
   238
		if (strcmp(razor_commands[i].name, argv[1]) == 0)
krh@43
   239
			return razor_commands[i].func(argc - 2, argv + 2);
krh@43
   240
krh@43
   241
	return usage();
krh@43
   242
}