From: Carl Worth Date: Thu, 10 Mar 2011 19:05:49 +0000 (-0800) Subject: Merge remote branch 'amdragon/search-perf-3' X-Git-Tag: debian/0.6_254~182 X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=commitdiff_plain;h=42b0409f8e27a3e9008b5735f397e67152893cfa;hp=56d19273fe6820907b6800cf391c8b2cb94ab86d Merge remote branch 'amdragon/search-perf-3' --- diff --git a/Makefile b/Makefile index 7549b40d..4ca74a3f 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ extra_cxxflags := # Makefile.config if it doesn't exist yet. And add Makefile.config to # our global dependency list. include Makefile.config -Makefile.config: configure +Makefile.config: $(srcdir)/configure @echo "" @echo "Note: Calling ./configure with no command-line arguments. This is often fine," @echo " but if you want to specify any arguments (such as an alternate prefix" diff --git a/Makefile.local b/Makefile.local index 38ead11d..50bba640 100644 --- a/Makefile.local +++ b/Makefile.local @@ -12,7 +12,7 @@ PACKAGE=notmuch IS_GIT=$(shell if [ -d .git ] ; then echo yes ; else echo no; fi) -VERSION:=$(shell cat version) +VERSION:=$(shell cat ${srcdir}/version) ifneq ($(MAKECMDGOALS),release) ifneq ($(MAKECMDGOALS),release-message) ifeq ($(IS_GIT),yes) @@ -81,7 +81,7 @@ dist: $(TAR_FILE) # targets in the case of parallel invocation of make (-j). # # We carefully ensure that our VERSION variable is passed down to any -# sub-ordinate make invocations (which won't otherwhise know that they +# sub-ordinate make invocations (which won't otherwise know that they # are part of the release and need to take the version from the # version file). .PHONY: release diff --git a/bindings/go/cmds/notmuch-addrlookup.go b/bindings/go/cmds/notmuch-addrlookup.go index a72e5301..16958e50 100644 --- a/bindings/go/cmds/notmuch-addrlookup.go +++ b/bindings/go/cmds/notmuch-addrlookup.go @@ -11,7 +11,6 @@ import "sort" // 3rd-party imports import "notmuch" -//import "github.com/jteeuwen/go-pkg-ini/ini" import "github.com/kless/goconfig/config" type mail_addr_freq struct { @@ -189,7 +188,7 @@ func new_address_matcher() *address_matcher { } if cfg,err = config.ReadDefault(path.Join(home, ".notmuch-config")); err != nil { - log.Exitf("error loading config file:",err) + log.Fatalf("error loading config file:",err) } db_path,_ := cfg.String("database", "path") diff --git a/bindings/ruby/.gitignore b/bindings/ruby/.gitignore new file mode 100644 index 00000000..fa257520 --- /dev/null +++ b/bindings/ruby/.gitignore @@ -0,0 +1,6 @@ +# .gitignore for bindings/ruby + +# Generated files +Makefile +mkmf.log +notmuch.so diff --git a/compat/Makefile.local b/compat/Makefile.local index 653fc710..504eb715 100644 --- a/compat/Makefile.local +++ b/compat/Makefile.local @@ -1,7 +1,7 @@ # -*- makefile -*- dir := compat -extra_cflags += -I$(dir) +extra_cflags += -I$(srcdir)/$(dir) notmuch_compat_srcs := diff --git a/completion/Makefile.local b/completion/Makefile.local index 755b0f7e..dfc12713 100644 --- a/completion/Makefile.local +++ b/completion/Makefile.local @@ -5,8 +5,8 @@ dir := completion # The dir variable will be re-assigned to later, so we can't use it # directly in any shell commands. Instead we save its value in other, # private variables that we can use in the commands. -bash_script := $(dir)/notmuch-completion.bash -zsh_script := $(dir)/notmuch-completion.zsh +bash_script := $(srcdir)/$(dir)/notmuch-completion.bash +zsh_script := $(srcdir)/$(dir)/notmuch-completion.zsh install: install-$(dir) diff --git a/configure b/configure index 3d1efb0b..157ecf39 100755 --- a/configure +++ b/configure @@ -1,5 +1,26 @@ #! /bin/sh +srcdir=$(dirname "$0") + +# For a non-srcdir configure invocation (such as ../configure), create +# the directory structure and copy Makefiles. +if [ "$srcdir" != "." ]; then + + for dir in . $(grep "^subdirs *=" "$srcdir"/Makefile | sed -e "s/subdirs *= *//"); do + mkdir -p "$dir" + cp "$srcdir"/"$dir"/Makefile.local "$dir" + cp "$srcdir"/"$dir"/Makefile "$dir" + done + + # Easiest way to get the test suite to work is to just copy the + # whole thing into the build directory. + cp -a "$srcdir"/test/* test + + # Emacs only likes to generate compiled files next to the .el files + # by default so copy these as well (which is not ideal0. + cp -a "$srcdir"/emacs/*.el emacs +fi + # Set several defaults (optionally specified by the user in # environemnt variables) CC=${CC:-gcc} @@ -424,7 +445,7 @@ EOF fi printf "Checking for getline... " -if ${CC} -o compat/have_getline compat/have_getline.c > /dev/null 2>&1 +if ${CC} -o compat/have_getline "$srcdir"/compat/have_getline.c > /dev/null 2>&1 then printf "Yes.\n" have_getline=1 @@ -435,7 +456,7 @@ fi rm -f compat/have_getline printf "Checking for strcasestr... " -if ${CC} -o compat/have_strcasestr compat/have_strcasestr.c > /dev/null 2>&1 +if ${CC} -o compat/have_strcasestr "$srcdir"/compat/have_strcasestr.c > /dev/null 2>&1 then printf "Yes.\n" have_strcasestr=1 @@ -508,6 +529,24 @@ cat > Makefile.config <results_start, stdout); + for (; notmuch_threads_valid (threads); notmuch_threads_move_to_next (threads)) { int first_tag = 1; - if (first_thread) - fputs (format->results_start, stdout); - else + if (! first_thread) fputs (format->item_sep, stdout); thread = notmuch_threads_get (threads); @@ -236,8 +236,7 @@ do_search_threads (const search_format_t *format, notmuch_thread_destroy (thread); } - if (! first_thread) - fputs (format->results_end, stdout); + fputs (format->results_end, stdout); return 0; } @@ -255,15 +254,15 @@ do_search_messages (const search_format_t *format, if (messages == NULL) return 1; + fputs (format->results_start, stdout); + for (; notmuch_messages_valid (messages); notmuch_messages_move_to_next (messages)) { message = notmuch_messages_get (messages); - if (first_message) - fputs (format->results_start, stdout); - else + if (! first_message) fputs (format->item_sep, stdout); if (output == OUTPUT_FILES) { @@ -281,8 +280,7 @@ do_search_messages (const search_format_t *format, notmuch_messages_destroy (messages); - if (! first_message) - fputs (format->results_end, stdout); + fputs (format->results_end, stdout); return 0; } @@ -310,15 +308,15 @@ do_search_tags (notmuch_database_t *notmuch, if (tags == NULL) return 1; + fputs (format->results_start, stdout); + for (; notmuch_tags_valid (tags); notmuch_tags_move_to_next (tags)) { tag = notmuch_tags_get (tags); - if (first_tag) - fputs (format->results_start, stdout); - else + if (! first_tag) fputs (format->item_sep, stdout); format->item_id (tags, "", tag); @@ -331,8 +329,7 @@ do_search_tags (notmuch_database_t *notmuch, if (messages) notmuch_messages_destroy (messages); - if (! first_tag) - fputs (format->results_end, stdout); + fputs (format->results_end, stdout); return 0; } diff --git a/test/json b/test/json index 7fe2a27a..307cd1e6 100755 --- a/test/json +++ b/test/json @@ -39,4 +39,8 @@ test_expect_equal "$output" "[{\"thread\": \"XXX\", \"subject\": \"json-search-utf8-body-sübjéct\", \"tags\": [\"inbox\", \"unread\"]}]" +test_begin_subtest "Search returning no messages" +output=$(notmuch search --format=json "this string had better not match any messages" | notmuch_search_sanitize) +test_expect_equal "$output" "[]" + test_done diff --git a/test/notmuch-test b/test/notmuch-test index 9d77c0fa..e3e04476 100755 --- a/test/notmuch-test +++ b/test/notmuch-test @@ -23,6 +23,7 @@ TESTS=" search-output search-by-folder search-position-overlap-bug + search-insufficient-from-quoting json thread-naming raw diff --git a/test/search-insufficient-from-quoting b/test/search-insufficient-from-quoting new file mode 100755 index 00000000..6c858a88 --- /dev/null +++ b/test/search-insufficient-from-quoting @@ -0,0 +1,44 @@ +#!/bin/bash +test_description='messages with unquoted . in name' +. ./test-lib.sh + +add_message \ + '[from]="Some.Name for Someone "' \ + '[subject]="This message needs more quoting on the From line"' + +add_message \ + '[from]="\"Some.Name for Someone\" "' \ + '[subject]="This message has necessary quoting in place"' + +add_message \ + '[from]="No.match Here "' \ + '[subject]="This message needs more quoting on the From line"' + +add_message \ + '[from]="\"No.match Here\" "' \ + '[subject]="This message has necessary quoting in place"' + + +test_begin_subtest "Search by first name" +output=$(notmuch search from:Some.Name | notmuch_search_sanitize) +test_expect_equal_failure "$output" "thread:XXX 2001-01-05 [1/1] Some.Name for Someone; This message needs more quoting on the From line (inbox unread) +thread:XXX 2001-01-05 [1/1] Some.Name for Someone; This message has necessary quoting in place (inbox unread)" + +test_begin_subtest "Search by last name:" +output=$(notmuch search from:Someone | notmuch_search_sanitize) +test_expect_equal_failure "$output" "thread:XXX 2001-01-05 [1/1] Some.Name for Someone; This message needs more quoting on the From line (inbox unread) +thread:XXX 2001-01-05 [1/1] Some.Name for Someone; This message has necessary quoting in place (inbox unread)" + +test_begin_subtest "Search by address:" +output=$(notmuch search from:bugs@quoting.com | notmuch_search_sanitize) +test_expect_equal_failure "$output" "thread:XXX 2001-01-05 [1/1] Some.Name for Someone; This message needs more quoting on the From line (inbox unread) +thread:XXX 2001-01-05 [1/1] Some.Name for Someone; This message has necessary quoting in place (inbox unread)" + +test_begin_subtest "Search for all messages:" +output=$(notmuch search '*' | notmuch_search_sanitize) +test_expect_equal_failure "$output" "thread:XXX 2001-01-05 [1/1] Some.Name for Someone; This message needs more quoting on the From line (inbox unread) +thread:XXX 2001-01-05 [1/1] Some.Name for Someone; This message has necessary quoting in place (inbox unread) +thread:XXX 2001-01-05 [1/1] No.match Here; This message needs more quoting on the From line (inbox unread) +thread:XXX 2001-01-05 [1/1] No.match Here; This message has necessary quoting in place (inbox unread)" + +test_done diff --git a/test/test-lib.sh b/test/test-lib.sh index d1794265..f5361725 100755 --- a/test/test-lib.sh +++ b/test/test-lib.sh @@ -351,8 +351,11 @@ ${additional_headers}" ${additional_headers}" fi + # Note that in the way we're setting it above and using it below, + # `additional_headers' will also serve as the header / body separator + # (empty line in between). -cat <"$gen_msg_filename" + cat <"$gen_msg_filename" From: ${template[from]} To: ${template[to]} Message-Id: <${gen_msg_id}>