Here is how files are marked now. Full flags looks like TXT|BIN|SYS|(MULTILINE || ONELINE).
ONELINE/MULTILINE is for testing purpose hardcoded, but I'm going to introduce a new flag CD_FLAG_ONELINE.
Odd situation begins when file is a small, text and and not from abrt
... unknown file 'secure' flags TXT|BIN||NOTEDITABLE|MULTILINE ...
solution is not mark unknown file as CD_FLAG_BIN, but mark it as CD_FLAG_UNKNOWN (also I will introduce a new flag).
also is_text_file() return NULL even file is text based and is huge, so huge files are marked as binary file which is a little bit confusing (big backtrace will be marked as a BIN file).
Decide what is or not attachment: UNKNOWN | !ONELINE -> attach UNKNOWN | TXT | ONELINE-> inline into report SYS | TXT -> inline into report (basically its analyzer, kernel, rating, ...) BIN -> attach
What do you think?
known file 'kernel' flags TXT||SYS|NOTEDITABLE|ONELINE unknown file 'anaconda.storage.log' flags |BIN||NOTEDITABLE|MULTILINE unknown file 'anaconda.program.log' flags TXT|BIN||NOTEDITABLE|MULTILINE known file 'analyzer' flags TXT||SYS|NOTEDITABLE|ONELINE known file 'coredump' flags |BIN|SYS|NOTEDITABLE|MULTILINE unknown file 'mcelog' flags TXT|BIN||NOTEDITABLE|ONELINE known file 'rating' flags TXT||SYS|NOTEDITABLE|ONELINE known file 'uid' flags TXT||SYS|NOTEDITABLE|ONELINE unknown file 'wtmp' flags |BIN||NOTEDITABLE|MULTILINE known file 'hostname' flags TXT||SYS|NOTEDITABLE|ONELINE unknown file 'boot.log-20101205' flags |BIN||NOTEDITABLE|MULTILINE known file 'crash_function' flags TXT||SYS|NOTEDITABLE|ONELINE known file 'reproduce' flags TXT||SYS|EDITABLE|MULTILINE known file 'global_uuid' flags TXT||SYS|NOTEDITABLE|ONELINE known file 'executable' flags TXT||SYS|NOTEDITABLE|ONELINE known file 'package' flags TXT||SYS|NOTEDITABLE|ONELINE unknown file 'maillog' flags |BIN||NOTEDITABLE|MULTILINE unknown file 'wpa_supplicant.log' flags TXT|BIN||NOTEDITABLE|MULTILINE known file 'component' flags TXT||SYS|NOTEDITABLE|ONELINE unknown file 'bashrc' flags TXT|BIN||NOTEDITABLE|MULTILINE unknown file 'boot.log' flags |BIN||NOTEDITABLE|MULTILINE unknown file 'cron' flags |BIN||NOTEDITABLE|MULTILINE unknown file 'btmp' flags |BIN||NOTEDITABLE|MULTILINE unknown file 'spooler-20101205' flags TXT|BIN||NOTEDITABLE|ONELINE unknown file 'cron-20101205' flags TXT|BIN||NOTEDITABLE|MULTILINE unknown file 'secure' flags TXT|BIN||NOTEDITABLE|MULTILINE unknown file 'lastlog' flags |BIN||NOTEDITABLE|ONELINE known file 'cmdline' flags TXT||SYS|NOTEDITABLE|ONELINE known file 'time' flags TXT||SYS|NOTEDITABLE|ONELINE unknown file 'dmesg.old' flags |BIN||NOTEDITABLE|MULTILINE unknown file 'messages' flags |BIN||NOTEDITABLE|MULTILINE unknown file 'Xorg.0.log' flags |BIN||NOTEDITABLE|MULTILINE unknown file 'anaconda.log' flags TXT|BIN||NOTEDITABLE|MULTILINE unknown file 'pm-powersave.log' flags TXT|BIN||NOTEDITABLE|MULTILINE unknown file 'yum.log' flags TXT|BIN||NOTEDITABLE|MULTILINE known file 'architecture' flags TXT||SYS|NOTEDITABLE|ONELINE known file 'reason' flags TXT||SYS|NOTEDITABLE|ONELINE known file 'uuid' flags TXT||SYS|NOTEDITABLE|ONELINE known file 'count' flags TXT||SYS|NOTEDITABLE|MULTILINE known file 'description' flags TXT||SYS|EDITABLE|MULTILINE known file 'message' flags TXT||SYS|NOTEDITABLE|ONELINE unknown file 'Xorg.9.log' flags TXT|BIN||NOTEDITABLE|MULTILINE unknown file 'Xorg.0.log.old' flags |BIN||NOTEDITABLE|MULTILINE unknown file 'tallylog' flags TXT|BIN||NOTEDITABLE|ONELINE known file 'backtrace' flags TXT||SYS|EDITABLE|MULTILINE unknown file 'messages-20101205' flags |BIN||NOTEDITABLE|MULTILINE known file 'release' flags TXT||SYS|NOTEDITABLE|ONELINE unknown file 'maillog-20101205' flags TXT|BIN||NOTEDITABLE|MULTILINE unknown file 'spooler' flags TXT|BIN||NOTEDITABLE|ONELINE unknown file 'secure-20101205' flags TXT|BIN||NOTEDITABLE|MULTILINE unknown file 'pm-suspend.log' flags TXT|BIN||NOTEDITABLE|MULTILINE unknown file 'dmesg' flags |BIN||NOTEDITABLE|MULTILIN
<snip from code> char *short_name; char *full_name;
dd_init_next_file(dd); while (dd_get_next_file(dd, &short_name, &full_name)) { int flags = 0;
ssize_t sz = 4*1024; char *text = is_text_file(full_name, &sz); flags |= (text) ? CD_FLAG_TXT : CD_FLAG_BIN;
if (is_editable_file(short_name)) flags |= CD_FLAG_ISEDITABLE; else flags |= CD_FLAG_ISNOTEDITABLE;
const char *const *v = abrt_known_files;
while (*v) { if (strcmp(*v, short_name) == 0) break; v++; }
/* known by abrt is CD_FLAG_SYS * unknown by abrt is CD_FLAG_BIN */ flags |= (*v) ? CD_FLAG_SYS : CD_FLAG_BIN;
char *content; if (text && sz < 4*1024) /* is_text_file did read entire file */ content = xstrndup(text, sz); //TODO: can avoid this copying if is_text_file() adds NUL else /* no, need to read it all */ content = dd_load_text(dd, short_name); free(text); int multiline = strchr(content, '\n') != NULL;
char *flags_str = xasprintf("flags %s|%s|%s|%s|%s", (flags & CD_FLAG_TXT) ? "TXT": "", (flags & CD_FLAG_BIN) ? "BIN": "", (flags & CD_FLAG_SYS) ? "SYS": "", (flags & CD_FLAG_ISEDITABLE) ? "EDITABLE": "NOTEDITABLE", (multiline) ? "MULTILINE": "ONELINE");
if (*v) log("known file '%s' %s", *v, flags_str); else log("unknown file '%s' %s", short_name, flags_str); </snip>
On Tue, 2011-02-01 at 15:54 +0100, Nikola Pajkovsky wrote:
Here is how files are marked now. Full flags looks like TXT|BIN|SYS|(MULTILINE || ONELINE).
"now" means "in my proposed change" or "in current git"?
ONELINE/MULTILINE is for testing purpose hardcoded, but I'm going to introduce a new flag CD_FLAG_ONELINE.
Odd situation begins when file is a small, text and and not from abrt
This situation is odd because ... ?
... unknown file 'secure' flags TXT|BIN||NOTEDITABLE|MULTILINE ...
What does this mean?
solution is not mark unknown file as CD_FLAG_BIN, but mark it as CD_FLAG_UNKNOWN (also I will introduce a new flag).
Solution to what problem?
also is_text_file() return NULL even file is text based and is huge, so huge files are marked as binary file which is a little bit confusing (big backtrace will be marked as a BIN file).
It is intended: We don't want GUI to cram, say, 1 gigabyte text from a log file into a edit area. That wouldn't work well. Therefore, after some size limit, we are not declaring file to be text even if it is.
Decide what is or not attachment: UNKNOWN | !ONELINE -> attach UNKNOWN | TXT | ONELINE-> inline into report SYS | TXT -> inline into report (basically its analyzer, kernel, rating, ...) BIN -> attach
What does this mean?
What do you think?
known file 'kernel' flags TXT||SYS|NOTEDITABLE|ONELINE unknown file 'anaconda.storage.log' flags |BIN||NOTEDITABLE|MULTILINE unknown file 'anaconda.program.log' flags TXT|BIN||NOTEDITABLE|MULTILINE
It's text and binary at once?
known file 'analyzer' flags TXT||SYS|NOTEDITABLE|ONELINE known file 'coredump' flags |BIN|SYS|NOTEDITABLE|MULTILINE unknown file 'mcelog' flags TXT|BIN||NOTEDITABLE|ONELINE known file 'rating' flags TXT||SYS|NOTEDITABLE|ONELINE known file 'uid' flags TXT||SYS|NOTEDITABLE|ONELINE unknown file 'wtmp' flags |BIN||NOTEDITABLE|MULTILINE known file 'hostname' flags TXT||SYS|NOTEDITABLE|ONELINE unknown file 'boot.log-20101205' flags |BIN||NOTEDITABLE|MULTILINE known file 'crash_function' flags TXT||SYS|NOTEDITABLE|ONELINE known file 'reproduce' flags TXT||SYS|EDITABLE|MULTILINE known file 'global_uuid' flags TXT||SYS|NOTEDITABLE|ONELINE known file 'executable' flags TXT||SYS|NOTEDITABLE|ONELINE known file 'package' flags TXT||SYS|NOTEDITABLE|ONELINE unknown file 'maillog' flags |BIN||NOTEDITABLE|MULTILINE unknown file 'wpa_supplicant.log' flags TXT|BIN||NOTEDITABLE|MULTILINE known file 'component' flags TXT||SYS|NOTEDITABLE|ONELINE unknown file 'bashrc' flags TXT|BIN||NOTEDITABLE|MULTILINE unknown file 'boot.log' flags |BIN||NOTEDITABLE|MULTILINE unknown file 'cron' flags |BIN||NOTEDITABLE|MULTILINE unknown file 'btmp' flags |BIN||NOTEDITABLE|MULTILINE unknown file 'spooler-20101205' flags TXT|BIN||NOTEDITABLE|ONELINE unknown file 'cron-20101205' flags TXT|BIN||NOTEDITABLE|MULTILINE unknown file 'secure' flags TXT|BIN||NOTEDITABLE|MULTILINE unknown file 'lastlog' flags |BIN||NOTEDITABLE|ONELINE known file 'cmdline' flags TXT||SYS|NOTEDITABLE|ONELINE known file 'time' flags TXT||SYS|NOTEDITABLE|ONELINE unknown file 'dmesg.old' flags |BIN||NOTEDITABLE|MULTILINE unknown file 'messages' flags |BIN||NOTEDITABLE|MULTILINE unknown file 'Xorg.0.log' flags |BIN||NOTEDITABLE|MULTILINE unknown file 'anaconda.log' flags TXT|BIN||NOTEDITABLE|MULTILINE unknown file 'pm-powersave.log' flags TXT|BIN||NOTEDITABLE|MULTILINE unknown file 'yum.log' flags TXT|BIN||NOTEDITABLE|MULTILINE known file 'architecture' flags TXT||SYS|NOTEDITABLE|ONELINE known file 'reason' flags TXT||SYS|NOTEDITABLE|ONELINE known file 'uuid' flags TXT||SYS|NOTEDITABLE|ONELINE known file 'count' flags TXT||SYS|NOTEDITABLE|MULTILINE known file 'description' flags TXT||SYS|EDITABLE|MULTILINE known file 'message' flags TXT||SYS|NOTEDITABLE|ONELINE unknown file 'Xorg.9.log' flags TXT|BIN||NOTEDITABLE|MULTILINE unknown file 'Xorg.0.log.old' flags |BIN||NOTEDITABLE|MULTILINE unknown file 'tallylog' flags TXT|BIN||NOTEDITABLE|ONELINE known file 'backtrace' flags TXT||SYS|EDITABLE|MULTILINE unknown file 'messages-20101205' flags |BIN||NOTEDITABLE|MULTILINE known file 'release' flags TXT||SYS|NOTEDITABLE|ONELINE unknown file 'maillog-20101205' flags TXT|BIN||NOTEDITABLE|MULTILINE unknown file 'spooler' flags TXT|BIN||NOTEDITABLE|ONELINE unknown file 'secure-20101205' flags TXT|BIN||NOTEDITABLE|MULTILINE unknown file 'pm-suspend.log' flags TXT|BIN||NOTEDITABLE|MULTILINE unknown file 'dmesg' flags |BIN||NOTEDITABLE|MULTILIN
<snip from code> char *short_name; char *full_name;
dd_init_next_file(dd); while (dd_get_next_file(dd, &short_name, &full_name)) { int flags = 0; ssize_t sz = 4*1024; char *text = is_text_file(full_name, &sz); flags |= (text) ? CD_FLAG_TXT : CD_FLAG_BIN; if (is_editable_file(short_name)) flags |= CD_FLAG_ISEDITABLE; else flags |= CD_FLAG_ISNOTEDITABLE; const char *const *v = abrt_known_files; while (*v) { if (strcmp(*v, short_name) == 0) break; v++; } /* known by abrt is CD_FLAG_SYS * unknown by abrt is CD_FLAG_BIN */ flags |= (*v) ? CD_FLAG_SYS : CD_FLAG_BIN; char *content; if (text && sz < 4*1024) /* is_text_file did read entire file */ content = xstrndup(text, sz); //TODO: can avoid this
copying if is_text_file() adds NUL else /* no, need to read it all */ content = dd_load_text(dd, short_name); free(text); int multiline = strchr(content, '\n') != NULL;
char *flags_str = xasprintf("flags %s|%s|%s|%s|%s", (flags & CD_FLAG_TXT) ? "TXT": "", (flags & CD_FLAG_BIN) ? "BIN": "", (flags & CD_FLAG_SYS) ? "SYS": "", (flags & CD_FLAG_ISEDITABLE) ?
"EDITABLE": "NOTEDITABLE", (multiline) ? "MULTILINE": "ONELINE");
if (*v) log("known file '%s' %s", *v, flags_str); else log("unknown file '%s' %s", short_name, flags_str);
</snip>
crash-catcher@lists.fedorahosted.org