OBS User unknown 2008-09-09 17:26:25 +00:00 committed by Git OBS Bridge
parent 8b72a4f747
commit ddd6a8a87c
5 changed files with 81 additions and 932 deletions

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c21ed24bc880c6e6b2d286c539ea6761baba557892ca84b61a0cdfef414c9b42
size 7818457

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5d1b841d7deb9303022011df87ede06c89fd09a3f9bf9f5832f451ed7cdb45bc
size 7864941

View File

@ -1,884 +0,0 @@
commit c4c5a8f8017b2283fe2622cdbe66e049da221e44
Author: Srinivasa Ragavan <sragavan@novell.com>
Date: Wed Sep 3 14:10:51 2008 +0530
2008-09-03 Srinivasa Ragavan <sragavan@novell.com>
* libedataserver/e-sexp.c (parse_list): Fix a crash in sexp.
diff --git a/ChangeLog b/ChangeLog
index 8358c8d..2702d11 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2008-09-03 Srinivasa Ragavan <sragavan@novell.com>
+
+ * libedataserver/e-sexp.c (parse_list): Fix a crash in sexp.
+
2008-09-01 Srinivasa Ragavan <sragavan@novell.com>
* NEWS: Evolution Data Server 2.23.91 release and version bump.
diff --git a/libedataserver/e-sexp.c b/libedataserver/e-sexp.c
index 364cc65..e07eb07 100644
--- a/libedataserver/e-sexp.c
+++ b/libedataserver/e-sexp.c
@@ -1031,6 +1031,8 @@ parse_list(ESExp *f, int gotbrace)
case G_TOKEN_IDENTIFIER:
e_sexp_fatal_error(f, "Unknown identifier: %s", g_scanner_cur_value(gs).v_identifier);
break;
+ case G_TOKEN_LEFT_PAREN:
+ return parse_list(f, TRUE);
default:
e_sexp_fatal_error(f, "Unexpected token encountered: %d", token);
}
commit 7d62ab35cc67da3b720b2a591c7dbe61c0c54011
Author: Srinivasa Ragavan <sragavan@novell.com>
Date: Wed Sep 3 14:12:28 2008 +0530
2008-09-03 Srinivasa Ragavan <sragavan@novell.com>
* camel/Makefile.am:
* camel/camel-search-sql-sexp.c: New Sexp based sexp to sql parser.
* camel/camel-search-sql-sexp.h:
diff --git a/camel/ChangeLog b/camel/ChangeLog
index d82b0fa..bfdd2b3 100644
--- a/camel/ChangeLog
+++ b/camel/ChangeLog
@@ -1,3 +1,9 @@
+2008-09-03 Srinivasa Ragavan <sragavan@novell.com>
+
+ * camel/Makefile.am:
+ * camel/camel-search-sql-sexp.c: New Sexp based sexp to sql parser.
+ * camel/camel-search-sql-sexp.h:
+
2008-09-01 Keith Packard <keithp@keithp.com>
** Fix for bug #541045
diff --git a/camel/Makefile.am b/camel/Makefile.am
index 7c8142d..ed93022 100644
--- a/camel/Makefile.am
+++ b/camel/Makefile.am
@@ -72,6 +72,7 @@ libcamel_provider_1_2_la_SOURCES = \
camel-sasl.c \
camel-search-private.c \
camel-search-sql.c \
+ camel-search-sql-sexp.c \
camel-service.c \
camel-session.c \
camel-smime-context.c \
diff --git a/camel/camel-search-sql-sexp.c b/camel/camel-search-sql-sexp.c
new file mode 100644
index 0000000..b1f2c27
--- /dev/null
+++ b/camel/camel-search-sql-sexp.c
@@ -0,0 +1,719 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2008 Novell, Inc. (www.novell.com)
+ *
+ * Author: Srinivasa Ragavan <sragavan@novell.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU Lesser General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/* This is a helper class for folders to implement the search function.
+ It implements enough to do basic searches on folders that can provide
+ an in-memory summary and a body index. */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <glib.h>
+#include "camel-search-sql-sexp.h"
+#include "libedataserver/e-sexp.h"
+#define d(x) //x;printf("\n");
+
+#ifdef TEST_MAIN
+#include <sqlite3.h>
+typedef enum {
+ CAMEL_SEARCH_MATCH_EXACT,
+ CAMEL_SEARCH_MATCH_CONTAINS,
+ CAMEL_SEARCH_MATCH_STARTS,
+ CAMEL_SEARCH_MATCH_ENDS,
+ CAMEL_SEARCH_MATCH_SOUNDEX
+} camel_search_match_t;
+char * camel_db_get_column_name (const char *raw_name);
+
+char *
+camel_db_sqlize_string (const char *string)
+{
+ return sqlite3_mprintf ("%Q", string);
+}
+
+void
+camel_db_free_sqlized_string (char *string)
+{
+ sqlite3_free (string);
+ string = NULL;
+}
+
+#else
+#include "camel-db.h"
+#include "camel-folder-search.h"
+#include "camel-search-private.h"
+#endif
+
+static char *
+get_db_safe_string (const char *str)
+{
+ char *tmp = camel_db_sqlize_string (str);
+ char *ret;
+
+ ret = g_strdup(tmp);
+ camel_db_free_sqlized_string (tmp);
+
+ return ret;
+}
+
+/* Configuration of your sexp expression */
+
+static ESExpResult *
+func_and(ESExp *f, int argc, struct _ESExpTerm **argv, void *data)
+{
+ ESExpResult *r, *r1;
+ GString *string;
+ int i;
+
+ d(printf("executing and: %d", argc));
+
+ string = g_string_new("( ");
+ for (i = 0; i < argc; i ++) {
+ r1 = e_sexp_term_eval(f, argv[i]);
+
+ if (r1->type != ESEXP_RES_STRING) {
+ e_sexp_result_free (f, r1);
+ continue;
+ }
+ if (r1->value.string && *r1->value.string)
+ g_string_append_printf(string, "%s%s", r1->value.string, ((argc>1) && (i != argc-1)) ? " AND ":"");
+ e_sexp_result_free (f, r1);
+ }
+ g_string_append(string, " )");
+ r = e_sexp_result_new(f, ESEXP_RES_STRING);
+
+ if (strlen(string->str) == 4)
+ r->value.string = g_strdup("");
+ else
+ r->value.string = string->str;
+ g_string_free(string, FALSE);
+
+ return r;
+}
+
+static ESExpResult *
+func_or(ESExp *f, int argc, struct _ESExpTerm **argv, void *data)
+{
+ ESExpResult *r, *r1;
+ GString *string;
+ int i;
+
+ d(printf("executing or: %d", argc));
+
+ string = g_string_new("( ");
+ for (i = 0; i < argc; i ++) {
+ r1 = e_sexp_term_eval(f, argv[i]);
+
+ if (r1->type != ESEXP_RES_STRING){
+ e_sexp_result_free (f, r1);
+ continue;
+ }
+ g_string_append_printf(string, "%s%s", r1->value.string, ((argc>1) && (i != argc-1)) ? " OR ":"");
+ e_sexp_result_free (f, r1);
+ }
+ g_string_append(string, " )");
+
+ r = e_sexp_result_new(f, ESEXP_RES_STRING);
+ r->value.string = string->str;
+ g_string_free(string, FALSE);
+ return r;
+}
+
+static ESExpResult *
+func_not(ESExp *f, int argc, struct _ESExpTerm **argv, void *data)
+{
+ ESExpResult *r=NULL, *r1;
+
+ d(printf("executing not: %d", argc));
+ r1 = e_sexp_term_eval(f, argv[0]);
+
+ if (r1->type == ESEXP_RES_STRING) {
+ r = e_sexp_result_new(f, ESEXP_RES_STRING);
+ r->value.string = g_strdup_printf ("(NOT (%s))",
+ r1->value.string);
+ }
+ e_sexp_result_free (f, r1);
+
+ return r;
+}
+
+/* this should support all arguments ...? */
+static ESExpResult *
+eval_eq(struct _ESExp *f, int argc, struct _ESExpTerm **argv, void *data)
+{
+ struct _ESExpResult *r, *r1, *r2;
+
+ r = e_sexp_result_new(f, ESEXP_RES_STRING);
+
+ if (argc == 2) {
+ GString *str = g_string_new("( ");
+ r1 = e_sexp_term_eval(f, argv[0]);
+ r2 = e_sexp_term_eval(f, argv[1]);
+
+ if (r1->type == ESEXP_RES_INT)
+ g_string_append_printf(str, "%d", r1->value.number);
+ else if (r1->type == ESEXP_RES_TIME)
+ g_string_append_printf(str, "%ld", r1->value.time);
+ else if (r1->type == ESEXP_RES_STRING)
+ g_string_append_printf(str, "%s", r1->value.string);
+
+ if (!strstr(str->str, "completed-on") && !strstr(str->str, "follow-up")) {
+ gboolean ut = FALSE;
+
+ if (strstr(str->str, "usertags"))
+ ut = TRUE;
+ if (ut)
+ g_string_append_printf(str, " LIKE ");
+ else
+ g_string_append_printf(str, " = ");
+ if (r2->type == ESEXP_RES_INT)
+ g_string_append_printf(str, "%d", r2->value.number);
+ if (r2->type == ESEXP_RES_BOOL)
+ g_string_append_printf(str, "%d", r2->value.bool);
+ else if (r2->type == ESEXP_RES_TIME)
+ g_string_append_printf(str, "%ld", r2->value.time);
+ else if (r2->type == ESEXP_RES_STRING) {
+ char *tmp = g_strdup_printf("%c%s%c", ut ? '%':' ', r2->value.string, ut?'%':' ');
+ char *safe = get_db_safe_string(tmp);
+ g_string_append_printf(str, "%s", safe);
+ g_free(safe);
+ g_free(tmp);
+ }
+ }
+ e_sexp_result_free(f, r1);
+ e_sexp_result_free(f, r2);
+ g_string_append (str, " )");
+ r->value.string = str->str;
+ g_string_free(str, FALSE);
+ }
+ return r;
+}
+
+static ESExpResult *
+eval_lt(struct _ESExp *f, int argc, struct _ESExpTerm **argv, void *data)
+{
+ struct _ESExpResult *r, *r1, *r2;
+
+ r = e_sexp_result_new(f, ESEXP_RES_STRING);
+
+ if (argc == 2) {
+ GString *str = g_string_new("( ");
+ r1 = e_sexp_term_eval(f, argv[0]);
+ r2 = e_sexp_term_eval(f, argv[1]);
+
+ if (r1->type == ESEXP_RES_INT)
+ g_string_append_printf(str, "%d", r1->value.number);
+ else if (r1->type == ESEXP_RES_TIME)
+ g_string_append_printf(str, "%ld", r1->value.time);
+ else if (r1->type == ESEXP_RES_STRING)
+ g_string_append_printf(str, "%s", r1->value.string);
+
+ g_string_append_printf(str, " < ");
+ if (r2->type == ESEXP_RES_INT)
+ g_string_append_printf(str, "%d", r2->value.number);
+ if (r2->type == ESEXP_RES_BOOL)
+ g_string_append_printf(str, "%d", r2->value.bool);
+ else if (r2->type == ESEXP_RES_TIME)
+ g_string_append_printf(str, "%ld", r2->value.time);
+ else if (r2->type == ESEXP_RES_STRING)
+ g_string_append_printf(str, "%s", r2->value.string);
+ e_sexp_result_free(f, r1);
+ e_sexp_result_free(f, r2);
+ g_string_append (str, " )");
+
+ r->value.string = str->str;
+ g_string_free(str, FALSE);
+ }
+ return r;
+}
+
+/* this should support all arguments ...? */
+static ESExpResult *
+eval_gt(struct _ESExp *f, int argc, struct _ESExpTerm **argv, void *data)
+{
+ struct _ESExpResult *r, *r1, *r2;
+
+ r = e_sexp_result_new(f, ESEXP_RES_STRING);
+
+ if (argc == 2) {
+ GString *str = g_string_new("( ");
+ r1 = e_sexp_term_eval(f, argv[0]);
+ r2 = e_sexp_term_eval(f, argv[1]);
+
+ if (r1->type == ESEXP_RES_INT)
+ g_string_append_printf(str, "%d", r1->value.number);
+ else if (r1->type == ESEXP_RES_TIME)
+ g_string_append_printf(str, "%ld", r1->value.time);
+ else if (r1->type == ESEXP_RES_STRING)
+ g_string_append_printf(str, "%s", r1->value.string);
+
+ g_string_append_printf(str, " > ");
+ if (r2->type == ESEXP_RES_INT)
+ g_string_append_printf(str, "%d", r2->value.number);
+ if (r2->type == ESEXP_RES_BOOL)
+ g_string_append_printf(str, "%d", r2->value.bool);
+ else if (r2->type == ESEXP_RES_TIME)
+ g_string_append_printf(str, "%ld", r2->value.time);
+ else if (r2->type == ESEXP_RES_STRING)
+ g_string_append_printf(str, "%s", r2->value.string);
+ e_sexp_result_free(f, r1);
+ e_sexp_result_free(f, r2);
+ g_string_append (str, " )");
+
+ r->value.string = str->str;
+ g_string_free(str, FALSE);
+ }
+ return r;
+}
+
+static ESExpResult *
+match_all(struct _ESExp *f, int argc, struct _ESExpTerm **argv, void *data)
+{
+ ESExpResult *r;
+
+ d(printf("executing match-all: %d", argc));
+ if (argv[0]->type != ESEXP_TERM_TIME)
+ r = e_sexp_term_eval(f, argv[0]);
+ else {
+ r = e_sexp_result_new(f, ESEXP_RES_STRING);
+ r->value.string = g_strdup("");
+ }
+
+ return r;
+
+}
+
+
+static ESExpResult *
+match_threads(struct _ESExp *f, int argc, struct _ESExpTerm **argv, void *data)
+{
+ ESExpResult *r;
+ int i;
+ GString *str = g_string_new ("( ");
+
+ d(printf("executing match-threads: %d", argc));
+
+ for (i=1;i<argc;i++) {
+ r = e_sexp_term_eval(f, argv[i]);
+ g_string_append_printf(str, "%s%s", r->value.string, ((argc>1) && (i != argc-1)) ? " AND ":"");
+ e_sexp_result_free(f, r);
+ }
+
+ g_string_append (str, " )");
+ r = e_sexp_result_new(f, ESEXP_RES_STRING);
+ r->value.string = str->str;
+ g_string_free(str, FALSE);
+
+ return r;
+}
+
+static ESExpResult *
+check_header (struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data, camel_search_match_t how)
+{
+ ESExpResult *r;
+ char *str=NULL;
+
+ d(printf("executing check-header %d\n", how));
+
+ /* are we inside a match-all? */
+ if (argc>1 && argv[0]->type == ESEXP_RES_STRING) {
+ char *headername;
+ int i;
+
+ /* only a subset of headers are supported .. */
+ headername = camel_db_get_column_name (argv[0]->value.string);
+
+ /* performs an OR of all words */
+ for (i=1;i<argc;i++) {
+ if (argv[i]->type == ESEXP_RES_STRING) {
+ char *value=NULL, *tstr=NULL;
+ if (argv[i]->value.string[0] == 0)
+ continue;
+ if (how == CAMEL_SEARCH_MATCH_CONTAINS) {
+ tstr = g_strdup_printf ("%c%s%c", '%', argv[i]->value.string, '%');
+ value = get_db_safe_string (tstr);
+ g_free (tstr);
+ } else if (how == CAMEL_SEARCH_MATCH_ENDS) {
+ tstr = g_strdup_printf ("%c%s", '%', argv[i]->value.string);
+ value = get_db_safe_string (tstr);
+ g_free (tstr);
+ } else if (how == CAMEL_SEARCH_MATCH_STARTS) {
+ tstr = g_strdup_printf ("%s%c", argv[i]->value.string, '%');
+ value = get_db_safe_string (tstr);
+ g_free (tstr);
+ } else if (how == CAMEL_SEARCH_MATCH_EXACT) {
+ value = get_db_safe_string(argv[i]->value.string);
+ }
+ str = g_strdup_printf("(%s LIKE %s)", headername, value);
+ g_free(value);
+ }
+ }
+ g_free (headername);
+ }
+ /* TODO: else, find all matches */
+
+ r = e_sexp_result_new(f, ESEXP_RES_STRING);
+ r->value.string = str;
+
+ return r;
+}
+
+static ESExpResult *
+header_contains(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
+{
+ d(printf("executing header-contains: %d", argc));
+
+ return check_header(f, argc, argv, data, CAMEL_SEARCH_MATCH_CONTAINS);
+}
+
+static ESExpResult *
+header_matches(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
+{
+ d(printf("executing header-matches: %d", argc));
+
+ return check_header(f, argc, argv, data, CAMEL_SEARCH_MATCH_EXACT);
+}
+
+static ESExpResult *
+header_starts_with (struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
+{
+ d(printf("executing header-starts-with: %d", argc));
+
+ return check_header(f, argc, argv, data, CAMEL_SEARCH_MATCH_STARTS);
+}
+
+static ESExpResult *
+header_ends_with (struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
+{
+ d(printf("executing header-ends-with: %d", argc));
+
+ return check_header(f, argc, argv, data, CAMEL_SEARCH_MATCH_ENDS);
+}
+
+
+static ESExpResult *
+header_exists (struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
+{
+ ESExpResult *r;
+ char *headername;
+
+ d(printf("executing header-exists: %d", argc));
+
+ headername = camel_db_get_column_name (argv[0]->value.string);
+ r = e_sexp_result_new(f, ESEXP_RES_STRING);
+ r->value.string = g_strdup_printf ("(%s NOTNULL)", headername);
+ g_free (headername);
+ return r;
+}
+
+static ESExpResult *
+user_tag(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
+{
+ ESExpResult *r;
+
+ d(printf("executing user-tag: %d", argc));
+
+ r = e_sexp_result_new(f, ESEXP_RES_STRING);
+ /* Hacks no otherway to fix these really :( */
+ if (strcmp(argv[0]->value.string, "completed-on") == 0)
+ r->value.string = g_strdup_printf("usertags NOT LIKE '%ccompleted-on%c'", '%', '%');
+ else if (strcmp(argv[0]->value.string, "follow-up") == 0)
+ r->value.string = g_strdup_printf("usertags NOT LIKE '%cfollow-up%c'", '%', '%');
+ else
+ r->value.string = g_strdup("usertags");
+
+ return r;
+}
+
+
+static ESExpResult *
+user_flag(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
+{
+ ESExpResult *r;
+ char *tstr, *qstr;
+
+ d(printf("executing user-flag: %d", argc));
+
+ tstr = g_strdup_printf("%c%s%c", '%', argv[0]->value.string, '%');
+ qstr = get_db_safe_string(tstr);
+ g_free(tstr);
+ r = e_sexp_result_new(f, ESEXP_RES_STRING);
+ r->value.string = g_strdup_printf("(labels LIKE %s)", qstr);
+ g_free(qstr);
+
+ return r;
+}
+
+static ESExpResult *
+system_flag (struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
+{
+ ESExpResult *r;
+ char *tstr;
+
+ d(printf("executing system-flag: %d", argc));
+
+ tstr = camel_db_get_column_name(argv[0]->value.string);
+ r = e_sexp_result_new(f, ESEXP_RES_STRING);
+ r->value.string = g_strdup_printf("(%s = 1)", tstr);
+ g_free(tstr);
+
+ return r;
+}
+
+static ESExpResult *
+get_sent_date(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
+{
+ ESExpResult *r;
+
+ d(printf("executing get-sent-date\n"));
+
+ r = e_sexp_result_new(f, ESEXP_RES_STRING);
+ r->value.string = g_strdup("dsent");
+
+ return r;
+}
+
+static ESExpResult *
+get_received_date(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
+{
+ ESExpResult *r;
+
+ d(printf("executing get-received-date\n"));
+
+ r = e_sexp_result_new(f, ESEXP_RES_STRING);
+ r->value.string = g_strdup("dreceived");
+
+ return r;
+}
+
+static ESExpResult *
+get_current_date(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
+{
+ ESExpResult *r;
+
+ d(printf("executing get-current-date\n"));
+
+ r = e_sexp_result_new(f, ESEXP_RES_INT);
+ r->value.number = time (NULL);
+ return r;
+}
+
+static ESExpResult *
+get_size (struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
+{
+ ESExpResult *r;
+
+ d(printf("executing get-size\n"));
+
+ r = e_sexp_result_new(f, ESEXP_RES_STRING);
+ r->value.string = g_strdup("size");
+
+ return r;
+}
+
+/* 'builtin' functions */
+static struct {
+ char *name;
+ ESExpFunc *func;
+ int builtin :1;
+} symbols[] = {
+ { "and", (ESExpFunc *) func_and, 1 },
+ { "or", (ESExpFunc *) func_or, 1},
+ { "not", (ESExpFunc *) func_not, 1},
+ { "=", (ESExpFunc *)eval_eq, 1},
+ { ">", (ESExpFunc *)eval_gt, 1},
+ { "<", (ESExpFunc *)eval_lt, 1},
+
+ { "match-all", (ESExpFunc *)match_all, 0 },
+ { "match-threads", (ESExpFunc *)match_threads, 0 },
+/* { "body-contains", body_contains}, */ /* We don't store body on the db. */
+ { "header-contains", header_contains, 0},
+ { "header-matches", header_matches, 0},
+ { "header-starts-with", header_starts_with, 0},
+ { "header-ends-with", header_ends_with, 0},
+ { "header-exists", header_exists, 0},
+ { "user-tag", user_tag, 0},
+ { "user-flag", user_flag, 0},
+ { "system-flag", system_flag, 0},
+ { "get-sent-date", get_sent_date, 0},
+ { "get-received-date", get_received_date, 0},
+ { "get-current-date", get_current_date, 0},
+ { "get-size", get_size, 0},
+/* { "uid", CAMEL_STRUCT_OFFSET(CamelFolderSearchClass, uid), 1 }, */
+};
+
+
+char *
+camel_sexp_to_sql_sexp (const char *sql)
+{
+ ESExp *sexp;
+ ESExpResult *r;
+ int i;
+ char *res;
+
+ sexp = e_sexp_new();
+
+ for(i=0;i<sizeof(symbols)/sizeof(symbols[0]);i++) {
+ e_sexp_add_function(sexp, 0, symbols[i].name,
+ symbols[i].func, NULL);
+ }
+
+ e_sexp_input_text (sexp, sql, strlen (sql));
+ e_sexp_parse (sexp);
+
+ r = e_sexp_eval (sexp);
+ if (r->type == ESEXP_RES_STRING) {
+ res = g_strdup (r->value.string);
+ } else
+ g_assert(0);
+
+ e_sexp_result_free(sexp, r);
+ e_sexp_unref (sexp);
+ return res;
+}
+
+#ifdef TEST_MAIN
+/*
+
+
+(and (match-all (and (not (system-flag "deleted")) (not (system-flag "junk"))))
+ (and (or
+
+ (match-all (not (system-flag "Attachments")))
+
+ )
+ ))
+
+"
+replied INTEGER , (match-all (system-flag "Answered"))
+size INTEGER , (match-all (< (get-size) 100))
+dsent NUMERIC , (match-all (< (get-sent-date) (- (get-current-date) 10)))
+dreceived NUMERIC , (match-all (< (get-received-date) (- (get-current-date) 10)))
+//mlist TEXT , x-camel-mlist (match-all (header-matches "x-camel-mlist" "gnome.org"))
+//attachment, system-flag "Attachments" (match-all (system-flag "Attachments"))
+//followup_flag TEXT , (match-all (not (= (user-tag "follow-up") "")))
+//followup_completed_on TEXT , (match-all (not (= (user-tag "completed-on") "")))
+//followup_due_by TEXT ," //NOTREQD
+*/
+
+char * camel_db_get_column_name (const char *raw_name)
+{
+ //d(g_print ("\n\aRAW name is : [%s] \n\a", raw_name));
+ if (!g_ascii_strcasecmp (raw_name, "Subject"))
+ return g_strdup ("subject");
+ else if (!g_ascii_strcasecmp (raw_name, "from"))
+ return g_strdup ("mail_from");
+ else if (!g_ascii_strcasecmp (raw_name, "Cc"))
+ return g_strdup ("mail_cc");
+ else if (!g_ascii_strcasecmp (raw_name, "To"))
+ return g_strdup ("mail_to");
+ else if (!g_ascii_strcasecmp (raw_name, "Flagged"))
+ return g_strdup ("important");
+ else if (!g_ascii_strcasecmp (raw_name, "deleted"))
+ return g_strdup ("deleted");
+ else if (!g_ascii_strcasecmp (raw_name, "junk"))
+ return g_strdup ("junk");
+ else if (!g_ascii_strcasecmp (raw_name, "Answered"))
+ return g_strdup ("replied");
+ else if (!g_ascii_strcasecmp (raw_name, "Seen"))
+ return g_strdup ("read");
+ else if (!g_ascii_strcasecmp (raw_name, "user-tag"))
+ return g_strdup ("usertags");
+ else if (!g_ascii_strcasecmp (raw_name, "user-flag"))
+ return g_strdup ("labels");
+ else if (!g_ascii_strcasecmp (raw_name, "Attachments"))
+ return g_strdup ("attachment");
+ else if (!g_ascii_strcasecmp (raw_name, "x-camel-mlist"))
+ return g_strdup ("mlist");
+ else {
+ /* Let it crash for all unknown columns for now.
+ We need to load the messages into memory and search etc.
+ We should extend this for camel-folder-search system flags search as well
+ otherwise, search-for-signed-messages will not work etc.*/
+
+ return g_strdup (raw_name);
+ }
+
+}
+
+int main ()
+{
+
+ int i=0;
+ char *txt[] = {
+ "(match-all (header-contains \"From\" \"org\"))",
+ "(and (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")))) (and (or (match-all (or (header-ends-with \"To\" \"novell.com\") (header-ends-with \"Cc\" \"novell.com\"))) (match-all (or (= (user-tag \"label\") \"work\") (user-flag \"work\"))) )))",
+
+ "(and (and (match-all (header-contains \"From\" \"org\")) ) (match-all (not (system-flag \"junk\"))))",
+
+ "(and (and (match-all (header-contains \"From\" \"org\"))) (and (match-all (not (system-flag \"junk\"))) (and (or (match-all (header-contains \"Subject\" \"test\")) (match-all (header-contains \"From\" \"test\"))))))",
+ "(and (and (match-all (header-exists \"From\")) ) (match-all (not (system-flag \"junk\"))))",
+ "(and (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")))) (and (or (match-all (header-contains \"Subject\" \"org\")) (match-all (header-contains \"From\" \"org\")) (match-all (system-flag \"Flagged\")) (match-all (system-flag \"Seen\")) )))",
+ "(and (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")))) (and (or (match-all (or (header-ends-with \"To\" \"novell.com\") (header-ends-with \"Cc\" \"novell.com\"))) (= (user-tag \"label\") \"work\") )))",
+ "(and (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")))) (and (or (match-all (or (header-ends-with \"To\" \"novell.com\") (header-ends-with \"Cc\" \"novell.com\"))) (user-flag \"work\") )))",
+ "(and (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")))) (and (or (match-all (or (header-ends-with \"To\" \"novell.com\") (header-ends-with \"Cc\" \"novell.com\"))) (user-flag (+ \"$Label\" \"work\")) )))"
+ "(and (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")))) (and (or (match-all (not (= (user-tag \"follow-up\") \"\"))) )))",
+ "(and (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")))) (and (or (match-all (= (user-tag \"follow-up\") \"\")) )))",
+ "(and (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")))) (and (or (match-all (not (= (user-tag \"completed-on\") \"\"))) )))",
+ "(match-all (and (match-all #t) (system-flag \"deleted\")))",
+ "(and (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")))) (and (or (match-all (or (= (user-tag \"label\") \"important\") (user-flag (+ \"$Label\" \"important\")) (user-flag \"important\"))) )))",
+ "(or (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")) (not (system-flag \"Attachments\")) (not (system-flag \"Answered\")))) (and (or (match-all (= (user-tag \"completed-on\") \"\")) )))",
+ "(and (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")))) (and (or (match-all (= (user-tag \"completed-on\") \"\")) (match-all (= (user-tag \"follow-up\") \"\")) )))",
+ "(and (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")))) (and (or (match-all (> (get-sent-date) (- (get-current-date) 100))) )))",
+ "(and (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")))) (and (or (match-all (< (get-sent-date) (+ (get-current-date) 100))) )))",
+ "(and (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")))) (and (or (match-all (not (= (get-sent-date) 1216146600))) )))",
+ "(and (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")))) (and (or (match-all (= (get-sent-date) 1216146600)) )))" ,
+ "(match-threads \"all\" (or (match-all (header-contains \"From\" \"@edesvcs.com\")) (match-all (or (header-contains \"To\" \"@edesvcs.com\") (header-contains \"Cc\" \"@edesvcs.com\"))) ))",
+ "(match-all (not (system-flag \"deleted\")))",
+ "(match-all (system-flag \"seen\"))",
+ "(match-all (and (match-all #t) (system-flag \"deleted\")))",
+ "(match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\"))))",
+
+ "(and (or (match-all (header-contains \"Subject\" \"lin\")) ) (and (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")))) (and (or (match-all (header-contains \"Subject\" \"case\")) (match-all (header-contains \"From\" \"case\"))))))",
+ "(and ( match-all(or (match-all (header-contains \"Subject\" \"lin\")) (match-all (header-contains \"From\" \"in\")))) (and (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")))) (and (or (match-all (header-contains \"Subject\" \"proc\")) (match-all (header-contains \"From\" \"proc\"))))))",
+ "(and (or (match-all (header-contains \"Subject\" \"[LDTP-NOSIP]\")) ) (and (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")))) (and (or (match-all (header-contains \"Subject\" \"vamsi\")) (match-all (header-contains \"From\" \"vamsi\"))))))",
+ /* Last one doesn't work so well and fails on one case. But I doubt, you can create a query like that in Evo. */
+ "(and (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")))) (match-all (or (= (user-tag \"label\") \"_office\") (user-flag \"$Label_office\") (user-flag \"_office\"))))",
+ "(and (and (match-all #t))(and(match-all #t)))",
+ "(and (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")))) (and (and (match-all (header-contains \"Subject\" \"mysubject\")) (match-all (not (header-matches \"From\" \"mysender\"))) (match-all (= (get-sent-date) (+ (get-current-date) 1))) (match-all (= (get-received-date) (- (get-current-date) 604800))) (match-all (or (= (user-tag \"label\") \"important\") (user-flag (+ \"$Label\" \"important\")) (match-all (< (get-size) 7000)) (match-all (not (= (get-sent-date) 1216146600))) (match-all (> (cast-int (user-tag \"score\")) 3)) (user-flag \"important\"))) (match-all (system-flag \"Deleted\")) (match-all (not (= (user-tag \"follow-up\") \"\"))) (match-all (= (user-tag \"completed-on\") \"\")) (match-all (system-flag \"Attachments\")) (match-all (header-contains \"x-camel-mlist\" \"evo-hackers\")) )))",
+ "(and (or (match-all (or (= (user-tag \"label\") \"important\") (user-flag (+ \"$Label\" \"important\")) (user-flag \"important\"))) (match-all (or (= (user-tag \"label\") \"work\") (user-flag (+ \"$Label\" \"work\")) (user-flag \"work\"))) (match-all (or (= (user-tag \"label\") \"personal\") (user-flag (+ \"$Label\" \"personal\")) (user-flag \"personal\"))) (match-all (or (= (user-tag \"label\") \"todo\") (user-flag (+ \"$Label\" \"todo\")) (user-flag \"todo\"))) (match-all (or (= (user-tag \"label\") \"later\") (user-flag (+ \"$Label\" \"later\")) (user-flag \"later\"))) ) (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")))))",
+ "(or (header-matches \"to\" \"maw@ximian.com\") (header-matches \"to\" \"mw@ximian.com\") (header-matches \"to\" \"maw@novell.com\") (header-matches \"to\" \"maw.AMERICAS3.AMERICAS@novell.com\") (header-matches \"cc\" \"maw@ximian.com\") (header-matches \"cc\" \"mw@ximian.com\") (header-matches \"cc\" \"maw@novell.com\") (header-matches \"cc\" \"maw.AMERICAS3.AMERICAS@novell.com\"))",
+ "(not (or (header-matches \"from\" \"bugzilla-daemon@bugzilla.ximian.com\") (header-matches \"from\" \"bugzilla-daemon@bugzilla.gnome.org\") (header-matches \"from\" \"bugzilla_noreply@novell.com\") (header-matches \"from\" \"bugzilla-daemon@mozilla.org\") (header-matches \"from\" \"root@dist.suse.de\") (header-matches \"from\" \"root@hilbert3.suse.de\") (header-matches \"from\" \"root@hilbert4.suse.de\") (header-matches \"from\" \"root@hilbert5.suse.de\") (header-matches \"from\" \"root@hilbert6.suse.de\") (header-matches \"from\" \"root@suse.de\") (header-matches \"from\" \"swamp_noreply@suse.de\") (and (header-matches \"from\" \"hermes@opensuse.org\") (header-starts-with \"subject\" \"submit-Request\"))))",
+ "(and (match-threads \"replies_parents\" (and (match-all (or (header-matches \"to\" \"maw@ximian.com\") (header-matches \"to\" \"mw@ximian.com\") (header-matches \"to\" \"maw@novell.com\") (header-matches \"to\" \"maw.AMERICAS3.AMERICAS@novell.com\") (header-matches \"cc\" \"maw@ximian.com\") (header-matches \"cc\" \"mw@ximian.com\") (header-matches \"cc\" \"maw@novell.com\") (header-matches \"cc\" \"maw.AMERICAS3.AMERICAS@novell.com\"))) (match-all (not (or (header-matches \"from\" \"bugzilla-daemon@bugzilla.ximian.com\") (header-matches \"from\" \"bugzilla-daemon@bugzilla.gnome.org\") (header-matches \"from\" \"bugzilla_noreply@novell.com\") (header-matches \"from\" \"bugzilla-daemon@mozilla.org\") (header-matches \"from\" \"root@dist.suse.de\") (header-matches \"from\" \"root@hilbert3.suse.de\") (header-matches \"from\" \"root@hilbert4.suse.de\") (header-matches \"from\" \"root@hilbert5.suse.de\") (header-matches \"from\" \"root@hilbert6.suse.de\") (header-matches \"from\" \"root@suse.de\") (header-matches \"from\" \"swamp_noreply@suse.de\") (and (header-matches \"from\" \"hermes@opensuse.org\") (header-starts-with \"subject\" \"submit-Request\"))))) (match-all (> (get-sent-date) (- (get-current-date) 1209600))) )) (match-all (and (not (system-flag \"deleted\")) (not (system-flag \"junk\")))))",
+ "and ((match-all (system-flag \"Deleted\")) (match-all (system-flag \"junk\")))",
+ "(and (match-threads \"replies_parents\" (and (match-all (or (header-matches \"to\" \"maw@ximian.com\")))))))"
+ };
+
+ for (i=0; i < G_N_ELEMENTS(txt); i++) {
+ char *sql = NULL;
+ printf("Q: %s\n\"%c\"\n", txt[i], 40);
+ sql = camel_e_sexp_to_sql (txt[i]);
+ printf("A: %s\n\n\n", sql);
+ g_free (sql);
+ }
+
+}
+#endif
+
+
diff --git a/camel/camel-search-sql-sexp.h b/camel/camel-search-sql-sexp.h
new file mode 100644
index 0000000..1bcced0
--- /dev/null
+++ b/camel/camel-search-sql-sexp.h
@@ -0,0 +1,32 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2008 Novell, Inc. (www.novell.com)
+ *
+ * Authors: Srinivsa Ragavan <sragavan@novell.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU Lesser General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _CAMEL_SEARCH_SQL_SEXP_H
+#define _CAMEL_SEARCH_SQL_SEXP_H
+
+G_BEGIN_DECLS
+
+/* FIXME: Weird naming, since, I want both parsers to be there for some time.*/
+char * camel_sexp_to_sql_sexp (const char *sexp);
+
+G_END_DECLS
+
+#endif /* ! _CAMEL_SEARCH_SQL_H */
commit 1f0aef2eba882c21df30af66eb33fc1169e77b9d
Author: Srinivasa Ragavan <sragavan@novell.com>
Date: Wed Sep 3 14:18:36 2008 +0530
2008-09-03 Srinivasa Ragavan <sragavan@novell.com>
** Fix for BNC bug #418080
* camel/camel-folder-search.c: Make thing better, with new sexp/sql
parser.
diff --git a/camel/ChangeLog b/camel/ChangeLog
index bfdd2b3..db4f962 100644
--- a/camel/ChangeLog
+++ b/camel/ChangeLog
@@ -1,5 +1,12 @@
2008-09-03 Srinivasa Ragavan <sragavan@novell.com>
+ ** Fix for BNC bug #418080
+
+ * camel/camel-folder-search.c: Make thing better, with new sexp/sql
+ parser.
+
+2008-09-03 Srinivasa Ragavan <sragavan@novell.com>
+
* camel/Makefile.am:
* camel/camel-search-sql-sexp.c: New Sexp based sexp to sql parser.
* camel/camel-search-sql-sexp.h:
diff --git a/camel/camel-folder-search.c b/camel/camel-folder-search.c
index 24c7e2b..d511b37 100644
--- a/camel/camel-folder-search.c
+++ b/camel/camel-folder-search.c
@@ -51,6 +51,7 @@
#include "camel-vee-folder.h"
#include "camel-string-utils.h"
#include "camel-search-sql.h"
+#include "camel-search-sql-sexp.h"
#define d(x)
#define r(x)
@@ -483,7 +484,10 @@ camel_folder_search_search(CamelFolderSearch *search, const char *expr, GPtrArra
camel_folder_summary_save_to_db (search->folder->summary, ex);
d(printf ("sexp is : [%s]\n", expr));
- sql_query = camel_sexp_to_sql (expr);
+ if (g_getenv("SQL_SEARCH_OLD"))
+ sql_query = camel_sexp_to_sql (expr);
+ else
+ sql_query = camel_sexp_to_sql_sexp (expr);
tmp1 = camel_db_sqlize_string(search->folder->full_name);
tmp = g_strdup_printf ("SELECT uid FROM %s %s %s", tmp1, sql_query ? "WHERE":"", sql_query?sql_query:"");
camel_db_free_sqlized_string (tmp1);

View File

@ -1,3 +1,13 @@
-------------------------------------------------------------------
Mon Sep 8 14:14:19 CDT 2008 - maw@suse.de
- Update to version 2.23.92:
+ More work on bnc#418080, improvements in the sexp/sql machinery
+ Bugs fixed: bgo#547884, bgo#548343, and bgo#550412
+ Updated translations
- Drop evolution-data-server-sexp-to-sql-fixes.patch, which has
been upstreamed.
------------------------------------------------------------------- -------------------------------------------------------------------
Wed Sep 3 18:00:12 CEST 2008 - maw@suse.de Wed Sep 3 18:00:12 CEST 2008 - maw@suse.de

View File

@ -1,5 +1,5 @@
# #
# spec file for package evolution-data-server (Version 2.23.91) # spec file for package evolution-data-server (Version 2.23.92)
# #
# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. # Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
# #
@ -19,12 +19,31 @@
Name: evolution-data-server Name: evolution-data-server
BuildRequires: bison db-devel fdupes gcc-c++ gnome-certauth-devel gnome-common gnome-keyring-devel gtk-doc intltool krb5-devel libglade2-devel libgnome-devel libidl-devel libsoup-devel mozilla-nss-devel openldap2-devel perl-XML-Parser python-devel sgml-skel sqlite3-devel BuildRequires: bison
BuildRequires: db-devel
BuildRequires: fdupes
BuildRequires: gcc-c++
BuildRequires: gnome-certauth-devel
BuildRequires: gnome-common
BuildRequires: gnome-keyring-devel
BuildRequires: gtk-doc
BuildRequires: intltool
BuildRequires: krb5-devel
BuildRequires: libglade2-devel
BuildRequires: libgnome-devel
BuildRequires: libidl-devel
BuildRequires: libsoup-devel
BuildRequires: mozilla-nss-devel
BuildRequires: openldap2-devel
BuildRequires: perl-XML-Parser
BuildRequires: python-devel
BuildRequires: sgml-skel
BuildRequires: sqlite3-devel
License: GPL v2 or later License: GPL v2 or later
Group: Development/Libraries/GNOME Group: Development/Libraries/GNOME
AutoReqProv: on AutoReqProv: on
Summary: Evolution Data Server Summary: Evolution Data Server
Version: 2.23.91 Version: 2.23.92
Release: 1 Release: 1
Source0: ftp://ftp.gnome.org/pub/gnome/sources/evolution-data-server/2.22/%{name}-%{version}.tar.bz2 Source0: ftp://ftp.gnome.org/pub/gnome/sources/evolution-data-server/2.22/%{name}-%{version}.tar.bz2
Patch0: evolution-data-server-configure.patch Patch0: evolution-data-server-configure.patch
@ -38,8 +57,6 @@ Patch4: bnc-304835-ex-crash-after-restart.patch
Patch5: bnc-307861-calendar-auth.diff Patch5: bnc-307861-calendar-auth.diff
# PATCH-FIX-UPSTREAM: bgo-530514-check-to-handle-specific-server-response.diff bgo530514 psankar@suse.de -- Fix is in upstream svn from 2.22.2 # PATCH-FIX-UPSTREAM: bgo-530514-check-to-handle-specific-server-response.diff bgo530514 psankar@suse.de -- Fix is in upstream svn from 2.22.2
Patch9: bgo-530514-check-to-handle-specific-server-response.diff Patch9: bgo-530514-check-to-handle-specific-server-response.diff
# PATCH-FIX-UPSTREAM evolution-data-server-sexp-to-sql-fixes.patch bnc418080 sragavan@novell.com -- already committed, will go away in the next release
Patch10: evolution-data-server-sexp-to-sql-fixes.patch
# Change patch below if we move away from /opt/gnome # Change patch below if we move away from /opt/gnome
# PATCH-FIX-OPENSUSE libgnomeui-dep.patch -- It avoids a build dependency on libgnomeui to speed up bootstrap # PATCH-FIX-OPENSUSE libgnomeui-dep.patch -- It avoids a build dependency on libgnomeui to speed up bootstrap
Patch99: libgnomeui-dep.patch Patch99: libgnomeui-dep.patch
@ -99,7 +116,6 @@ documentation.
###%patch4 ###%patch4
###%patch5 ###%patch5
%patch9 %patch9
%patch10 -p1
%patch99 %patch99
%build %build
@ -113,13 +129,13 @@ autoheader
(cd calendar/libical; autoreconf -fi) (cd calendar/libical; autoreconf -fi)
# needed for evolution-data-server-2.22.0: # needed for evolution-data-server-2.22.0:
export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
%configure\ %configure \
--libexecdir=%{_prefix}/lib/evolution-data-server\ --libexecdir=%{_prefix}/lib/evolution-data-server \
--with-openldap\ --with-openldap \
--with-krb5=/usr\ --with-krb5=/usr \
--with-krb4=/usr\ --with-krb4=/usr \
--enable-gnome-keyring\ --enable-gnome-keyring \
--enable-gtk-doc\ --enable-gtk-doc \
--enable-ssl --enable-ssl
make %{?jobs:-j%jobs} make %{?jobs:-j%jobs}
@ -161,10 +177,17 @@ rm -rf $RPM_BUILD_ROOT
%{_datadir}/gtk-doc/html/* %{_datadir}/gtk-doc/html/*
%changelog %changelog
* Mon Sep 08 2008 maw@suse.de
- Update to version 2.23.92:
+ More work on bnc#418080, improvements in the sexp/sql machinery
+ Bugs fixed: bgo#547884, bgo#548343, and bgo#550412
+ Updated translations
- Drop evolution-data-server-sexp-to-sql-fixes.patch, which has
been upstreamed.
* Wed Sep 03 2008 maw@suse.de * Wed Sep 03 2008 maw@suse.de
- Add evolution-data-server-sexp-to-sql-fixes.patch (more work - Add evolution-data-server-sexp-to-sql-fixes.patch (more work
on bnc#418080). on bnc#418080).
* Wed Sep 03 2008 maw@suse.de * Tue Sep 02 2008 maw@suse.de
- Update to version 2.23.91: - Update to version 2.23.91:
+ Bugs fixed: bgo#213072, bnc#391936, bnc#418080 (more work), + Bugs fixed: bgo#213072, bnc#391936, bnc#418080 (more work),
bgo#466754, bgo#518728, bgo#546926, bgo#548331, bgo#548565, bgo#466754, bgo#518728, bgo#546926, bgo#548331, bgo#548565,
@ -238,12 +261,12 @@ rm -rf $RPM_BUILD_ROOT
* Mon Jun 02 2008 abharath@suse.de * Mon Jun 02 2008 abharath@suse.de
- Added - Added
+ bnc#394654 - bnc-394654-eds-crasher.patch: EDS crasher (Chenthill) + bnc#394654 - bnc-394654-eds-crasher.patch: EDS crasher (Chenthill)
* Wed May 21 2008 msuman@suse.de * Tue May 20 2008 msuman@suse.de
- Added - Added
+ bgo-530514-check-to-handle-specific-server-response.diff (Sankar P) + bgo-530514-check-to-handle-specific-server-response.diff (Sankar P)
+ bgo-530543-leak-while-syncing-mails-for-offline.diff (Sankar P) + bgo-530543-leak-while-syncing-mails-for-offline.diff (Sankar P)
+ bgo-531009-right-iterator-to-prevent-crash-in-offline-mail.diff (Sankar P) + bgo-531009-right-iterator-to-prevent-crash-in-offline-mail.diff (Sankar P)
* Wed May 14 2008 psankar@suse.de * Tue May 13 2008 psankar@suse.de
- Removed: bnc-152070-eds-crash.patch - Removed: bnc-152070-eds-crash.patch
- Removed: eds-compiler-warning.patch - Removed: eds-compiler-warning.patch
- Removed: evolution-data-server-abuild.patch - Removed: evolution-data-server-abuild.patch
@ -298,7 +321,7 @@ rm -rf $RPM_BUILD_ROOT
added patch includes those changes as well. added patch includes those changes as well.
* Wed Mar 26 2008 sbrabec@suse.cz * Wed Mar 26 2008 sbrabec@suse.cz
- Fixed GroupWise attachment crash on x86_64 (bgo#522389). - Fixed GroupWise attachment crash on x86_64 (bgo#522389).
* Fri Mar 14 2008 maw@suse.de * Thu Mar 13 2008 maw@suse.de
- Update to versoin 2.22.0: - Update to versoin 2.22.0:
+ Bugs fixed: bgo#327851, bgo#518728, and bgo#520362 + Bugs fixed: bgo#327851, bgo#518728, and bgo#520362
+ Minor API doc updates + Minor API doc updates
@ -364,7 +387,7 @@ rm -rf $RPM_BUILD_ROOT
+ Updated translations + Updated translations
+ Protect against a NULL subject string + Protect against a NULL subject string
- Remove old patches, and refresh and renumber the remaining ones. - Remove old patches, and refresh and renumber the remaining ones.
* Wed Dec 05 2007 maw@suse.de * Tue Dec 04 2007 maw@suse.de
- Don't require openldap2 to build. - Don't require openldap2 to build.
* Thu Oct 11 2007 sbrabec@suse.cz * Thu Oct 11 2007 sbrabec@suse.cz
- Removed bogus dependency on mDNSResponder. - Removed bogus dependency on mDNSResponder.
@ -375,7 +398,7 @@ rm -rf $RPM_BUILD_ROOT
+ Bug (bugzilla.novell.com) fixed: #275990 + Bug (bugzilla.novell.com) fixed: #275990
+ Updated timezone info + Updated timezone info
+ Updated translations. + Updated translations.
* Sat Sep 15 2007 maw@suse.de * Fri Sep 14 2007 maw@suse.de
- Fix bnc-307861-calendar-auth.diff. - Fix bnc-307861-calendar-auth.diff.
* Fri Sep 14 2007 pchenthill@novell.com * Fri Sep 14 2007 pchenthill@novell.com
- evolution-data-server-1.11.5-cert-auth-complete.patch: Updated the - evolution-data-server-1.11.5-cert-auth-complete.patch: Updated the
@ -436,7 +459,7 @@ rm -rf $RPM_BUILD_ROOT
* Fri Jun 22 2007 sbrabec@suse.cz * Fri Jun 22 2007 sbrabec@suse.cz
- Fixed IMAP UID format string vulnerability (#284828, - Fixed IMAP UID format string vulnerability (#284828,
GNOME#447414, CVE-2007-3257). GNOME#447414, CVE-2007-3257).
* Thu May 24 2007 ro@suse.de * Wed May 23 2007 ro@suse.de
- added ldconfig to post scripts - added ldconfig to post scripts
* Wed Apr 11 2007 maw@suse.de * Wed Apr 11 2007 maw@suse.de
- Update to version 1.10.1 - Update to version 1.10.1
@ -464,7 +487,7 @@ rm -rf $RPM_BUILD_ROOT
evolution-data-server-devel. evolution-data-server-devel.
* Fri Dec 29 2006 james@usr-local-bin.org * Fri Dec 29 2006 james@usr-local-bin.org
- Re-enable custom configure options. - Re-enable custom configure options.
* Thu Dec 14 2006 maw@suse.de * Wed Dec 13 2006 maw@suse.de
- Move to /usr - Move to /usr
- Do some specfile cleanup. - Do some specfile cleanup.
* Tue Nov 21 2006 sbrabec@suse.cz * Tue Nov 21 2006 sbrabec@suse.cz
@ -488,7 +511,7 @@ rm -rf $RPM_BUILD_ROOT
as it is a "to-be" reverted patch. as it is a "to-be" reverted patch.
* Wed Oct 18 2006 schwab@suse.de * Wed Oct 18 2006 schwab@suse.de
- Fix missing declaration. - Fix missing declaration.
* Tue Oct 03 2006 jhargadon@suse.de * Mon Oct 02 2006 jhargadon@suse.de
- update to version 1.8.1 - update to version 1.8.1
- translation updates - translation updates
- Bug fixes: - Bug fixes:
@ -501,7 +524,7 @@ rm -rf $RPM_BUILD_ROOT
- update to 1.8.0: - update to 1.8.0:
* updated translation * updated translation
* bugfixes * bugfixes
* Sat Aug 19 2006 jhargadon@suse.de * Fri Aug 18 2006 jhargadon@suse.de
- update to version 1.7.91 - update to version 1.7.91
- Add filters to Groupwise SOAP calls so that each component - Add filters to Groupwise SOAP calls so that each component
fetches items of its own type and none other fetches items of its own type and none other
@ -517,7 +540,7 @@ rm -rf $RPM_BUILD_ROOT
* Thu Jul 20 2006 kharish@novell.com * Thu Jul 20 2006 kharish@novell.com
- Patch to add alarms to GW meetings by default based on customer - Patch to add alarms to GW meetings by default based on customer
preference. Fixes bnc 167330. preference. Fixes bnc 167330.
* Wed Jul 19 2006 kharish@novell.com * Tue Jul 18 2006 kharish@novell.com
- Patch to correctly handle calendar attachment filenames that do - Patch to correctly handle calendar attachment filenames that do
not require special characters handling. They were being parsed not require special characters handling. They were being parsed
incorrectly and ignored by clients. incorrectly and ignored by clients.
@ -551,7 +574,7 @@ rm -rf $RPM_BUILD_ROOT
- Committed patch for bug 181906, which solves a exchange crash. - Committed patch for bug 181906, which solves a exchange crash.
* Fri Jun 02 2006 sragavan@novell.com * Fri Jun 02 2006 sragavan@novell.com
- Updated German Translations. - Updated German Translations.
* Thu Jun 01 2006 fejj@suse.de * Wed May 31 2006 fejj@suse.de
- Added bnc-176277-2.patch which fixes a deadlock condition - Added bnc-176277-2.patch which fixes a deadlock condition
* Mon May 29 2006 vvaradhan@novell.com * Mon May 29 2006 vvaradhan@novell.com
- Fixes (bnc) - Fixes (bnc)
@ -584,7 +607,7 @@ rm -rf $RPM_BUILD_ROOT
- Removed gw-force-use-imap.patch as it was decided to default to soap. - Removed gw-force-use-imap.patch as it was decided to default to soap.
* Tue May 02 2006 fejj@suse.de * Tue May 02 2006 fejj@suse.de
- Added bnc-167638.patch: Fixes long shutdown times due to the imap/gw providers trying to sync data at exit time. - Added bnc-167638.patch: Fixes long shutdown times due to the imap/gw providers trying to sync data at exit time.
* Tue May 02 2006 fejj@suse.de * Mon May 01 2006 fejj@suse.de
- Added bgo-315976-INBOX-not-shown-when-override-namespace.patch - Added bgo-315976-INBOX-not-shown-when-override-namespace.patch
* Tue Apr 25 2006 sragavan@novell.com * Tue Apr 25 2006 sragavan@novell.com
- Fixes (bnc) - Fixes (bnc)
@ -676,7 +699,7 @@ rm -rf $RPM_BUILD_ROOT
152062 Evolution won't show an attachment 152062 Evolution won't show an attachment
158093 Evolution: Groupwise "Sent Items" folder should have a 158093 Evolution: Groupwise "Sent Items" folder should have a
"To:" column instead of a "From:" column "To:" column instead of a "From:" column
* Thu Mar 16 2006 vvaradhan@novell.com * Wed Mar 15 2006 vvaradhan@novell.com
- Fixes (bnc) - Fixes (bnc)
157323 Messages deleted from Groupwise folder remain in Evo. 157323 Messages deleted from Groupwise folder remain in Evo.
156559 Evolution won't show me 827 messages 156559 Evolution won't show me 827 messages
@ -742,12 +765,12 @@ rm -rf $RPM_BUILD_ROOT
- Fixed devel dependencies. - Fixed devel dependencies.
* Thu Dec 01 2005 gekker@suse.de * Thu Dec 01 2005 gekker@suse.de
- Update to version 1.4.2.1 - Update to version 1.4.2.1
* Thu Nov 03 2005 dmueller@suse.de * Wed Nov 02 2005 dmueller@suse.de
- don't build as root - don't build as root
* Thu Oct 13 2005 gekker@suse.de * Thu Oct 13 2005 gekker@suse.de
- Update to version 1.4.1 - Update to version 1.4.1
- Fix more warnings - Fix more warnings
* Mon Sep 26 2005 ro@suse.de * Sun Sep 25 2005 ro@suse.de
- added LDAP_DEPRECATED to CFLAGS - added LDAP_DEPRECATED to CFLAGS
* Fri Sep 09 2005 aj@suse.de * Fri Sep 09 2005 aj@suse.de
- Change last patch. - Change last patch.
@ -756,20 +779,20 @@ rm -rf $RPM_BUILD_ROOT
* Mon Sep 05 2005 rodrigo@suse.de * Mon Sep 05 2005 rodrigo@suse.de
- Update to version 1.4.0 - Update to version 1.4.0
- Removed upstreamed patches - Removed upstreamed patches
* Thu Aug 25 2005 gekker@suse.de * Wed Aug 24 2005 gekker@suse.de
- Update to version 1.3.8 - Update to version 1.3.8
- Fix brokeness inlibical - Fix brokeness inlibical
* Sat Aug 13 2005 aj@suse.de * Sat Aug 13 2005 aj@suse.de
- Add lzo and lzo-devel to nfb. - Add lzo and lzo-devel to nfb.
* Fri Aug 12 2005 gekker@suse.de * Thu Aug 11 2005 gekker@suse.de
- Update to version 1.3.7 - Update to version 1.3.7
* Mon Aug 01 2005 gekker@suse.de * Mon Aug 01 2005 gekker@suse.de
- Update to version 1.3.6.1 - Update to version 1.3.6.1
* Fri Jul 29 2005 sbrabec@suse.cz * Fri Jul 29 2005 sbrabec@suse.cz
- Require mozilla-nss (#98002). - Require mozilla-nss (#98002).
* Wed Jul 27 2005 ro@suse.de * Tue Jul 26 2005 ro@suse.de
- fix typo in specfile - fix typo in specfile
* Tue Jul 26 2005 gekker@suse.de * Mon Jul 25 2005 gekker@suse.de
- Update to version 1.3.5 - Update to version 1.3.5
* Thu Jul 14 2005 schwab@suse.de * Thu Jul 14 2005 schwab@suse.de
- Fix missing declarations again. - Fix missing declarations again.
@ -787,7 +810,7 @@ rm -rf $RPM_BUILD_ROOT
- Build with mozilla-nss. - Build with mozilla-nss.
* Wed Jun 01 2005 sbrabec@suse.cz * Wed Jun 01 2005 sbrabec@suse.cz
- Fixed devel requirements. - Fixed devel requirements.
* Thu May 19 2005 ro@suse.de * Wed May 18 2005 ro@suse.de
- fix build with current pkgconfig - fix build with current pkgconfig
* Fri Apr 29 2005 sbrabec@suse.cz * Fri Apr 29 2005 sbrabec@suse.cz
- Yet another mail crasher fix (#66996). - Yet another mail crasher fix (#66996).
@ -801,14 +824,14 @@ rm -rf $RPM_BUILD_ROOT
* Wed Mar 16 2005 gekker@suse.de * Wed Mar 16 2005 gekker@suse.de
- Update to version 1.2.1 - Update to version 1.2.1
- Add 64bit-warn.patch - Add 64bit-warn.patch
* Wed Mar 09 2005 gekker@suse.de * Tue Mar 08 2005 gekker@suse.de
- Update to version 1.2.0 (GNOME 2.10) - Update to version 1.2.0 (GNOME 2.10)
- remove upstreamed dest.patch - remove upstreamed dest.patch
* Wed Mar 02 2005 gekker@suse.de * Wed Mar 02 2005 gekker@suse.de
- add dest.patch - add dest.patch
* Wed Mar 02 2005 gekker@suse.de * Wed Mar 02 2005 gekker@suse.de
- update to version 1.1.6 - update to version 1.1.6
* Mon Feb 28 2005 ro@suse.de * Sun Feb 27 2005 ro@suse.de
- fix build on lib64 - fix build on lib64
* Fri Feb 25 2005 gekker@suse.de * Fri Feb 25 2005 gekker@suse.de
- fix libexecdir, so that e-d-s will actually get launched - fix libexecdir, so that e-d-s will actually get launched
@ -824,7 +847,7 @@ rm -rf $RPM_BUILD_ROOT
privileges) in lock helper (CAN-2005-0102, #50116). privileges) in lock helper (CAN-2005-0102, #50116).
* Mon Jan 24 2005 meissner@suse.de * Mon Jan 24 2005 meissner@suse.de
- Fixed some gcc 4 warnings/error that show code problems. - Fixed some gcc 4 warnings/error that show code problems.
* Sat Jan 15 2005 clahey@suse.de * Fri Jan 14 2005 clahey@suse.de
- Update to version 1.1.3. - Update to version 1.1.3.
* Thu Jan 06 2005 gekker@suse.de * Thu Jan 06 2005 gekker@suse.de
- Update to version 1.1.2 - Update to version 1.1.2
@ -842,14 +865,14 @@ rm -rf $RPM_BUILD_ROOT
- locale rename: no -> nb - locale rename: no -> nb
* Thu Sep 30 2004 dobey@suse.de * Thu Sep 30 2004 dobey@suse.de
- Add patch to fix bug 66368 in bugzilla.ximian.com - Add patch to fix bug 66368 in bugzilla.ximian.com
* Thu Sep 30 2004 dobey@suse.de * Wed Sep 29 2004 dobey@suse.de
- Add patch to fix bug 66230 in bugzilla.ximian.com - Add patch to fix bug 66230 in bugzilla.ximian.com
* Fri Sep 24 2004 dobey@suse.de * Fri Sep 24 2004 dobey@suse.de
- Updated to version 1.0.1 - Updated to version 1.0.1
- Removed evolution-data-server-0.0.99.dif which is in upstream source - Removed evolution-data-server-0.0.99.dif which is in upstream source
* Fri Sep 17 2004 ro@suse.de * Thu Sep 16 2004 ro@suse.de
- readd evolution-data-server-0.0.99.dif to fix parallel build - readd evolution-data-server-0.0.99.dif to fix parallel build
* Tue Sep 14 2004 dobey@suse.de * Mon Sep 13 2004 dobey@suse.de
- Updated to version 1.0.0 - Updated to version 1.0.0
- Removed evolution-data-server-0.0.99.dif which was not changelogged, - Removed evolution-data-server-0.0.99.dif which was not changelogged,
and seems to not actually change anything and seems to not actually change anything
@ -859,7 +882,7 @@ rm -rf $RPM_BUILD_ROOT
- Update to version 0.0.99 - Update to version 0.0.99
* Wed Aug 18 2004 dobey@suse.de * Wed Aug 18 2004 dobey@suse.de
- Fix LDAP support and remove unused configure options - Fix LDAP support and remove unused configure options
* Sat Aug 14 2004 dobey@suse.de * Fri Aug 13 2004 dobey@suse.de
- Update to version 0.0.98 - Update to version 0.0.98
- Add dependencies to the evolution-data-server-devel package - Add dependencies to the evolution-data-server-devel package
* Thu Aug 05 2004 dobey@suse.de * Thu Aug 05 2004 dobey@suse.de
@ -877,13 +900,13 @@ rm -rf $RPM_BUILD_ROOT
- Updated to version 0.0.95. - Updated to version 0.0.95.
* Mon Jun 21 2004 clahey@suse.de * Mon Jun 21 2004 clahey@suse.de
- Updated to version 0.0.94.1. - Updated to version 0.0.94.1.
* Fri Jun 04 2004 mibarra@suse.de * Thu Jun 03 2004 mibarra@suse.de
- Updated to version 0.0.94. - Updated to version 0.0.94.
* Mon May 24 2004 ro@suse.de * Mon May 24 2004 ro@suse.de
- fix lib64 issue - fix lib64 issue
* Sat May 22 2004 mibarra@suse.de * Fri May 21 2004 mibarra@suse.de
- Updated to 0.0.93. - Updated to 0.0.93.
* Tue May 18 2004 clahey@suse.de * Tue May 18 2004 clahey@suse.de
- Don't install to /opt/gnome/libexec - Don't install to /opt/gnome/libexec
* Tue May 18 2004 clahey@suse.de * Mon May 17 2004 clahey@suse.de
- Initial import of evolution-data-server. - Initial import of evolution-data-server.