main.c
author Kristian H?gsberg <krh@redhat.com>
Sun Sep 30 00:18:20 2007 -0400 (2007-09-30)
changeset 43 d37d57c99cac
child 44 3d1a1517fa1d
permissions -rw-r--r--
Split command line interface out into main.c.
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@43
    10
static const char rawhide_repo_filename[] = "rawhide.repo";
krh@43
    11
krh@43
    12
static int
krh@43
    13
command_list(int argc, const char *argv[])
krh@43
    14
{
krh@43
    15
	struct razor_set *set;
krh@43
    16
krh@43
    17
	set = razor_set_open(repo_filename);
krh@43
    18
	razor_set_list(set);
krh@43
    19
	razor_set_destroy(set);
krh@43
    20
krh@43
    21
	return 0;
krh@43
    22
}
krh@43
    23
krh@43
    24
static int
krh@43
    25
command_list_requires(int argc, const char *argv[])
krh@43
    26
{
krh@43
    27
	struct razor_set *set;
krh@43
    28
krh@43
    29
	set = razor_set_open(repo_filename);
krh@43
    30
	razor_set_list_requires(set, argv[2]);
krh@43
    31
	razor_set_destroy(set);
krh@43
    32
krh@43
    33
	return 0;
krh@43
    34
}
krh@43
    35
krh@43
    36
static int
krh@43
    37
command_list_provides(int argc, const char *argv[])
krh@43
    38
{
krh@43
    39
	struct razor_set *set;
krh@43
    40
krh@43
    41
	set = razor_set_open(repo_filename);
krh@43
    42
	razor_set_list_provides(set, argv[2]);
krh@43
    43
	razor_set_destroy(set);
krh@43
    44
krh@43
    45
	return 0;
krh@43
    46
}
krh@43
    47
krh@43
    48
static int
krh@43
    49
command_what_requires(int argc, const char *argv[])
krh@43
    50
{
krh@43
    51
	struct razor_set *set;
krh@43
    52
krh@43
    53
	set = razor_set_open(repo_filename);
krh@43
    54
	razor_set_list_requires_packages(set, argv[2], argv[3]);
krh@43
    55
	razor_set_destroy(set);
krh@43
    56
krh@43
    57
	return 0;
krh@43
    58
}
krh@43
    59
krh@43
    60
static int
krh@43
    61
command_what_provides(int argc, const char *argv[])
krh@43
    62
{
krh@43
    63
	struct razor_set *set;
krh@43
    64
krh@43
    65
	set = razor_set_open(repo_filename);
krh@43
    66
	razor_set_list_provides_packages(set, argv[2], argv[3]);
krh@43
    67
	razor_set_destroy(set);
krh@43
    68
krh@43
    69
	return 0;
krh@43
    70
}
krh@43
    71
krh@43
    72
static int
krh@43
    73
command_import_yum(int argc, const char *argv[])
krh@43
    74
{
krh@43
    75
	struct razor_set *set;
krh@43
    76
krh@43
    77
	set = razor_set_create_from_yum_filelist(STDIN_FILENO);
krh@43
    78
	if (set == NULL)
krh@43
    79
		return 1;
krh@43
    80
	razor_set_write(set, rawhide_repo_filename);
krh@43
    81
	razor_set_destroy(set);
krh@43
    82
	printf("wrote %s\n", rawhide_repo_filename);
krh@43
    83
krh@43
    84
	return 0;
krh@43
    85
}
krh@43
    86
krh@43
    87
static int
krh@43
    88
command_import_rpmdb(int argc, const char *argv[])
krh@43
    89
{
krh@43
    90
	struct razor_set *set;
krh@43
    91
krh@43
    92
	set = razor_set_create_from_rpmdb();
krh@43
    93
	if (set == NULL)
krh@43
    94
		return 1;
krh@43
    95
	razor_set_write(set, repo_filename);
krh@43
    96
	razor_set_destroy(set);
krh@43
    97
	printf("wrote %s\n", repo_filename);
krh@43
    98
krh@43
    99
	return 0;
krh@43
   100
}
krh@43
   101
