From da3286a80d10ea3896ae09e9e753dc4f19fa3bf6 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Thu, 26 Apr 2007 14:27:13 -0400 Subject: Allow sync search to work without arguments Enable an -Ss operation to work without a target list. This allows all package information to be printed (as opposed to individual -Sl operations on repositories). Signed-off-by: Dan McGee --- src/pacman/pacman.c | 11 ++++++++--- src/pacman/sync.c | 56 ++++++++++++++++++++++++++++------------------------- 2 files changed, 38 insertions(+), 29 deletions(-) diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c index 6178b71a..9949dd62 100644 --- a/src/pacman/pacman.c +++ b/src/pacman/pacman.c @@ -555,9 +555,14 @@ int main(int argc, char *argv[]) cleanup(1); } - if(alpm_list_count(pm_targets) == 0 && !(config->op == PM_OP_QUERY || (config->op == PM_OP_SYNC - && (config->op_s_sync || config->op_s_upgrade || config->op_s_clean || config->group - || config->op_q_list)))) { + /* TODO This is pretty messy, shouldn't checking be done later in the ops + * themselves? I can't even digest this if statement. */ + if(alpm_list_count(pm_targets) == 0 + && !(config->op == PM_OP_QUERY + || (config->op == PM_OP_SYNC + && (config->op_s_sync || config->op_s_upgrade || config->op_s_search + || config->op_s_clean || config->group + || config->op_q_list)))) { ERR(NL, _("no targets specified (use -h for help)\n")); cleanup(1); } diff --git a/src/pacman/sync.c b/src/pacman/sync.c index fa781c10..e8399625 100644 --- a/src/pacman/sync.c +++ b/src/pacman/sync.c @@ -235,41 +235,45 @@ static int sync_synctree(int level, alpm_list_t *syncs) static int sync_search(alpm_list_t *syncs, alpm_list_t *targets) { alpm_list_t *i, *j, *ret; + int freelist; for(i = syncs; i; i = alpm_list_next(i)) { - pmdb_t *db = (pmdb_t *)alpm_list_getdata(i); + pmdb_t *db = alpm_list_getdata(i); + /* if we have a targets list, search for packages matching it */ if(targets) { ret = alpm_db_search(db, targets); - if(ret == NULL) { - continue; - } - for(j = ret; j; j = alpm_list_next(j)) { - char *group = NULL; - alpm_list_t *grp; - pmpkg_t *pkg = alpm_list_getdata(j); + freelist = 1; + } else { + ret = alpm_db_getpkgcache(db); + freelist = 0; + } + if(ret == NULL) { + continue; + } + for(j = ret; j; j = alpm_list_next(j)) { + /* print repo/name (group) info about each package in our list */ + char *group = NULL; + alpm_list_t *grp; + pmpkg_t *pkg = alpm_list_getdata(j); - printf("%s/%s %s", alpm_db_get_name(db), alpm_pkg_get_name(pkg), - alpm_pkg_get_version(pkg)); + 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) { - group = alpm_list_getdata(grp); - printf(" (%s)\n ", (char *)alpm_list_getdata(grp)); - } else { - printf("\n "); - } - - indentprint(alpm_pkg_get_desc(pkg), 4); + if((grp = alpm_pkg_get_groups(pkg)) != NULL) { + group = alpm_list_getdata(grp); + printf(" (%s)\n", (char *)alpm_list_getdata(grp)); + } else { printf("\n"); } - alpm_list_free(ret); - } else { - for(j = alpm_db_getpkgcache(db); j; j = alpm_list_next(j)) { - pmpkg_t *pkg = alpm_list_getdata(j); - MSG(NL, "%s/%s %s\n ", alpm_db_get_name(db), alpm_pkg_get_name(pkg), alpm_pkg_get_version(pkg)); - indentprint(alpm_pkg_get_desc(pkg), 4); - MSG(NL, "\n"); - } + /* we need an initial indent first */ + printf(" "); + indentprint(alpm_pkg_get_desc(pkg), 4); + printf("\n"); + } + /* we only want to free if the list was a search list */ + if(freelist) { + alpm_list_free(ret); } } -- cgit v1.2.3-24-g4f1b