From f14c59a8adb66a4bab77a4233d40c83c83c34e4b Mon Sep 17 00:00:00 2001 From: Brock Palen Date: Sun, 24 May 2020 20:55:06 -0400 Subject: [PATCH 01/10] Initial import of predicate filtering from dfind into dwalk --- src/dwalk/dwalk.c | 57 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 50 insertions(+), 7 deletions(-) diff --git a/src/dwalk/dwalk.c b/src/dwalk/dwalk.c index fe419945c..17817ef11 100644 --- a/src/dwalk/dwalk.c +++ b/src/dwalk/dwalk.c @@ -315,12 +315,33 @@ static void print_usage(void) printf(" -h, --help - print usage\n"); printf("\n"); printf("Fields: name,user,group,uid,gid,atime,mtime,ctime,size\n"); + printf("\n"); + printf("Tests:\n"); + printf(" --atime N - last accessed N days ago\n"); printf("For more information see https://mpifileutils.readthedocs.io. \n"); printf("\n"); fflush(stdout); return; } +static void pred_commit (mfu_pred* p) +{ + int need_print = 1; + + mfu_pred* cur = p; + while (cur) { +// if (cur->f == MFU_PRED_PRINT || cur->f == MFU_PRED_EXEC) { +// need_print = 0; +// break; +// } + cur = cur->next; + } + + if (need_print) { +// mfu_pred_add(p, MFU_PRED_PRINT, NULL); + } +} + int main(int argc, char** argv) { int i; @@ -337,6 +358,10 @@ int main(int argc, char** argv) /* pointer to mfu_walk_opts */ mfu_walk_opts_t* walk_opts = mfu_walk_opts_new(); + /* capture current time for any time based queries, + * to get a consistent value, capture and bcast from rank 0 */ + mfu_pred_times* now_t = mfu_pred_now(); + /* TODO: extend options * - allow user to cache scan result in file * - allow user to load cached scan as input @@ -348,6 +373,7 @@ int main(int argc, char** argv) * - allow user to sort by different fields * - allow user to group output (sum all bytes, group by user) */ + mfu_pred* pred_head = mfu_pred_new(); char* inputname = NULL; char* outputname = NULL; char* sortfields = NULL; @@ -377,6 +403,8 @@ int main(int argc, char** argv) {"verbose", 0, 0, 'v'}, {"quiet", 0, 0, 'q'}, {"help", 0, 0, 'h'}, + + { "atime", required_argument, NULL, 'A' }, {0, 0, 0, 0} }; @@ -391,6 +419,8 @@ int main(int argc, char** argv) break; } + mfu_pred_times_rel* tr; + switch (c) { case 'i': inputname = MFU_STRDUP(optarg); @@ -417,6 +447,10 @@ int main(int argc, char** argv) case 'P': mfu_progress_timeout = atoi(optarg); break; + case 'A': + tr = mfu_pred_relative(optarg, now_t); + mfu_pred_add(pred_head, MFU_PRED_ATIME, (void *)tr); + break; case 'v': mfu_debug_level = MFU_LOG_VERBOSE; break; @@ -439,6 +473,8 @@ int main(int argc, char** argv) } } + pred_commit(pred_head); + /* check that we got a valid progress value */ if (mfu_progress_timeout < 0) { if (rank == 0) { @@ -583,38 +619,45 @@ int main(int argc, char** argv) /* TODO: filter files */ //filter_files(&flist); + mfu_flist flist2 = mfu_flist_filter_pred(flist, pred_head); /* sort files */ if (sortfields != NULL) { /* TODO: don't sort unless all_count > 0 */ - mfu_flist_sort(sortfields, &flist); + mfu_flist_sort(sortfields, &flist2); } /* print details for individual files */ if (print) { - mfu_flist_print(flist); + mfu_flist_print(flist2); } - /* print summary statistics of flist */ - mfu_flist_print_summary(flist); + /* print summary statistics of flist2 */ + mfu_flist_print_summary(flist2); /* print distribution if user specified this option */ if (distribution != NULL || file_histogram) { - print_flist_distribution(file_histogram, &option, &flist, rank); + print_flist_distribution(file_histogram, &option, &flist2, rank); } /* write data to cache file */ if (outputname != NULL) { if (!text) { - mfu_flist_write_cache(outputname, flist); + mfu_flist_write_cache(outputname, flist2); } else { - mfu_flist_write_text(outputname, flist); + mfu_flist_write_text(outputname, flist2); } } + /* free off the filtered list */ + mfu_flist_free(&flist2); + /* free users, groups, and files objects */ mfu_flist_free(&flist); + /* free predicate list */ + mfu_pred_free(&pred_head); + /* free memory allocated for options */ mfu_free(&distribution); mfu_free(&sortfields); From e9da5722f9b0529b319be379cc96f5bd3e6890e6 Mon Sep 17 00:00:00 2001 From: Brock Palen Date: Mon, 25 May 2020 00:00:15 -0400 Subject: [PATCH 02/10] added check if pred_head has any members and lite (no stat) is passed to bail --- src/dwalk/dwalk.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/dwalk/dwalk.c b/src/dwalk/dwalk.c index 17817ef11..d7cca2ee9 100644 --- a/src/dwalk/dwalk.c +++ b/src/dwalk/dwalk.c @@ -514,6 +514,14 @@ int main(int argc, char** argv) } } + /* at least one filter was applied which requires stat */ + if (walk_opts->use_stat == 0 && pred_head->next != NULL) { + if (rank == 0) { + printf("Filters (atime, mtime, etc.) requires stat\n"); + } + usage = 1; + } + /* if user is trying to sort, verify the sort fields are valid */ if (sortfields != NULL) { int maxfields; From 4e2bd4011f0a82b16f9588ae03a480e1eacd3e52 Mon Sep 17 00:00:00 2001 From: Brock Palen Date: Mon, 25 May 2020 22:18:13 -0400 Subject: [PATCH 03/10] ported amin, anewer, cmin, mmin to dwalk from dfind --- src/dwalk/dwalk.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/src/dwalk/dwalk.c b/src/dwalk/dwalk.c index d7cca2ee9..1c4371564 100644 --- a/src/dwalk/dwalk.c +++ b/src/dwalk/dwalk.c @@ -316,14 +316,35 @@ static void print_usage(void) printf("\n"); printf("Fields: name,user,group,uid,gid,atime,mtime,ctime,size\n"); printf("\n"); - printf("Tests:\n"); + printf("Filters:\n"); + printf(" --amin N - last accessed N minutes ago\n"); + printf(" --anewer FILE - last accessed more recently than FILE modified\n"); printf(" --atime N - last accessed N days ago\n"); + printf(" --cmin N - status last changed N minutes ago\n"); + printf(" --mmin N - data last modified N minutes ago\n"); printf("For more information see https://mpifileutils.readthedocs.io. \n"); printf("\n"); fflush(stdout); return; } + +/* look up mtimes for specified file, + * return secs/nsecs in newly allocated mfu_pred_times struct, + * return NULL on error */ +static mfu_pred_times* get_mtimes(const char* file) +{ + mfu_param_path param_path; + mfu_param_path_set(file, ¶m_path); + if (! param_path.path_stat_valid) { + return NULL; + } + mfu_pred_times* t = (mfu_pred_times*) MFU_MALLOC(sizeof(mfu_pred_times)); + mfu_stat_get_mtimes(¶m_path.path_stat, &t->secs, &t->nsecs); + mfu_param_path_free(¶m_path); + return t; +} + static void pred_commit (mfu_pred* p) { int need_print = 1; @@ -404,7 +425,11 @@ int main(int argc, char** argv) {"quiet", 0, 0, 'q'}, {"help", 0, 0, 'h'}, + { "amin", required_argument, NULL, 'a' }, + { "anewer", required_argument, NULL, 'B' }, { "atime", required_argument, NULL, 'A' }, + { "cmin", required_argument, NULL, 'c' }, + { "mmin", required_argument, NULL, 'm' }, {0, 0, 0, 0} }; @@ -419,6 +444,7 @@ int main(int argc, char** argv) break; } + mfu_pred_times* t; mfu_pred_times_rel* tr; switch (c) { @@ -447,10 +473,36 @@ int main(int argc, char** argv) case 'P': mfu_progress_timeout = atoi(optarg); break; + + case 'a': + tr = mfu_pred_relative(optarg, now_t); + mfu_pred_add(pred_head, MFU_PRED_AMIN, (void *)tr); + break; + case 'm': + tr = mfu_pred_relative(optarg, now_t); + mfu_pred_add(pred_head, MFU_PRED_MMIN, (void *)tr); + break; + case 'c': + tr = mfu_pred_relative(optarg, now_t); + mfu_pred_add(pred_head, MFU_PRED_CMIN, (void *)tr); + break; + case 'A': tr = mfu_pred_relative(optarg, now_t); mfu_pred_add(pred_head, MFU_PRED_ATIME, (void *)tr); break; + + case 'B': + t = get_mtimes(optarg); + if (t == NULL) { + if (rank == 0) { + printf("%s: can't find file %s\n", argv[0], optarg); + } + exit(1); + } + mfu_pred_add(pred_head, MFU_PRED_ANEWER, (void *)t); + break; + case 'v': mfu_debug_level = MFU_LOG_VERBOSE; break; From 2d03ccfaa58e1728c2cc87f2b2f7f88759d884d0 Mon Sep 17 00:00:00 2001 From: Brock Palen Date: Mon, 25 May 2020 22:56:12 -0400 Subject: [PATCH 04/10] added cnewer and mtime to dwalk from dfind --- src/dwalk/dwalk.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/dwalk/dwalk.c b/src/dwalk/dwalk.c index 1c4371564..075e39069 100644 --- a/src/dwalk/dwalk.c +++ b/src/dwalk/dwalk.c @@ -321,7 +321,9 @@ static void print_usage(void) printf(" --anewer FILE - last accessed more recently than FILE modified\n"); printf(" --atime N - last accessed N days ago\n"); printf(" --cmin N - status last changed N minutes ago\n"); + printf(" --cnewer FILE - status last changed more recently than FILE modified\n"); printf(" --mmin N - data last modified N minutes ago\n"); + printf(" --mtime N - data last modified N days ago\n"); printf("For more information see https://mpifileutils.readthedocs.io. \n"); printf("\n"); fflush(stdout); @@ -429,7 +431,10 @@ int main(int argc, char** argv) { "anewer", required_argument, NULL, 'B' }, { "atime", required_argument, NULL, 'A' }, { "cmin", required_argument, NULL, 'c' }, + { "cnewer", required_argument, NULL, 'D' }, { "mmin", required_argument, NULL, 'm' }, + { "mtime", required_argument, NULL, 'M' }, + {0, 0, 0, 0} }; @@ -491,6 +496,10 @@ int main(int argc, char** argv) tr = mfu_pred_relative(optarg, now_t); mfu_pred_add(pred_head, MFU_PRED_ATIME, (void *)tr); break; + case 'M': + tr = mfu_pred_relative(optarg, now_t); + mfu_pred_add(pred_head, MFU_PRED_MTIME, (void *)tr); + break; case 'B': t = get_mtimes(optarg); @@ -502,6 +511,16 @@ int main(int argc, char** argv) } mfu_pred_add(pred_head, MFU_PRED_ANEWER, (void *)t); break; + case 'D': + t = get_mtimes(optarg); + if (t == NULL) { + if (rank == 0) { + printf("%s: can't find file %s\n", argv[0], optarg); + } + exit(1); + } + mfu_pred_add(pred_head, MFU_PRED_CNEWER, (void *)t); + break; case 'v': mfu_debug_level = MFU_LOG_VERBOSE; From 389e668ed0c0c3ed47d06235c3f7ff0d6b8b104d Mon Sep 17 00:00:00 2001 From: Brock Palen Date: Mon, 25 May 2020 23:01:16 -0400 Subject: [PATCH 05/10] added ctime from dfind to dwalk --- src/dwalk/dwalk.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/dwalk/dwalk.c b/src/dwalk/dwalk.c index 075e39069..1094a1d58 100644 --- a/src/dwalk/dwalk.c +++ b/src/dwalk/dwalk.c @@ -322,6 +322,7 @@ static void print_usage(void) printf(" --atime N - last accessed N days ago\n"); printf(" --cmin N - status last changed N minutes ago\n"); printf(" --cnewer FILE - status last changed more recently than FILE modified\n"); + printf(" --ctime N - status last changed N days ago\n"); printf(" --mmin N - data last modified N minutes ago\n"); printf(" --mtime N - data last modified N days ago\n"); printf("For more information see https://mpifileutils.readthedocs.io. \n"); @@ -432,6 +433,7 @@ int main(int argc, char** argv) { "atime", required_argument, NULL, 'A' }, { "cmin", required_argument, NULL, 'c' }, { "cnewer", required_argument, NULL, 'D' }, + { "ctime", required_argument, NULL, 'C' }, { "mmin", required_argument, NULL, 'm' }, { "mtime", required_argument, NULL, 'M' }, @@ -500,6 +502,10 @@ int main(int argc, char** argv) tr = mfu_pred_relative(optarg, now_t); mfu_pred_add(pred_head, MFU_PRED_MTIME, (void *)tr); break; + case 'C': + tr = mfu_pred_relative(optarg, now_t); + mfu_pred_add(pred_head, MFU_PRED_CTIME, (void *)tr); + break; case 'B': t = get_mtimes(optarg); From c008b6ddf4b2a40b41f72bef6b3b4b417bf340e1 Mon Sep 17 00:00:00 2001 From: Brock Palen Date: Mon, 25 May 2020 23:48:40 -0400 Subject: [PATCH 06/10] ported user/uid group/gid filtering to dwalk from dfind --- src/dwalk/dwalk.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/dwalk/dwalk.c b/src/dwalk/dwalk.c index 1094a1d58..d00d2e3f8 100644 --- a/src/dwalk/dwalk.c +++ b/src/dwalk/dwalk.c @@ -325,6 +325,12 @@ static void print_usage(void) printf(" --ctime N - status last changed N days ago\n"); printf(" --mmin N - data last modified N minutes ago\n"); printf(" --mtime N - data last modified N days ago\n"); + printf("\n"); + printf(" --gid N - numeric group ID is N\n"); + printf(" --group NAME - belongs to group NAME\n"); + printf(" --uid N - numeric user ID is N\n"); + printf(" --user NAME - owned by user NAME\n"); + printf("\n"); printf("For more information see https://mpifileutils.readthedocs.io. \n"); printf("\n"); fflush(stdout); @@ -437,6 +443,11 @@ int main(int argc, char** argv) { "mmin", required_argument, NULL, 'm' }, { "mtime", required_argument, NULL, 'M' }, + { "gid", required_argument, NULL, 'g' }, + { "group", required_argument, NULL, 'G' }, + { "uid", required_argument, NULL, 'u' }, + { "user", required_argument, NULL, 'U' }, + {0, 0, 0, 0} }; @@ -451,6 +462,7 @@ int main(int argc, char** argv) break; } + char* buf; mfu_pred_times* t; mfu_pred_times_rel* tr; @@ -528,6 +540,28 @@ int main(int argc, char** argv) mfu_pred_add(pred_head, MFU_PRED_CNEWER, (void *)t); break; + case 'g': + /* TODO: error check argument */ + buf = MFU_STRDUP(optarg); + mfu_pred_add(pred_head, MFU_PRED_GID, (void *)buf); + break; + + case 'G': + buf = MFU_STRDUP(optarg); + mfu_pred_add(pred_head, MFU_PRED_GROUP, (void *)buf); + break; + + case 'u': + /* TODO: error check argument */ + buf = MFU_STRDUP(optarg); + mfu_pred_add(pred_head, MFU_PRED_UID, (void *)buf); + break; + + case 'U': + buf = MFU_STRDUP(optarg); + mfu_pred_add(pred_head, MFU_PRED_USER, (void *)buf); + break; + case 'v': mfu_debug_level = MFU_LOG_VERBOSE; break; From c0e5bcf9e9f486fd3c032e1c665c25e5f9b9c1ba Mon Sep 17 00:00:00 2001 From: Brock Palen Date: Tue, 26 May 2020 22:24:18 -0400 Subject: [PATCH 07/10] added type filter support to dwalk from dfind --- src/dwalk/dwalk.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/src/dwalk/dwalk.c b/src/dwalk/dwalk.c index d00d2e3f8..a8d5e16a6 100644 --- a/src/dwalk/dwalk.c +++ b/src/dwalk/dwalk.c @@ -331,6 +331,8 @@ static void print_usage(void) printf(" --uid N - numeric user ID is N\n"); printf(" --user NAME - owned by user NAME\n"); printf("\n"); + printf(" --type C - of type C: d=dir, f=file, l=symlink\n"); + printf("\n"); printf("For more information see https://mpifileutils.readthedocs.io. \n"); printf("\n"); fflush(stdout); @@ -354,6 +356,44 @@ static mfu_pred_times* get_mtimes(const char* file) return t; } +static int add_type(mfu_pred* p, char t) +{ + mode_t* type = (mode_t*) MFU_MALLOC(sizeof(mode_t)); + switch (t) { + case 'b': + *type = S_IFBLK; + break; + case 'c': + *type = S_IFCHR; + break; + case 'd': + *type = S_IFDIR; + break; + case 'f': + *type = S_IFREG; + break; + case 'l': + *type = S_IFLNK; + break; + case 'p': + *type = S_IFIFO; + break; + case 's': + *type = S_IFSOCK; + break; + + default: + /* unsupported type character */ + mfu_free(&type); + return -1; + break; + } + + /* add check for this type */ + mfu_pred_add(p, MFU_PRED_TYPE, (void *)type); + return 1; +} + static void pred_commit (mfu_pred* p) { int need_print = 1; @@ -448,6 +488,8 @@ int main(int argc, char** argv) { "uid", required_argument, NULL, 'u' }, { "user", required_argument, NULL, 'U' }, + { "type", required_argument, NULL, 'T' }, + {0, 0, 0, 0} }; @@ -465,6 +507,7 @@ int main(int argc, char** argv) char* buf; mfu_pred_times* t; mfu_pred_times_rel* tr; + int ret; switch (c) { case 'i': @@ -561,6 +604,16 @@ int main(int argc, char** argv) buf = MFU_STRDUP(optarg); mfu_pred_add(pred_head, MFU_PRED_USER, (void *)buf); break; + + case 'T': + ret = add_type(pred_head, *optarg); + if (ret != 1) { + if (rank == 0) { + printf("%s: unsupported file type %s\n", argv[0], optarg); + } + exit(1); + } + break; case 'v': mfu_debug_level = MFU_LOG_VERBOSE; From 0607ebdc38faf0a1a73fa3382dd581c33739d387 Mon Sep 17 00:00:00 2001 From: Brock Palen Date: Tue, 26 May 2020 22:38:31 -0400 Subject: [PATCH 08/10] imported file size sorting to dwalk from dfind --- src/dwalk/dwalk.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/dwalk/dwalk.c b/src/dwalk/dwalk.c index a8d5e16a6..662dfb57f 100644 --- a/src/dwalk/dwalk.c +++ b/src/dwalk/dwalk.c @@ -331,6 +331,7 @@ static void print_usage(void) printf(" --uid N - numeric user ID is N\n"); printf(" --user NAME - owned by user NAME\n"); printf("\n"); + printf(" --size N - size is N bytes. Supports attached units like KB, MB, GB\n"); printf(" --type C - of type C: d=dir, f=file, l=symlink\n"); printf("\n"); printf("For more information see https://mpifileutils.readthedocs.io. \n"); @@ -488,6 +489,7 @@ int main(int argc, char** argv) { "uid", required_argument, NULL, 'u' }, { "user", required_argument, NULL, 'U' }, + { "size", required_argument, NULL, 'S' }, { "type", required_argument, NULL, 'T' }, {0, 0, 0, 0} @@ -605,6 +607,11 @@ int main(int argc, char** argv) mfu_pred_add(pred_head, MFU_PRED_USER, (void *)buf); break; + case 'S': + buf = MFU_STRDUP(optarg); + mfu_pred_add(pred_head, MFU_PRED_SIZE, (void *)buf); + break; + case 'T': ret = add_type(pred_head, *optarg); if (ret != 1) { From bb4d41dae8dc46317825c5e6b7bd51d1aa68436c Mon Sep 17 00:00:00 2001 From: Brock Palen Date: Tue, 2 Jun 2020 22:29:22 -0400 Subject: [PATCH 09/10] added --text-output to dwalk so text and binary cache can be created in a single pass This allows for human readable reports to be created but then also feed the cache to a second pass of dwalk/dfind/drm etc as part of a pipeline --- src/dwalk/dwalk.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/dwalk/dwalk.c b/src/dwalk/dwalk.c index 662dfb57f..e7206c713 100644 --- a/src/dwalk/dwalk.c +++ b/src/dwalk/dwalk.c @@ -303,6 +303,7 @@ static void print_usage(void) printf("Options:\n"); printf(" -i, --input - read list from file\n"); printf(" -o, --output - write processed list to file in binary format\n"); + printf(" --text-output - write processed list to file in ascii format\n"); printf(" -t, --text - use with -o; write processed list to file in ascii format\n"); printf(" -l, --lite - walk file system without stat\n"); printf(" -s, --sort - sort output by comma-delimited fields\n"); @@ -447,6 +448,7 @@ int main(int argc, char** argv) mfu_pred* pred_head = mfu_pred_new(); char* inputname = NULL; char* outputname = NULL; + char* textoutputname = NULL; char* sortfields = NULL; char* distribution = NULL; @@ -464,6 +466,7 @@ int main(int argc, char** argv) static struct option long_options[] = { {"input", 1, 0, 'i'}, {"output", 1, 0, 'o'}, + {"text-output", required_argument, NULL, 'z' }, {"text", 0, 0, 't'}, {"lite", 0, 0, 'l'}, {"sort", 1, 0, 's'}, @@ -518,6 +521,9 @@ int main(int argc, char** argv) case 'o': outputname = MFU_STRDUP(optarg); break; + case 'z': + textoutputname = MFU_STRDUP(optarg); + break; case 'l': /* don't stat each file on the walk */ walk_opts->use_stat = 0; @@ -828,6 +834,12 @@ int main(int argc, char** argv) } } + /* write text version if also requested + * independent of --output */ + if (textoutputname != NULL) { + mfu_flist_write_text(textoutputname, flist2); + } + /* free off the filtered list */ mfu_flist_free(&flist2); @@ -841,6 +853,7 @@ int main(int argc, char** argv) mfu_free(&distribution); mfu_free(&sortfields); mfu_free(&outputname); + mfu_free(&textoutputname); mfu_free(&inputname); /* free the path parameters */ From 10d25acef86eea51d8b130ea29db468c8f3d5112 Mon Sep 17 00:00:00 2001 From: Brock Palen Date: Tue, 2 Jun 2020 22:31:57 -0400 Subject: [PATCH 10/10] removed --text form dwalk --- src/dwalk/dwalk.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/dwalk/dwalk.c b/src/dwalk/dwalk.c index e7206c713..210fca7d7 100644 --- a/src/dwalk/dwalk.c +++ b/src/dwalk/dwalk.c @@ -304,7 +304,6 @@ static void print_usage(void) printf(" -i, --input - read list from file\n"); printf(" -o, --output - write processed list to file in binary format\n"); printf(" --text-output - write processed list to file in ascii format\n"); - printf(" -t, --text - use with -o; write processed list to file in ascii format\n"); printf(" -l, --lite - walk file system without stat\n"); printf(" -s, --sort - sort output by comma-delimited fields\n"); printf(" -d, --distribution : \n - print distribution by field\n"); @@ -467,7 +466,6 @@ int main(int argc, char** argv) {"input", 1, 0, 'i'}, {"output", 1, 0, 'o'}, {"text-output", required_argument, NULL, 'z' }, - {"text", 0, 0, 't'}, {"lite", 0, 0, 'l'}, {"sort", 1, 0, 's'}, {"distribution", 1, 0, 'd'}, @@ -634,9 +632,6 @@ int main(int argc, char** argv) case 'q': mfu_debug_level = 0; break; - case 't': - text = 1; - break; case 'h': usage = 1; break; @@ -827,11 +822,7 @@ int main(int argc, char** argv) /* write data to cache file */ if (outputname != NULL) { - if (!text) { - mfu_flist_write_cache(outputname, flist2); - } else { - mfu_flist_write_text(outputname, flist2); - } + mfu_flist_write_cache(outputname, flist2); } /* write text version if also requested