krh@43
   102
static int
krh@43
   103
command_validate(int argc, const char *argv[])
krh@43
   104
{
krh@43
   105
	struct razor_set *set;
krh@43
   106
krh@43
   107
	set = razor_set_open(repo_filename);
krh@43
   108
	if (set == NULL)
krh@43
   109
		return 1;
krh@43
   110
	razor_set_list_unsatisfied(set);
krh@43
   111
	razor_set_destroy(set);
krh@43
   112
krh@43
   113
	return 0;
krh@43
   114
}
krh@43
   115
krh@43
   116
static int
krh@43
   117
command_update(int argc, const char *argv[])
krh@43
   118
{
krh@43
   119
	struct razor_set *set, *upstream;
krh@43
   120
krh@43
   121
	set = razor_set_open(repo_filename);
krh@43
   122
	upstream = razor_set_open(rawhide_repo_filename);
krh@43
   123
	if (set == NULL || upstream == NULL)
krh@43
   124
		return 1;
krh@43
   125
	set = razor_set_update(set, upstream, argc - 2, argv + 2);
krh@43
   126
	razor_set_write(set, "system-updated.repo");
krh@43
   127
	razor_set_destroy(set);
krh@43
   128
	razor_set_destroy(upstream);
krh@43
   129
	printf("wrote system-updated.repo\n");
krh@43
   130
krh@43
   131
	return 0;
krh@43
   132
}
krh@43
   133
krh@43
   134
static struct {
krh@43
   135
	const char *name;
krh@43
   136
	const char *description;
krh@43
   137
	int (*func)(int argc, const char *argv[]);
krh@43
   138
} razor_commands[] = {
krh@43
   139
	{ "list", "list all packages", command_list },
krh@43
   140
	{ "list-requires", "list all requires or requires for the given package", command_list_requires },
krh@43
   141
	{ "list-provides", "list all provides or provides for the give package", command_list_provides },
krh@43
   142
	{ "what-requires", "list the packages that have the given requires", command_what_requires },
krh@43
   143
	{ "what-provides", "list the packages that have the given provides", command_what_provides },
krh@43
   144
	{ "import-yum", "import yum filelist.xml on stdin", command_import_yum },
krh@43
   145
	{ "import-rpmdb", "import the system rpm database", command_import_rpmdb },
krh@43
   146
	{ "validate", "validate a package set", command_validate },
krh@43
   147
	{ "update", "update all or specified packages", command_update }
krh@43
   148
};
krh@43
   149
krh@43
   150
static int
krh@43
   151
usage(void)
krh@43
   152
{
krh@43
   153
	int i;
krh@43
   154
krh@43
   155
	printf("usage:\n");
krh@43
   156
	for (i = 0; i < ARRAY_SIZE(razor_commands); i++)
krh@43
   157
		printf("  %-20s%s\n",
krh@43
   158
		       razor_commands[i].name, razor_commands[i].description);
krh@43
   159
krh@43
   160
	return 1;
krh@43
   161
}
krh@43
   162
krh@43
   163
int
krh@43
   164
main(int argc, const char *argv[])
krh@43
   165
{
krh@43
   166
	char *repo;
krh@43
   167
	int i;
krh@43
   168
krh@43
   169
	repo = getenv("RAZOR_REPO");
krh@43
   170
	if (repo != NULL)
krh@43
   171
		repo_filename = repo;
krh@43
   172
krh@43
   173
	if (argc < 2)
krh@43
   174
		return usage();
krh@43
   175
krh@43
   176
	for (i = 0; i < ARRAY_SIZE(razor_commands); i++)
krh@43
   177
		if (strcmp(razor_commands[i].name, argv[1]) == 0)
krh@43
   178
			return razor_commands[i].func(argc - 2, argv + 2);
krh@43
   179
krh@43
   180
	return usage();
krh@43
   181
}