Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
search/rquery: Automatically update repo catalogue
Bryan Drewery committed 13 years ago
commit 49c2e93277ab39c814367023a5ef8d9e991293df
parent 6c86611
2 files changed +37 -9
modified pkg/rquery.c
@@ -1,7 +1,7 @@
/*-
 * Copyright (c) 2011-2012 Baptiste Daroussin <bapt@FreeBSD.org>
 * Copyright (c) 2011-2012 Marin Atanasov Nikolov <dnaeon@gmail.com>
-
 * Copyright (c) 2012 Bryan Drewery <bryan@shatow.net>
+
 * Copyright (c) 2012-2013 Bryan Drewery <bdrewery@FreeBSD.org>
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
@@ -93,9 +93,12 @@ exec_rquery(int argc, char **argv)
	struct sbuf *sqlcond = NULL;
	const unsigned int q_flags_len = (sizeof(accepted_rquery_flags)/sizeof(accepted_rquery_flags[0]));
	const char *reponame = NULL;
+
	bool auto_update;
	bool onematched = false;

-
	while ((ch = getopt(argc, argv, "agixe:r:")) != -1) {
+
	pkg_config_bool(PKG_CONFIG_REPO_AUTOUPDATE, &auto_update);
+

+
	while ((ch = getopt(argc, argv, "agixe:r:U")) != -1) {
		switch (ch) {
		case 'a':
			match = MATCH_ALL;
@@ -116,6 +119,9 @@ exec_rquery(int argc, char **argv)
		case 'r':
			reponame = optarg;
			break;
+
		case 'U':
+
			auto_update = false;
+
			break;
		default:
			usage_rquery();
			return (EX_USAGE);
@@ -148,15 +154,23 @@ exec_rquery(int argc, char **argv)
		sbuf_finish(sqlcond);
	}

-
	ret = pkgdb_access(PKGDB_MODE_READ, PKGDB_DB_REPO);
+
	/* Only auto update if the user has write access. */
+
	if (auto_update &&
+
	    pkgdb_access(PKGDB_MODE_READ|PKGDB_MODE_WRITE|PKGDB_MODE_CREATE,
+
	    PKGDB_DB_REPO) == EPKG_ENOACCESS)
+
		auto_update = false;
+

+
	ret = pkgdb_access(PKGDB_MODE_READ|PKGDB_MODE_CREATE, PKGDB_DB_REPO);
	if (ret == EPKG_ENOACCESS) {
		warnx("Insufficient privilege to query package database");
		return (EX_NOPERM);
-
	} else if (ret == EPKG_ENODB) {
-
		return (EX_OK);
	} else if (ret != EPKG_OK)
		return (EX_IOERR);

+
	/* first update the remote repositories if needed */
+
	if (auto_update && (ret = pkgcli_update(false)) != EPKG_OK)
+
		return (ret);
+

	ret = pkgdb_open(&db, PKGDB_REMOTE);
	if (ret != EPKG_OK)
		return (EX_IOERR);
modified pkg/search.c
@@ -247,8 +247,11 @@ exec_search(int argc, char **argv)
	struct pkgdb_it *it = NULL;
	struct pkg *pkg = NULL;
	bool atleastone = false;
+
	bool auto_update;

-
	while ((ch = getopt(argc, argv, "cDdefgiL:opqQ:r:S:sx")) != -1) {
+
	pkg_config_bool(PKG_CONFIG_REPO_AUTOUPDATE, &auto_update);
+

+
	while ((ch = getopt(argc, argv, "cDdefgiL:opqQ:r:S:sUx")) != -1) {
		switch (ch) {
		case 'c':	/* Same as -S comment */
			search = search_label_opt("comment");
@@ -295,6 +298,9 @@ exec_search(int argc, char **argv)
		case 's':	/* Same as -Q size */
			opt |= modifier_opt("size");
			break;
+
		case 'U':
+
			auto_update = false;
+
			break;
		case 'x':
			match = MATCH_REGEX;
			break;
@@ -346,15 +352,23 @@ exec_search(int argc, char **argv)
		break;
	}

-
	ret = pkgdb_access(PKGDB_MODE_READ, PKGDB_DB_REPO);
+
	/* Only auto update if the user has write access. */
+
	if (auto_update &&
+
	    pkgdb_access(PKGDB_MODE_READ|PKGDB_MODE_WRITE|PKGDB_MODE_CREATE,
+
	    PKGDB_DB_REPO) == EPKG_ENOACCESS)
+
		auto_update = false;
+

+
	ret = pkgdb_access(PKGDB_MODE_READ|PKGDB_MODE_CREATE, PKGDB_DB_REPO);
	if (ret == EPKG_ENOACCESS) {
		warnx("Insufficient privilege to query package database");
		return (EX_NOPERM);
-
	} else if (ret == EPKG_ENODB) {
-
		return (EX_OK);
	} else if (ret != EPKG_OK)
		return (EX_IOERR);

+
	/* first update the remote repositories if needed */
+
	if (auto_update && (ret = pkgcli_update(false)) != EPKG_OK)
+
		return (ret);
+

	if (pkgdb_open(&db, PKGDB_REMOTE) != EPKG_OK)
		return (EX_IOERR);