summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2011-03-18 13:35:40 +0100
committerDenys Vlasenko <dvlasenk@redhat.com>2011-03-18 13:35:40 +0100
commit95a2b74dc9a4b9de18b8e7e9c28c644bba876778 (patch)
tree52f45b6467ec81d89da25571e31e48a9797c57c2 /src
parentcf9dc0c650065cd5cfc55394d9ee68c9d589e15a (diff)
downloadabrt-95a2b74dc9a4b9de18b8e7e9c28c644bba876778.tar.gz
abrt-95a2b74dc9a4b9de18b8e7e9c28c644bba876778.tar.xz
abrt-95a2b74dc9a4b9de18b8e7e9c28c644bba876778.zip
Replace FILENAME_MESSAGE with FILENAME_REPORTED_TO.
This fixes the problem with abrt-cli not showing unreported bugs and abrt-gui not showing "green lamp" for reported bugs. In general, it introduces a way to record reporting results, such as Bugzilla URL, in dump dir. In the future, this enables such functions as "check BZ status". Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Diffstat (limited to 'src')
-rw-r--r--src/cli/cli.c4
-rw-r--r--src/cli/report.cpp17
-rw-r--r--src/daemon/MiddleWare.cpp2
-rw-r--r--src/gui-gtk/abrt-gtk.c2
-rw-r--r--src/include/abrt_crash_data.h11
-rw-r--r--src/lib/dump_dir.c31
-rw-r--r--src/lib/make_descr.c1
-rw-r--r--src/plugins/abrt-action-bugzilla.cpp11
-rw-r--r--src/plugins/abrt-action-rhtsupport.c1
-rw-r--r--src/plugins/abrt-action-upload.c1
10 files changed, 55 insertions, 26 deletions
diff --git a/src/cli/cli.c b/src/cli/cli.c
index 49c08279..7a89ef30 100644
--- a/src/cli/cli.c
+++ b/src/cli/cli.c
@@ -121,8 +121,8 @@ static void print_crash_list(vector_of_crash_data_t *crash_list, bool include_re
crash_data_t *crash = get_crash_data(crash_list, i);
if (!include_reported)
{
- const char *msg = get_crash_item_content_or_NULL(crash, FILENAME_MESSAGE);
- if (!msg || !msg[0])
+ const char *msg = get_crash_item_content_or_NULL(crash, FILENAME_REPORTED_TO);
+ if (!msg)
continue;
}
diff --git a/src/cli/report.cpp b/src/cli/report.cpp
index 05f0b113..4391bfbc 100644
--- a/src/cli/report.cpp
+++ b/src/cli/report.cpp
@@ -508,8 +508,6 @@ static int run_events(const char *dump_dir_name,
GList *env_list = NULL;
// Run events
- bool at_least_one_reporter_succeeded = false;
- std::string message;
struct logging_state l_state;
l_state.last_line = NULL;
struct run_event_state *run_state = new_run_event_state();
@@ -530,11 +528,7 @@ static int run_events(const char *dump_dir_name,
}
if (r == 0)
{
- at_least_one_reporter_succeeded = true;
printf("%s: %s\n", event.c_str(), (l_state.last_line ? : "Reporting succeeded"));
- if (message != "")
- message += ";";
- message += (l_state.last_line ? : "Reporting succeeded");
}
else
{
@@ -553,17 +547,6 @@ static int run_events(const char *dump_dir_name,
}
free_run_event_state(run_state);
- // Save reporting results
- if (at_least_one_reporter_succeeded)
- {
- struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0);
- if (dd)
- {
- dd_save_text(dd, FILENAME_MESSAGE, message.c_str());
- dd_close(dd);
- }
- }
-
return error_cnt;
}
diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp
index a4503b57..77e18b0a 100644
--- a/src/daemon/MiddleWare.cpp
+++ b/src/daemon/MiddleWare.cpp
@@ -376,7 +376,7 @@ report_status_t Report(crash_data_t *client_report,
struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0);
if (dd)
{
- dd_save_text(dd, FILENAME_MESSAGE, message.c_str());
+ add_reported_to(dd, message.c_str());
dd_close(dd);
}
}
diff --git a/src/gui-gtk/abrt-gtk.c b/src/gui-gtk/abrt-gtk.c
index 45984683..4a921aa4 100644
--- a/src/gui-gtk/abrt-gtk.c
+++ b/src/gui-gtk/abrt-gtk.c
@@ -54,7 +54,7 @@ void add_directory_to_dirlist(const char *dirname)
size_t time_len = strftime(time_buf, sizeof(time_buf)-1, "%c", ptm);
time_buf[time_len] = '\0';
- char *msg = dd_load_text_ext(dd, FILENAME_MESSAGE, 0
+ char *msg = dd_load_text_ext(dd, FILENAME_REPORTED_TO, 0
| DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE
| DD_FAIL_QUIETLY_ENOENT
| DD_FAIL_QUIETLY_EACCES
diff --git a/src/include/abrt_crash_data.h b/src/include/abrt_crash_data.h
index 5a03f397..93fcb1fb 100644
--- a/src/include/abrt_crash_data.h
+++ b/src/include/abrt_crash_data.h
@@ -61,7 +61,13 @@
#define FILENAME_UUID "uuid"
#define FILENAME_INFORMALL "inform_all_users"
#define FILENAME_COUNT "count"
-#define FILENAME_MESSAGE "message"
+/* Multi-line list of places problem was reported.
+ * Recommended line format:
+ * "Reporter: VAR=VAL VAR=VAL"
+ * Use add_reported_to(dd, "line_without_newline"): it adds line
+ * only if it is not already there.
+ */
+#define FILENAME_REPORTED_TO "reported_to"
#define FILENAME_EVENT_LOG "event_log"
// Not stored as files, added "on the fly":
#define CD_DUMPDIR "DumpDir"
@@ -81,6 +87,9 @@ enum {
extern "C" {
#endif
+#define add_reported_to abrt_add_reported_to
+void add_reported_to(struct dump_dir *dd, const char *line);
+
#define log_crash_data abrt_log_crash_data
void log_crash_data(crash_data_t *crash_data, const char *pfx);
diff --git a/src/lib/dump_dir.c b/src/lib/dump_dir.c
index fefec608..045149ac 100644
--- a/src/lib/dump_dir.c
+++ b/src/lib/dump_dir.c
@@ -731,6 +731,37 @@ void dd_save_binary(struct dump_dir* dd, const char* name, const char* data, uns
free(full_path);
}
+void add_reported_to(struct dump_dir *dd, const char *line)
+{
+ if (!dd->locked)
+ error_msg_and_die("dump_dir is not opened"); /* bug */
+
+ char *reported_to = dd_load_text_ext(dd, FILENAME_REPORTED_TO, DD_FAIL_QUIETLY_ENOENT | DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE);
+ if (reported_to)
+ {
+ unsigned len_line = strlen(line);
+ char *p = reported_to;
+ while (*p)
+ {
+ if (strncmp(p, line, len_line) == 0 && (p[len_line] == '\n' || p[len_line] == '\0'))
+ goto ret;
+ p = strchrnul(p, '\n');
+ if (!*p)
+ break;
+ p++;
+ }
+ if (p != reported_to && p[-1] != '\n')
+ reported_to = append_to_malloced_string(reported_to, "\n");
+ reported_to = append_to_malloced_string(reported_to, line);
+ reported_to = append_to_malloced_string(reported_to, "\n");
+ }
+ else
+ reported_to = xasprintf("%s\n", line);
+ dd_save_text(dd, FILENAME_REPORTED_TO, reported_to);
+ ret:
+ free(reported_to);
+}
+
DIR *dd_init_next_file(struct dump_dir *dd)
{
// if (!dd->locked)
diff --git a/src/lib/make_descr.c b/src/lib/make_descr.c
index 08c9bca2..bd215181 100644
--- a/src/lib/make_descr.c
+++ b/src/lib/make_descr.c
@@ -66,7 +66,6 @@ static const char *const blacklisted_items[] = {
FILENAME_INFORMALL,
CD_DUMPDIR ,
FILENAME_COUNT ,
- FILENAME_MESSAGE ,
NULL
};
diff --git a/src/plugins/abrt-action-bugzilla.cpp b/src/plugins/abrt-action-bugzilla.cpp
index b24d8c3a..79e83b3b 100644
--- a/src/plugins/abrt-action-bugzilla.cpp
+++ b/src/plugins/abrt-action-bugzilla.cpp
@@ -861,7 +861,7 @@ static void report_to_bugzilla(
free(dsc);
- bool is_priv = is_private && (is_private[0] == '1');
+ bool is_priv = is_private && string_to_bool(is_private);
if (bz_server.add_comment(bug_id, full_dsc, is_priv) == -1)
{
free(full_dsc);
@@ -883,6 +883,15 @@ static void report_to_bugzilla(
(int)bug_id
);
+ dd = dd_opendir(dump_dir_name, /*flags:*/ 0);
+ if (dd)
+ {
+ char *msg = xasprintf("Bugzilla: URL=%s/show_bug.cgi?id=%u", bugzilla_url, (int)bug_id);
+ add_reported_to(dd, msg);
+ free(msg);
+ dd_close(dd);
+ }
+
free_crash_data(crash_data);
bug_info_destroy(&bz);
}
diff --git a/src/plugins/abrt-action-rhtsupport.c b/src/plugins/abrt-action-rhtsupport.c
index 94523e08..d7f93ea9 100644
--- a/src/plugins/abrt-action-rhtsupport.c
+++ b/src/plugins/abrt-action-rhtsupport.c
@@ -128,7 +128,6 @@ static void report_to_rhtsupport(
if (strcmp(name, FILENAME_COUNT) == 0) continue;
if (strcmp(name, CD_DUMPDIR) == 0) continue;
if (strcmp(name, FILENAME_INFORMALL) == 0) continue;
- if (strcmp(name, FILENAME_MESSAGE) == 0) continue; // plugin's status message (if we already reported it yesterday)
const char *content = value->content;
if (value->flags & CD_FLAG_TXT)
diff --git a/src/plugins/abrt-action-upload.c b/src/plugins/abrt-action-upload.c
index 88380bd7..8556e142 100644
--- a/src/plugins/abrt-action-upload.c
+++ b/src/plugins/abrt-action-upload.c
@@ -160,7 +160,6 @@ static int create_and_upload_archive(
if (strcmp(short_name, FILENAME_COUNT) == 0) goto next;
if (strcmp(short_name, CD_DUMPDIR) == 0) goto next;
if (strcmp(short_name, FILENAME_INFORMALL) == 0) goto next;
- if (strcmp(short_name, FILENAME_MESSAGE) == 0) goto next; // plugin's status message (if we already reported it yesterday)
// dd_get_next_file guarantees this:
//struct stat stbuf;
//if (stat(full_name, &stbuf) != 0)