Esempio n. 1
0
File: main.c Progetto: clee/razor
static int
command_remove(int argc, const char *argv[])
{
	struct razor_set *set, *upstream;
	struct razor_transaction *trans;
	int i, errors;

	set = razor_root_open_read_only(install_root);
	if (set == NULL)
		return 1;

	upstream = razor_set_create();
	trans = razor_transaction_create(set, upstream);
	for (i = 0; i < argc; i++) {
		if (mark_packages_for_removal(trans, set, argv[i]) == 0) {
			fprintf(stderr, "no match for %s\n", argv[i]);
			return 1;
		}
	}

	errors = razor_transaction_resolve(trans);
	if (errors)
		return 1;

	set = razor_transaction_finish(trans);
	razor_set_write(set, updated_repo_filename, RAZOR_REPO_FILE_MAIN);
	razor_set_destroy(set);
	razor_set_destroy(upstream);
	printf("wrote system-updated.rzdb\n");

	return 0;
}
Esempio n. 2
0
File: main.c Progetto: clee/razor
static int
command_list_package_files(int argc, const char *argv[])
{
	struct razor_set *set;
	struct razor_package_iterator *pi;
	struct razor_package *package;
	const char *name, *version, *arch;

	set = razor_root_open_read_only(install_root);
	if (set == NULL)
		return 1;

	pi = create_iterator_from_argv(set, argc, argv);
	while (razor_package_iterator_next(pi, &package,
					   RAZOR_DETAIL_NAME, &name,
					   RAZOR_DETAIL_VERSION, &version,
					   RAZOR_DETAIL_ARCH, &arch,
					   RAZOR_DETAIL_LAST))
		razor_set_list_package_files(set, package);
	razor_package_iterator_destroy(pi);

	razor_set_destroy(set);

	return 0;
}
Esempio n. 3
0
File: root.c Progetto: clee/razor
RAZOR_EXPORT struct razor_set *
razor_root_open_read_only(const char *root)
{
	char path[PATH_MAX], details_path[PATH_MAX], files_path[PATH_MAX];
	struct razor_set *set;

	assert (root != NULL);

	snprintf(path, sizeof path, "%s%s/%s",
		 root, razor_root_path, system_repo_filename);
	snprintf(details_path, sizeof details_path,
		 "%s%s/%s", root, razor_root_path, system_repo_details_filename);
	snprintf(files_path, sizeof files_path,
		 "%s%s/%s", root, razor_root_path, system_repo_files_filename);


	set = razor_set_open(path);
	if (set == NULL)
		return NULL;

	if (razor_set_open_details(set, details_path) ||
	    razor_set_open_files(set, files_path)) {
		razor_set_destroy(set);
		return NULL;
	}

	return set;
}
Esempio n. 4
0
File: main.c Progetto: clee/razor
static int
command_import_yum(int argc, const char *argv[])
{
	struct razor_set *set;
	char buffer[512];

	printf("downloading from %s.\n", yum_url);
	snprintf(buffer, sizeof buffer,
		 "%s/repodata/primary.xml.gz", yum_url);
	if (download_if_missing(buffer, "primary.xml.gz") < 0)
		return -1;
	snprintf(buffer, sizeof buffer,
		 "%s/repodata/filelists.xml.gz", yum_url);
	if (download_if_missing(buffer, "filelists.xml.gz") < 0)
		return -1;

	set = razor_set_create_from_yum();
	if (set == NULL)
		return 1;
	razor_set_write(set, rawhide_repo_filename, RAZOR_REPO_FILE_MAIN);
	razor_set_write(set, "rawhide-details.rzdb", RAZOR_REPO_FILE_DETAILS);
	razor_set_write(set, "rawhide-files.rzdb", RAZOR_REPO_FILE_FILES);
	razor_set_destroy(set);
	printf("wrote %s\n", rawhide_repo_filename);

	return 0;
}
Esempio n. 5
0
File: main.c Progetto: clee/razor
static int
command_diff(int argc, const char *argv[])
{
	struct razor_set *set, *updated;

	set = razor_root_open_read_only(install_root);
	updated = razor_set_open(updated_repo_filename);
	if (set == NULL || updated == NULL)
		return 1;

	razor_set_diff(set, updated, print_diff, NULL);

	razor_set_destroy(set);
	razor_set_destroy(updated);

	return 0;
}
Esempio n. 6
0
File: root.c Progetto: clee/razor
RAZOR_EXPORT int
razor_root_create(const char *root)
{
	struct stat buf;
	struct razor_set *set;
	char path[PATH_MAX], details_path[PATH_MAX], files_path[PATH_MAX];

	assert (root != NULL);

	if (root[0] == '\0') {
		/* root is file system root */
	} else if (stat(root, &buf) < 0) {
		if (mkdir(root, 0777) < 0) {
			fprintf(stderr,
				"could not create install root \"%s\"\n",
				root);
			return -1;
		}
		fprintf(stderr, "created install root \"%s\"\n", root);
	} else if (!S_ISDIR(buf.st_mode)) {
		fprintf(stderr,
			"install root \"%s\" exists, but is not a directory\n",
			root);
		return -1;
	}

	snprintf(path, sizeof path, "%s/%s",
		 razor_root_path, system_repo_filename);
	if (razor_create_dir(root, path) < 0) {
		fprintf(stderr, "could not create %s%s\n",
			root, razor_root_path);
		return -1;
	}

	set = razor_set_create();
	snprintf(path, sizeof path, "%s%s/%s",
		 root, razor_root_path, system_repo_filename);
	snprintf(details_path, sizeof details_path, "%s%s/%s",
		 root, razor_root_path, system_repo_details_filename);
	snprintf(files_path, sizeof files_path, "%s%s/%s",
		 root, razor_root_path, system_repo_files_filename);
	if (stat(path, &buf) == 0) {
		fprintf(stderr,
			"a razor install root is already initialized\n");
		return -1;
	}
	if (razor_set_write(set, path, RAZOR_REPO_FILE_MAIN) < 0 ||
	    razor_set_write(set, details_path, RAZOR_REPO_FILE_DETAILS) < 0 ||
	    razor_set_write(set, files_path, RAZOR_REPO_FILE_FILES) < 0 ) {
		fprintf(stderr, "could not write initial package set\n");
		return -1;
	}
	razor_set_destroy(set);

	return 0;
}
Esempio n. 7
0
File: main.c Progetto: clee/razor
static int
command_update(int argc, const char *argv[])
{
	struct razor_set *set, *upstream;
	struct razor_transaction *trans;
	int i, errors;

	set = razor_root_open_read_only(install_root);
	if (set == NULL)
		return 1;

	upstream = razor_set_open(rawhide_repo_filename);
	if (upstream == NULL ||
	    razor_set_open_details(upstream, "rawhide-details.rzdb") ||
	    razor_set_open_files(upstream, "rawhide-files.rzdb"))
		return 1;

	trans = razor_transaction_create(set, upstream);
	if (argc == 0)
		razor_transaction_update_all(trans);
	for (i = 0; i < argc; i++) {
		if (mark_packages_for_update(trans, set, argv[i]) == 0) {
			fprintf(stderr, "no match for %s\n", argv[i]);
			return 1;
		}
	}

	razor_transaction_resolve(trans);
	errors = razor_transaction_describe(trans);
	if (errors) {
		fprintf(stderr, "unresolved dependencies\n");
		return 1;
	}

	set = razor_transaction_finish(trans);
	razor_set_write(set, updated_repo_filename, RAZOR_REPO_FILE_MAIN);
	razor_set_destroy(set);
	razor_set_destroy(upstream);
	printf("wrote system-updated.rzdb\n");

	return 0;
}
Esempio n. 8
0
File: root.c Progetto: clee/razor
RAZOR_EXPORT int
razor_root_close(struct razor_root *root)
{
	assert (root != NULL);

	razor_set_destroy(root->system);
	unlink(root->new_path);
	close(root->fd);
	free(root);

	return 0;
}
Esempio n. 9
0
File: root.c Progetto: clee/razor
RAZOR_EXPORT int
razor_root_commit(struct razor_root *root)
{
	assert (root != NULL);

	/* Make it so. */
	rename(root->new_path, root->path);
	printf("renamed %s to %s\n", root->new_path, root->path);
	razor_set_destroy(root->system);
	close(root->fd);
	free(root);

	return 0;
}
Esempio n. 10
0
static int
command_list_files(int argc, const char *argv[])
{
	struct razor_set *set;

	set = razor_root_open_read_only(install_root);
	if (set == NULL)
		return 1;

	razor_set_list_files(set, argv[0]);
	razor_set_destroy(set);

	return 0;
}
Esempio n. 11
0
File: main.c Progetto: clee/razor
static int
command_search(int argc, const char *argv[])
{
	struct razor_set *set;
	struct razor_package_iterator *pi;
	struct razor_package *package;
	char pattern[SEARCH_MAX];
	const char *name, *version, *arch;
	const char *summary, *description, *url, *license;

	if (!argv[0]) {
		fprintf(stderr, "must specify a search term\n");
		return 1;
	}

	snprintf(pattern, sizeof pattern, "*%s*", argv[0]);

	set = razor_set_open(rawhide_repo_filename);
	if (set == NULL)
		return 1;

	if (razor_set_open_details(set, "rawhide-details.rzdb"))
		return 1;

	pi = razor_package_iterator_create(set);
	while (razor_package_iterator_next(pi, &package,
					   RAZOR_DETAIL_NAME, &name,
					   RAZOR_DETAIL_VERSION, &version,
					   RAZOR_DETAIL_ARCH, &arch,
					   RAZOR_DETAIL_SUMMARY, &summary,
					   RAZOR_DETAIL_DESCRIPTION, &description,
					   RAZOR_DETAIL_URL, &url,
					   RAZOR_DETAIL_LICENSE, &license,
					   RAZOR_DETAIL_LAST)) {
		if (!fnmatch(pattern, name, FNM_CASEFOLD) ||
		    !fnmatch(pattern, url, FNM_CASEFOLD) ||
		    !fnmatch(pattern, summary, FNM_CASEFOLD) ||
		    !fnmatch(pattern, description, FNM_CASEFOLD))
			printf("%s-%s.%s: %s\n", name, version, arch, summary);
	}
	razor_package_iterator_destroy(pi);
	razor_set_destroy(set);

	return 0;
}
Esempio n. 12
0
File: main.c Progetto: clee/razor
static int
command_download(int argc, const char *argv[])
{
	struct razor_set *set;
	struct razor_package_iterator *pi;
	struct razor_package *package;
	const char *pattern = argv[0], *name, *version, *arch;
	char url[256], file[256];
	int matches = 0;

	if (mkdir("rpms", 0777) && errno != EEXIST) {
		fprintf(stderr, "failed to create rpms directory.\n");
		return 1;
	}

	set = razor_set_open(rawhide_repo_filename);
	pi = razor_package_iterator_create(set);
	while (razor_package_iterator_next(pi, &package,
					   RAZOR_DETAIL_NAME, &name,
					   RAZOR_DETAIL_VERSION, &version,
					   RAZOR_DETAIL_ARCH, &arch,
					   RAZOR_DETAIL_LAST)) {
		if (pattern && fnmatch(pattern, name, 0) != 0)
			continue;

		matches++;
		snprintf(url, sizeof url,
			 "%s/Packages/%s-%s.%s.rpm",
			 yum_url, name, version, arch);
		snprintf(file, sizeof file,
			 "rpms/%s-%s.%s.rpm", name, version, arch);
		download_if_missing(url, file);
	}
	razor_package_iterator_destroy(pi);
	razor_set_destroy(set);

	if (matches == 0)
		fprintf(stderr, "no packages matched \"%s\"\n", pattern);
	else if (matches == 1)
		fprintf(stderr, "downloaded 1 package\n");
	else
		fprintf(stderr, "downloaded %d packages\n", matches);

	return 0;
}
Esempio n. 13
0
File: main.c Progetto: clee/razor
static int
command_list_file_packages(int argc, const char *argv[])
{
	struct razor_set *set;
	struct razor_package_iterator *pi;

	set = razor_root_open_read_only(install_root);
	if (set == NULL)
		return 1;

	pi = razor_package_iterator_create_for_file(set, argv[0]);
	list_packages(pi, 0);
	razor_package_iterator_destroy(pi);

	razor_set_destroy(set);

	return 0;
}
Esempio n. 14
0
File: main.c Progetto: clee/razor
static int
command_info(int argc, const char *argv[])
{
	struct razor_set *set;
	struct razor_package_iterator *pi;
	struct razor_package *package;
	const char *pattern = argv[0], *name, *version, *arch;
	const char *summary, *description, *url, *license;

	set = razor_root_open_read_only(install_root);
	if (set == NULL)
		return 1;

	pi = razor_package_iterator_create(set);
	while (razor_package_iterator_next(pi, &package,
					   RAZOR_DETAIL_NAME, &name,
					   RAZOR_DETAIL_VERSION, &version,
					   RAZOR_DETAIL_ARCH, &arch,
					   RAZOR_DETAIL_LAST)) {
		if (pattern && fnmatch(pattern, name, 0) != 0)
			continue;

		razor_package_get_details (set, package,
					   RAZOR_DETAIL_SUMMARY, &summary,
					   RAZOR_DETAIL_DESCRIPTION, &description,
					   RAZOR_DETAIL_URL, &url,
					   RAZOR_DETAIL_LICENSE, &license,
					   RAZOR_DETAIL_LAST);

		printf ("Name:        %s\n", name);
		printf ("Arch:        %s\n", arch);
		printf ("Version:     %s\n", version);
		printf ("URL:         %s\n", url);
		printf ("License:     %s\n", license);
		printf ("Summary:     %s\n", summary);
		printf ("Description:\n");
		printf ("%s\n", description);
		printf ("\n");
	}
	razor_package_iterator_destroy(pi);
	razor_set_destroy(set);

	return 0;
}
Esempio n. 15
0
File: main.c Progetto: clee/razor
static int
list_property_packages(const char *ref_name,
		       const char *ref_version,
		       uint32_t type)
{
	struct razor_set *set;
	struct razor_property *property;
	struct razor_property_iterator *prop_iter;
	struct razor_package_iterator *pkg_iter;
	const char *name, *version;
	uint32_t flags;

	if (ref_name == NULL)
		return 0;

	set = razor_root_open_read_only(install_root);
	if (set == NULL)
		return 1;

	prop_iter = razor_property_iterator_create(set, NULL);
	while (razor_property_iterator_next(prop_iter, &property,
					    &name, &flags, &version)) {
		if (strcmp(ref_name, name) != 0)
			continue;
		if (ref_version &&
		    (flags & RAZOR_PROPERTY_RELATION_MASK) == RAZOR_PROPERTY_EQUAL &&
		    strcmp(ref_version, version) != 0)
			continue;
		if ((flags & RAZOR_PROPERTY_TYPE_MASK) != type)
			continue;

		pkg_iter =
			razor_package_iterator_create_for_property(set,
								   property);
		list_packages(pkg_iter, 0);
		razor_package_iterator_destroy(pkg_iter);
	}
	razor_property_iterator_destroy(prop_iter);

	razor_set_destroy(set);

	return 0;
}
Esempio n. 16
0
File: main.c Progetto: clee/razor
static int
command_list(int argc, const char *argv[])
{
	struct razor_package_iterator *pi;
	struct razor_set *set;
	uint32_t flags = 0;
	int i = 0;

	if (i < argc && strcmp(argv[i], "--only-names") == 0) {
		flags |= LIST_PACKAGES_ONLY_NAMES;
		i++;
	}

	set = razor_root_open_read_only(install_root);
	if (set == NULL)
		return 1;

	pi = create_iterator_from_argv(set, argc - i, argv + i);
	list_packages(pi, flags);
	razor_package_iterator_destroy(pi);
	razor_set_destroy(set);

	return 0;
}
Esempio n. 17
0
File: main.c Progetto: clee/razor
static int
command_install(int argc, const char *argv[])
{
	struct razor_root *root;
	struct razor_set *system, *upstream, *next;
	struct razor_transaction *trans;
	int i = 0, dependencies = 1;

	if (i < argc && strcmp(argv[i], "--no-dependencies") == 0) {
		dependencies = 0;
		i++;
	}

	root = razor_root_open(install_root);
	if (root == NULL)
		return 1;

	system = razor_root_get_system_set(root);
	upstream = razor_set_open(rawhide_repo_filename);
	if (upstream == NULL ||
	    razor_set_open_details(upstream, "rawhide-details.rzdb") ||
	    razor_set_open_files(upstream, "rawhide-files.rzdb")) {
			fprintf(stderr, "couldn't open rawhide repo\n");
			razor_root_close(root);
			return 1;
	}		

	trans = razor_transaction_create(system, upstream);

	for (; i < argc; i++) {
		if (mark_packages_for_update(trans, upstream, argv[i]) == 0) {
			fprintf(stderr, "no package matched %s\n", argv[i]);
			razor_root_close(root);
			return 1;
		}
	}

	if (dependencies) {
		razor_transaction_resolve(trans);
		if (razor_transaction_describe(trans) > 0) {
			razor_root_close(root);
			return 1;
		}
	}

	next = razor_transaction_finish(trans);

	razor_root_update(root, next);

	if (mkdir("rpms", 0777) && errno != EEXIST) {
		fprintf(stderr, "failed to create rpms directory.\n");
		razor_root_close(root);
		return 1;
	}

	if (download_packages(system, next) < 0) {
		razor_root_close(root);
                return 1;
        }

	install_packages(system, next);

	razor_set_destroy(next);
	razor_set_destroy(upstream);

	return razor_root_commit(root);
}
Esempio n. 18
0
File: main.c Progetto: clee/razor
static int
command_import_rpms(int argc, const char *argv[])
{
	DIR *dir;
	struct dirent *de;
	struct razor_importer *importer;
	struct razor_set *set;
	struct razor_rpm *rpm;
	int len, imported_count = 0;
	char filename[256];
	const char *dirname = argv[0];

	if (dirname == NULL) {
		fprintf(stderr, "usage: razor import-rpms DIR\n");
		return -1;
	}

	dir = opendir(dirname);
	if (dir == NULL) {
		fprintf(stderr, "couldn't read dir %s\n", dirname);
		return -1;
	}

	importer = razor_importer_create();

	while (de = readdir(dir), de != NULL) {
		len = strlen(de->d_name);
		if (len < 5 || strcmp(de->d_name + len - 4, ".rpm") != 0)
		    continue;
		snprintf(filename, sizeof filename,
			 "%s/%s", dirname, de->d_name);
		rpm = razor_rpm_open(filename);
		if (rpm == NULL) {
			fprintf(stderr,
				"failed to open rpm \"%s\"\n", filename);
			continue;
		}
		if (razor_importer_add_rpm(importer, rpm)) {
			fprintf(stderr, "couldn't import %s\n", filename);
			break;
		}
		razor_rpm_close(rpm);

		printf("\rimporting %d", ++imported_count);
		fflush(stdout);
	}

	if (de != NULL) {
		razor_importer_destroy(importer);
		return -1;
	}

	printf("\nsaving\n");
	set = razor_importer_finish(importer);

	razor_set_write(set, repo_filename, RAZOR_REPO_FILE_MAIN);
	razor_set_write(set, "system-details.rzdb", RAZOR_REPO_FILE_DETAILS);
	razor_set_write(set, "system-files.rzdb", RAZOR_REPO_FILE_FILES);
	razor_set_destroy(set);
	printf("wrote %s\n", repo_filename);

	return 0;
}