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>
--
vda