View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0002510 | doodle | other | public | 2012-08-12 21:17 | 2021-03-01 20:52 |
Reporter | mw | Assigned To | Christian Grothoff | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Platform | all | ||||
Product Version | 0.7.0 | ||||
Fixed in Version | 0.7.1 | ||||
Summary | 0002510: doodle is too verbose | ||||
Description | Unlike other Unix utilities, in standard operation doodle prints a headline, as well as a message "Not found", if there were no matches. This makes doodle almost useless in shell scripts as there is no easy and failsafe method to remove the extraneous output. Furthermore I noticed the output did not change when doodle is run with a single verbose switch (-V). The attached patch modifies the doodle.c file so that all nonessential output only appears, if the program is run in verbose mode. To get the current command line behavior with the patched doodle, you can simply define an alias "doodle='doodle -V'". The patch also facilitates a simple solution for the second issue in the doodle documentation: "Ordering of search results" is now possible by simply piping the doodle output through sort. Additionally the patch makes the use of stdout/stderr more consistent. With the patch applied, all error messages and warnings now go to stderr. | ||||
Tags | No tags attached. | ||||
Attached Files | doodle-verbosity.patch (6,383 bytes)
--- doodle-0.7.0.orig/src/doodle/doodle.c 2010-01-14 11:52:35.000000000 +0100 +++ doodle-0.7.0/src/doodle/doodle.c 2012-08-12 19:29:29.000000000 +0200 @@ -184,10 +184,10 @@ return 0; /* already processed */ if (0 != stat(filename, &sbuf)) { - printf(_("Call to '%s' for file '%s' failed: %s\n"), - "stat", - filename, - strerror(errno)); + fprintf(stderr, _("Call to '%s' for file '%s' failed: %s\n"), + "stat", + filename, + strerror(errno)); return 0; } if (S_ISREG(sbuf.st_mode)) { @@ -215,14 +215,15 @@ char * ename; if (dbName == NULL) { - printf(_("No database specified. Aborting.\n")); + fprintf(stderr, _("No database specified. Aborting.\n")); return -1; } for (i=strlen(dbName);i>=0;i--) { if (dbName[i] == ':') { - printf(_("'%s' is an invalid database filename (has a colon) for building database (option '%s').\n"), - dbName, - "-b"); + fprintf(stderr, + _("'%s' is an invalid database filename (has a colon) for building database (option '%s').\n"), + dbName, + "-b"); return -1; } } @@ -252,9 +253,9 @@ if (log != NULL) { cls.logFile = fopen(log, "w+"); if (cls.logFile == NULL) - printf(_("Could not open '%s' for logging: %s.\n"), - log, - strerror(errno)); + fprintf(stderr, _("Could not open '%s' for logging: %s.\n"), + log, + strerror(errno)); } ret = 0; @@ -340,15 +341,15 @@ int ret; if (dbName == NULL) { - printf(_("No database specified. Aborting.\n")); + fprintf(stderr, _("No database specified. Aborting.\n")); return -1; } ename = expandFileName(dbName); if (0 != stat(ename, &buf)) { - printf(_("Call to '%s' for file '%s' failed: %s.\n"), - "stat", - dbName, - strerror(errno)); + fprintf(stderr, _("Call to '%s' for file '%s' failed: %s.\n"), + "stat", + dbName, + strerror(errno)); free(ename); return -1; } @@ -379,15 +380,15 @@ char * utf; if (dbName == NULL) { - printf(_("No database specified. Aborting.\n")); + fprintf(stderr, _("No database specified. Aborting.\n")); return -1; } ename = expandFileName(dbName); if (0 != stat(ename, &buf)) { - printf(_("Call to '%s' for file '%s' failed: %s.\n"), - "stat", - dbName, - strerror(errno)); + fprintf(stderr, _("Call to '%s' for file '%s' failed: %s.\n"), + "stat", + dbName, + strerror(errno)); free(ename); return -1; } @@ -420,16 +421,20 @@ args.seen_count = 0; for (i=0;i<argc;i++) { - printf(_("Searching for '%s':\n"), - argv[i]); + if(verbose) { + printf(_("Searching for '%s':\n"), + argv[i]); + } if (strlen(argv[i]) > MAX_LENGTH) { - printf(_("Warning: search string is longer than %d characters, search will not work.\n"), - MAX_LENGTH); + fprintf(stderr, + _("Warning: search string is longer than %d characters, search will not work.\n"), + MAX_LENGTH); continue; /* no need to even try... */ } if (strlen(argv[i]) > MAX_LENGTH/2) { - printf(_("Warning: search string is longer than %d characters, search may not work properly.\n"), - MAX_LENGTH/2); + fprintf(stderr, + _("Warning: search string is longer than %d characters, search may not work properly.\n"), + MAX_LENGTH/2); } utf = convertToUtf8(argv[i], strlen(argv[i]), @@ -440,7 +445,9 @@ utf, (DOODLE_ResultCallback) &printIt, &args)) { - printf(_("\tNot found!\n")); + if(verbose) { + printf(_("\tNot found!\n")); + } ret++; } } else { @@ -450,7 +457,9 @@ utf, (DOODLE_ResultCallback) &printIt, &args)) { - printf(_("\tNot found!\n")); + if (verbose) { + printf(_("\tNot found!\n")); + } ret++; } } @@ -520,31 +529,36 @@ switch (c) { case 'a': if (1 != sscanf(optarg, "%ud", &do_approx)) { - printf(_("You must pass a number to the '%s' option.\n"), - "-a"); + fprintf(stderr, + _("You must pass a number to the '%s' option.\n"), + "-a"); return -1; } if (do_build == 1) { - printf(_("The options '%s' and '%s' cannot be used together!\n"), - "-a", "-b"); + fprintf(stderr, + _("The options '%s' and '%s' cannot be used together!\n"), + "-a", "-b"); return -1; - } + } break; case 'b': do_build = 1; if (do_approx != 0) { - printf(_("The options '%s' and '%s' cannot be used together!\n"), - "-a", "-b"); + fprintf(stderr, + _("The options '%s' and '%s' cannot be used together!\n"), + "-a", "-b"); return -1; - } + } if (do_print == 1) { - printf(_("The options '%s' and '%s' cannot be used together!\n"), - "-b", "-p"); + fprintf(stderr, + _("The options '%s' and '%s' cannot be used together!\n"), + "-b", "-p"); return -1; - } + } if (ignore_case == 1) { - printf(_("The options '%s' and '%s' cannot be used together!\n"), - "-b", "-i"); + fprintf(stderr, + _("The options '%s' and '%s' cannot be used together!\n"), + "-b", "-i"); return -1; } break; @@ -563,8 +577,9 @@ case 'i': ignore_case = 1; if (do_build == 1) { - printf(_("The options '%s' and '%s' cannot be used together!\n"), - "-b", "-i"); + fprintf(stderr, + _("The options '%s' and '%s' cannot be used together!\n"), + "-b", "-i"); return -1; } break; @@ -576,12 +591,13 @@ break; case 'm': if (1 != sscanf(optarg, "%u", &mem_limit)) { - printf(_("You must pass a number to the '%s' option.\n"), - "-m"); + fprintf(stderr, + _("You must pass a number to the '%s' option.\n"), + "-m"); return -1; } if (mem_limit > 0xFFFFFFFF / 1024 / 1024) { - printf(_("Specified memory limit is too high.\n")); + fprintf(stderr, _("Specified memory limit is too high.\n")); return -1; } mem_limit *= 1024 * 1024; @@ -592,10 +608,11 @@ case 'p': do_print = 1; if (do_build == 1) { - printf(_("The options '%s' and '%s' cannot be used together!\n"), - "-b", "-p"); + fprintf(stderr, + _("The options '%s' and '%s' cannot be used together!\n"), + "-b", "-p"); return -1; - } + } break; case 'P': prunepaths = optarg; | ||||
Date Modified | Username | Field | Change |
---|---|---|---|
2012-08-12 21:17 | mw | New Issue | |
2012-08-12 21:17 | mw | File Added: doodle-verbosity.patch | |
2012-08-13 11:04 | Christian Grothoff | Assigned To | => Christian Grothoff |
2012-08-13 11:04 | Christian Grothoff | Status | new => assigned |
2012-08-13 11:07 | Christian Grothoff | Note Added: 0006275 | |
2012-08-13 11:07 | Christian Grothoff | Status | assigned => resolved |
2012-08-13 11:07 | Christian Grothoff | Resolution | open => fixed |
2021-03-01 20:52 | Christian Grothoff | Fixed in Version | => 0.7.1 |
2021-03-01 20:52 | Christian Grothoff | Status | resolved => closed |