summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Gomizelj <simongmzlj@gmail.com>2013-02-28 13:56:28 -0500
committerAllan McRae <allan@archlinux.org>2013-03-07 15:55:03 +1000
commit098cfe516d0a406ace95b12eeb5a2fecaff27a8b (patch)
treeda81ce6bc467a69f628c5f1e67b12b0c4c961a0d
parent8b03b1a8776043978aeac31682f94d65b4f3e514 (diff)
downloadpacman-098cfe516d0a406ace95b12eeb5a2fecaff27a8b.tar.xz
refactor common code in query_search/sync_search
Signed-off-by: Simon Gomizelj <simongmzlj@gmail.com> Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r--src/pacman/package.c88
-rw-r--r--src/pacman/package.h3
-rw-r--r--src/pacman/query.c56
-rw-r--r--src/pacman/sync.c75
4 files changed, 95 insertions, 127 deletions
diff --git a/src/pacman/package.c b/src/pacman/package.c
index 330f7ab0..b1ba0155 100644
--- a/src/pacman/package.c
+++ b/src/pacman/package.c
@@ -341,4 +341,92 @@ void dump_pkg_changelog(alpm_pkg_t *pkg)
}
}
+void print_installed(alpm_db_t *db_local, alpm_pkg_t *pkg)
+{
+ const char *pkgname = alpm_pkg_get_name(pkg);
+ const char *pkgver = alpm_pkg_get_version(pkg);
+ alpm_pkg_t *lpkg = alpm_db_get_pkg(db_local, pkgname);
+ if(lpkg) {
+ const char *lpkgver = alpm_pkg_get_version(lpkg);
+ if(strcmp(lpkgver, pkgver) == 0) {
+ printf(" [%s]", _("installed"));
+ } else {
+ printf(" [%s: %s]", _("installed"), lpkgver);
+ }
+ }
+}
+
+/**
+ * Display the defails of a search.
+ * @param db the database we're searching
+ * @param targets the targets we're searching for
+ * @param show_status show if the package is also in the local db
+ */
+int dump_pkg_search(alpm_db_t *db, alpm_list_t *targets, int show_status)
+{
+ int freelist = 0;
+ alpm_db_t *db_local;
+ alpm_list_t *i, *searchlist;
+ unsigned short cols;
+
+ if(show_status) {
+ db_local = alpm_get_localdb(config->handle);
+ }
+
+ /* if we have a targets list, search for packages matching it */
+ if(targets) {
+ searchlist = alpm_db_search(db, targets);
+ freelist = 1;
+ } else {
+ searchlist = alpm_db_get_pkgcache(db);
+ freelist = 0;
+ }
+ if(searchlist == NULL) {
+ return 1;
+ }
+
+ cols = getcols(fileno(stdout));
+ for(i = searchlist; i; i = alpm_list_next(i)) {
+ alpm_list_t *grp;
+ alpm_pkg_t *pkg = i->data;
+
+ if(config->quiet) {
+ fputs(alpm_pkg_get_name(pkg), stdout);
+ } else {
+ printf("%s/%s %s", alpm_db_get_name(db),
+ alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg));
+
+ if((grp = alpm_pkg_get_groups(pkg)) != NULL) {
+ alpm_list_t *k;
+ fputs(" (", stdout);
+ for(k = grp; k; k = alpm_list_next(k)) {
+ const char *group = k->data;
+ fputs(group, stdout);
+ if(alpm_list_next(k)) {
+ /* only print a spacer if there are more groups */
+ putchar(' ');
+ }
+ }
+ putchar(')');
+ }
+
+ if(show_status) {
+ print_installed(db_local, pkg);
+ }
+
+ /* we need a newline and initial indent first */
+ fputs("\n ", stdout);
+ indentprint(alpm_pkg_get_desc(pkg), 4, cols);
+ }
+ fputc('\n', stdout);
+ }
+
+ /* we only want to free if the list was a search list */
+ if(freelist) {
+ alpm_list_free(searchlist);
+ }
+
+ return 0;
+}
+
/* vim: set ts=2 sw=2 noet: */
diff --git a/src/pacman/package.h b/src/pacman/package.h
index 47fbcad0..65eea871 100644
--- a/src/pacman/package.h
+++ b/src/pacman/package.h
@@ -28,6 +28,9 @@ void dump_pkg_backups(alpm_pkg_t *pkg);
void dump_pkg_files(alpm_pkg_t *pkg, int quiet);
void dump_pkg_changelog(alpm_pkg_t *pkg);
+void print_installed(alpm_db_t *db_local, alpm_pkg_t *pkg);
+int dump_pkg_search(alpm_db_t *db, alpm_list_t *targets, int show_status);
+
#endif /* _PM_PACKAGE_H */
/* vim: set ts=2 sw=2 noet: */
diff --git a/src/pacman/query.c b/src/pacman/query.c
index 1247c3d4..ba8d7bc7 100644
--- a/src/pacman/query.c
+++ b/src/pacman/query.c
@@ -262,62 +262,8 @@ targcleanup:
/* search the local database for a matching package */
static int query_search(alpm_list_t *targets)
{
- alpm_list_t *i, *searchlist;
- int freelist;
alpm_db_t *db_local = alpm_get_localdb(config->handle);
- unsigned short cols;
-
- /* if we have a targets list, search for packages matching it */
- if(targets) {
- searchlist = alpm_db_search(db_local, targets);
- freelist = 1;
- } else {
- searchlist = alpm_db_get_pkgcache(db_local);
- freelist = 0;
- }
- if(searchlist == NULL) {
- return 1;
- }
-
- cols = getcols(fileno(stdout));
- for(i = searchlist; i; i = alpm_list_next(i)) {
- alpm_list_t *grp;
- alpm_pkg_t *pkg = i->data;
-
- if(!config->quiet) {
- printf(LOCAL_PREFIX "%s %s", alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg));
- } else {
- fputs(alpm_pkg_get_name(pkg), stdout);
- }
-
-
- if(!config->quiet) {
- if((grp = alpm_pkg_get_groups(pkg)) != NULL) {
- alpm_list_t *k;
- fputs(" (", stdout);
- for(k = grp; k; k = alpm_list_next(k)) {
- const char *group = k->data;
- fputs(group, stdout);
- if(alpm_list_next(k)) {
- /* only print a spacer if there are more groups */
- putchar(' ');
- }
- }
- putchar(')');
- }
-
- /* we need a newline and initial indent first */
- fputs("\n ", stdout);
- indentprint(alpm_pkg_get_desc(pkg), 4, cols);
- }
- fputc('\n', stdout);
- }
-
- /* we only want to free if the list was a search list */
- if(freelist) {
- alpm_list_free(searchlist);
- }
- return 0;
+ return dump_pkg_search(db_local, targets, 0);
}
static int query_group(alpm_list_t *targets)
diff --git a/src/pacman/sync.c b/src/pacman/sync.c
index 924cdf50..8d38edf6 100644
--- a/src/pacman/sync.c
+++ b/src/pacman/sync.c
@@ -352,87 +352,18 @@ static int sync_synctree(int level, alpm_list_t *syncs)
return (success > 0);
}
-static void print_installed(alpm_db_t *db_local, alpm_pkg_t *pkg)
-{
- const char *pkgname = alpm_pkg_get_name(pkg);
- const char *pkgver = alpm_pkg_get_version(pkg);
- alpm_pkg_t *lpkg = alpm_db_get_pkg(db_local, pkgname);
- if(lpkg) {
- const char *lpkgver = alpm_pkg_get_version(lpkg);
- if(strcmp(lpkgver, pkgver) == 0) {
- printf(" [%s]", _("installed"));
- } else {
- printf(" [%s: %s]", _("installed"), lpkgver);
- }
- }
-}
-
/* search the sync dbs for a matching package */
static int sync_search(alpm_list_t *syncs, alpm_list_t *targets)
{
- alpm_list_t *i, *j, *ret;
- int freelist;
+ alpm_list_t *i;
int found = 0;
- alpm_db_t *db_local = alpm_get_localdb(config->handle);
for(i = syncs; i; i = alpm_list_next(i)) {
alpm_db_t *db = i->data;
- unsigned short cols;
- /* if we have a targets list, search for packages matching it */
- if(targets) {
- ret = alpm_db_search(db, targets);
- freelist = 1;
- } else {
- ret = alpm_db_get_pkgcache(db);
- freelist = 0;
- }
- if(ret == NULL) {
- continue;
- } else {
- found = 1;
- }
- cols = getcols(fileno(stdout));
- for(j = ret; j; j = alpm_list_next(j)) {
- alpm_list_t *grp;
- alpm_pkg_t *pkg = j->data;
-
- if(!config->quiet) {
- printf("%s/%s %s", alpm_db_get_name(db), alpm_pkg_get_name(pkg),
- alpm_pkg_get_version(pkg));
- } else {
- fputs(alpm_pkg_get_name(pkg), stdout);
- }
-
- if(!config->quiet) {
- if((grp = alpm_pkg_get_groups(pkg)) != NULL) {
- alpm_list_t *k;
- fputs(" (", stdout);
- for(k = grp; k; k = alpm_list_next(k)) {
- const char *group = k->data;
- fputs(group, stdout);
- if(alpm_list_next(k)) {
- /* only print a spacer if there are more groups */
- putchar(' ');
- }
- }
- putchar(')');
- }
-
- print_installed(db_local, pkg);
-
- /* we need a newline and initial indent first */
- fputs("\n ", stdout);
- indentprint(alpm_pkg_get_desc(pkg), 4, cols);
- }
- fputc('\n', stdout);
- }
- /* we only want to free if the list was a search list */
- if(freelist) {
- alpm_list_free(ret);
- }
+ found += !dump_pkg_search(db, targets, 1);
}
- return !found;
+ return (found == 0);
}
static int sync_group(int level, alpm_list_t *syncs, alpm_list_t *targets)